C51仿真實現交通燈+單片機代碼
http://www.zg4o1577.cn/bbs/dpj-141185-1.html
(出處: 單片機論壇)
在上一篇貼中,我們用了兩個鎖存器實現了交通燈的仿真,但是我們仔細觀察,可以發現交通燈的閃爍規律還可以更細一步,使用4個鎖存器就使代碼變得很簡潔了
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ圖片20190130202017.png (12.98 KB, 下載次數: 70)
下載附件
2019-1-30 20:29 上傳
0.png (9.24 KB, 下載次數: 67)
下載附件
2019-1-31 02:38 上傳
單片機源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar m,n,k,f=1;
- uchar time1[]={20,120};//數碼管第一狀態5s,第二狀態6s
- uchar time2[]={100,10,60};//交通燈第一狀態5s,第二狀態3s,第三狀態3s
- uint index1=1;
- uint index2=0;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,
- 0x00
- };
- uchar P2_0=0x01;//(P2.0~P2.3)選擇數碼管
- uchar P3_0=0x01;//(P30~P33)選擇交通燈
- uchar P1_0=0x04;//控制燈狀態
- int number=6;
- void showNumber()
- {
- if(index1==0)
- {
- P2=P2_0;
- P0=~table[number];
- if(number==0)
- {
- P2=0x00;
- P2_0<<=1;
- if(P2_0==0x10)
- P2_0=0x01;
- number=6;
- index1=1;
- }
- }
- }
- void openLight()
- {
- switch(index2)
- {
- case 0:
- if(m==time2[index2])
- {
- index2=1;
- m=0;
- }
- break;
- case 1:
- if(m==time2[index2])
- {
- P1_0=P1_0^0x04;
- k++;
- m=0;
- if(k==8)
- {
- index2=2;
- P1_0=0x02;
- k=0;
- }
-
- }
- break;
- case 2:
- if(m==time2[index2])
- {
- P1_0=0x04;
- index2=0;
- P3_0=P3_0<<1;
- if(P3_0==0x10)
- P3_0=0x01;
- m=0;
- }
- break;
- }
- P1=0x00;
- P3=0xff;
- P1=0x01;
- P3=0x00;
- P1=0x00;
- P3=P3_0;
- P1=P1_0;
- P3=0x00;
- }
- void main()
- {
- P1=0x00;
- EA=1;//打開全局中斷允許
- TMOD=0x11;//設置定時器工作方式
- TH0=15535/256;//計時50ms
- TL0=15535%256;
- TH1=15535/256;
- TL1=15535%256;
- ET0=1;//打開計時器中斷允許
- ET1=1;
- TR0=1;//啟動定時器
- TR1=1;
- while(1)
- { //openLight();
- showNumber();
- }
- }
- void ET_T0() interrupt 1
- {
- TH0=15535/256;
- TL0=15535%256;
- m++;
- openLight();
- }
- void ET_T1() interrupt 3
- {
- TH1=15535/256;
- TL1=15535%256;
- n++;
- switch(index1)
- {
- case 0:
- if(n==time1[index1])
- {
- number=(number-1)%6;
- n=0;
- }
- break;
- case 1:
- if(n==time1[index1])
- {
- index1=0;
- n=0;
- }
- break;
- }
- }
復制代碼
所有資料51hei提供下載:
交通燈改進版.zip
(24.56 KB, 下載次數: 14)
2019-1-30 20:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|