(新手求助!)51单片机

Acid橘子 2019-10-19 03:43:15
以下这段代码中程序执行到break后是怎么继续进行的?如何保证switch中每一条语句执行1ms。望解答,谢谢了! #include<reg52.h> sbit ADDR0=P1^0; sbit ADDR1=P1^1; sbit ADDR2=P1^2; sbit ADDR3=P1^3; sbit ENLED=P1^4; unsigned char code LedChar[]={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E }; unsigned char LedBuff[]={ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF }; void main() { unsigned int cnt=0; unsigned long sec=0; unsigned char i=0; ENLED=0; ADDR3=1; 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++; 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]; } switch(i) { case 0: ADDR2=0;ADDR1=0;ADDR0=0;i++;P0=LedBuff[0]; ENLED=0;break; case 1: ADDR2=0;ADDR1=0;ADDR0=1;i++;P0=LedBuff[1]; ENLED=0;break; case 2: ADDR2=0;ADDR1=1;ADDR0=0;i++;P0=LedBuff[2]; ENLED=0;break; case 3: ADDR2=0;ADDR1=1;ADDR0=1;i++;P0=LedBuff[3]; ENLED=0;break; case 4: ADDR2=1;ADDR1=0;ADDR0=0;i++;P0=LedBuff[4]; ENLED=0;break; case 5: ADDR2=1;ADDR1=0;ADDR0=1;i=0;P0=LedBuff[5]; ENLED=0;break; default:break; } } } }
...全文
89 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
electric_man 2019-10-21
  • 打赏
  • 举报
回复
跳出swith循环,让每一条case都是1ms的话需要延时函数延时
Acid橘子 2019-10-21
  • 打赏
  • 举报
回复
引用 4 楼 electric_man的回复:
跳出swith循环,让每一条case都是1ms的话需要延时函数延时
这个有定时器,就不用延时函数啦。
哈尼洛生 2019-10-20
  • 打赏
  • 举报
回复
break跳出switch语句,你现在这个代码就可以让 switch 里的语句执行1ms,1ms过了之后,TF0溢出等于1了才会进入到下一条case
Acid橘子 2019-10-19
  • 打赏
  • 举报
回复
明白啦,谢谢
hell0joe 2019-10-19
  • 打赏
  • 举报
回复
跳出swith,然后继续循环到if(TF0 == 1);如果你定时器定的是1ms,每次循坏的时间就是1ms,自然你的原状态就是保持了1ms

27,511

社区成员

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

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