其他分享
首页 > 其他分享> > 8个发光二极管间隔200ms由上至下,再由下至上点亮(单个灯点亮200ms,然后下一个灯点亮),此过程重复两次;然后全部熄灭1s,接着以300ms间隔全部闪烁5次。重复上述全部过程。(要求用定时器定时

8个发光二极管间隔200ms由上至下,再由下至上点亮(单个灯点亮200ms,然后下一个灯点亮),此过程重复两次;然后全部熄灭1s,接着以300ms间隔全部闪烁5次。重复上述全部过程。(要求用定时器定时

作者:互联网


代码:【自己写的,初学者水平不高,但是能实现,如果有错误或者是可以优化,请评论区留言,不喜勿喷】

//这个是帮同学弄的,但是题目要求用定时器来完成,不然都不用那么麻烦。
//下面有重复的代码,但是我发现我把它弄成函数就会出问题,菜鸟水平,大佬们看看笑话就好了。
1 #include<reg51.h> 2 unsigned char TAB[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //共阳,低电平亮 3 int i,j,k,K1=0; 4 main() 5 { TMOD=0x01; 6 TH0=(65536-50000)/256; 7 TL0=(65536-50000)/256; 8 TR0=1; 9 while(1) 10 { 11 for(i=0;i<2;i++) 12 { 13 for(j=0;j<7;j++) 14 { 15 P0=TAB[7-j]; 16 while(1){ 17 if(TF0==1){ 18 TF0=0; 19 TH0=(65536-50000)/256; 20 TL0=(65536-50000)/256; 21 K1++; 22 if(K1==4){ 23 K1=0; 24 break; 25 } 26 } 27 } 28 } 29 for(k=0;k<7;k++) 30 { 31 P0=TAB[k]; 32 while(1){ 33 if(TF0==1){ 34 TF0=0; 35 TH0=(65536-50000)/256; 36 TL0=(65536-50000)/256; 37 K1++; 38 if(K1==4){ 39 K1=0; 40 break; 41 } 42 } 43 } 44 } 45 } 46 P0=0XFF; 47 while(1){ 48 if(TF0==1){ 49 TF0=0; 50 TH0=(65536-50000)/256; 51 TL0=(65536-50000)/256; 52 K1++; 53 if(K1==20){ 54 K1=0; 55 break; 56 } 57 } 58 } 59 for(j=0;j<10;j++) 60 { 61 P0=~P0; 62 while(1){ 63 if(TF0==1){ 64 TF0=0; 65 TH0=(65536-50000)/256; 66 TL0=(65536-50000)/256; 67 K1++; 68 if(K1==6){ 69 K1=0; 70 break; 71 } 72 } 73 } 74 } 75 } 76 }

protues仿真:

标签:50000,定时器,点亮,间隔,200ms,65536,256
来源: https://www.cnblogs.com/mcpigdull/p/danpianji_seg_timer_3.html