仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
捕獲.PNG (36.2 KB, 下載次數: 102)
下載附件
2020-5-22 09:10 上傳
單片機源程序如下:
- #include <REG52.H>
- #define uint unsigned int
- #define uchar unsigned char
- sbit k1=P1^0;
- uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED從低位往高位移
- uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED從高位往低位移
- uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//LED從1個亮到8個都點亮(從低位往高位)
- uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//LED從1個亮到8個都點亮(從高位往低位)
- uchar i,tm;
- uchar num=0;
- void disp1();
- void disp2();
- void disp3();
- void disp4();
- void delay_ms(unsigned int tim); //延時函數
- void t0isr() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- tm++;
- if(tm>=10)
- {
- tm=0;
-
- switch(num)
- {
- case 1: disp1();delay_ms(100);break;
- case 2: disp2();delay_ms(100);break;
- case 3: disp3();delay_ms(100);break;
- case 4: disp4();delay_ms(100);num=0;break;
-
- default:break;
- }
- }
- }
- void delay(uchar time)
- {
- uchar j,k;
- for(j=time;j>0;j--)
- for(k=125;k>0;k--);
- }
- void delay_ms(unsigned int tim) //延時函數
- {
- unsigned int i,j;
- for(i=0;i<tim;i++);
- for(j=0;j<120;j++);
- }
- void disp1() //狀態1 LED順時針轉一圈
- {
-
- for(i=0;i<8;i++)
- {
- P2=table0[i];
- delay(1000);
- }
- P2=0xff;
- for(i=0;i<8;i++)
- {
- P0=table0[i];
- delay(1000);
- }
- P0=0xff;
-
- }
- void disp2() //狀態2 LED逆時針轉一圈
- {
-
- for(i=0;i<8;i++)
- {
- P0=table1[i];
- delay(1000);
- }
- P0=0xff;
- for(i=0;i<8;i++)
- {
- P2=table1[i];
- delay(1000);
- }
- P2=0xff;
- }
- void disp3() //狀態3 LED自上而下逐漸點亮(一半點亮一半不亮)
- {
- delay(1000);
- if(k1==1)
- {
- for(i=0;i<8;i++)
- {
- P0=table2[i];
- P2=table2[i];
- delay(1000);
- }
- }
- }
- void disp4() //狀態4 LED自下而上逐漸點亮(直到全部點亮)
- {
- for(i=0;i<8;i++)
- {
- P0=table3[i];
- P2=table3[i];
- delay(1000);
- }
- P0=0xff; P2=0xff;
- }
- void main()
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0=1;
- ET0=1;
- EA=1;
- while(1)
- {
- if(k1==0)
- {
- delay_ms(500); //消抖
- // while(!k1); //等待按鍵松開
- if(k1==0)
- { num++;
- while(!k1);
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載:
流水燈.rar
(68.44 KB, 下載次數: 57)
2020-5-22 09:10 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|