普中科技51单片机数码管动态显示

qq_44993006 2019-04-28 11:10:24
我想要普中科技的51单片机开发版实现数码管动态显示,可是我为什么不能实现这个功能啊?谢谢,我是一只小小白啊 #include<reg52.h> sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned char code led1[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char led2[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; void main() { unsigned char i=0; unsigned int cnt=0; unsigned long sec=0; LSA=0; LSB=0; LSC=0; TMOD=0X01; TH0=0XFC; TL0=0X67; TR0=1; while(1) { if(TF0==1) { TF0=0; TH0=0XFC; TL0=0X67; cnt++; if(cnt>=1000) { cnt=0; sec++; led2[0]=led1[sec%10]; led2[1]=led1[sec/10%10]; led2[2]=led1[sec/100%10]; led2[3]=led1[sec/1000%10]; led2[4]=led1[sec/10000%10]; led2[5]=led1[sec/100000%10]; led2[6]=led1[sec/1000000%10]; led2[7]=led1[sec/10000000%10]; } if(i==0) {LSA=0;LSB=0;LSC=0; i++;P0=led2[0];} else if(i==1) {LSA=0;LSB=0;LSC=1; i++;P0=led2[1];} else if(i==2) {LSA=0;LSB=1;LSC=0; i++;P0=led2[2];} else if(i==3) {LSA=0;LSB=1;LSC=1; i++;P0=led2[3];} else if(i==4) {LSA=1;LSB=0;LSC=0; i++;P0=led2[4];} else if(i==5) {LSA=1;LSB=0;LSC=1; i++;P0=led2[5];} else if(i==6) {LSA=1;LSB=1;LSC=0; i++;P0=led2[6];} else if(i==7) {LSA=1;LSB=1;LSC=1; i++;P0=led2[7];} } } }
...全文
1136 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hard_but_work 2021-02-06
  • 打赏
  • 举报
回复
题主代码的主要问题是:i为动态扫描索。引当i==7条件成立时,后面应该执行i=0;这样才能使i从0-7不断取值,从而动态刷新片选引脚p2.2、p2.3、p2.4,最终实现动态刷新数码管(视觉上同时点亮多个数码管)。 仿照金沙滩教程里“动态刷新数码管”的代码,普中51-A2单片机可运行下面代码。 #include <reg52.h> sbit ADDR0 = P2^2; sbit ADDR1 = P2^3; sbit ADDR2 = P2^4; unsigned char code LedChar[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, }; unsigned char LedBuff[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, }; void main(){ unsigned char i = 0;//动态扫描索引 unsigned int cut = 0;//记录t中断次数 unsigned long sec = 0;//记录经过的秒数 TMOD = 0X01; TH0 = 0XFC; TL0 = 0X67;//定时1ms TR0 = 1; while(1){ if(TF0 == 1){ TF0 = 0; TH0 = 0XFC; TL0 = 0X67; cut++; if(cut >= 1000){ cut = 0; sec++; //以下代码将sec按十进制位从低到高依次提取并转化为数码管显示字符 LedBuff[0] = LedChar[sec%10]; LedBuff[1] = LedChar[sec/10%10]; LedBuff[2] = LedChar[sec/100%10]; LedBuff[3] = LedChar[sec/1000%10]; LedBuff[4] = LedChar[sec/10000%10]; LedBuff[5] = LedChar[sec/100000%10]; } //以下代码完成数码管动态扫描刷新 if(cut >= 50){ switch(i){ case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; i++; P0 = ~LedBuff[0]; break; case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; i++; P0 = ~LedBuff[1]; break; case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; i++; P0 = ~LedBuff[2]; break; case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; i++; P0 = ~LedBuff[3]; break; case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; i++; P0 = ~LedBuff[4]; break; case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; i=0; P0 = ~LedBuff[5]; break; default: break; } } } } }
qq_44993006 2019-04-29
  • 打赏
  • 举报
回复
这个是我自己写的,我试试哈,谢谢
  • 打赏
  • 举报
回复
普中购买板子时不是提供代码例子了? 这些代码是你自己写的?还是普中提供的? 在程序的尾部+unsigned char yan=255;while(yan--);试看

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧