簡易交通燈設計仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機交通燈的C程序源代碼:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code smg_dw[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽0-9
- sbit beiR=P3^0;//北邊
- sbit beiY=P3^1;
- sbit beiG=P3^2;
- sbit nanR=P3^3;//南
- sbit nanY=P3^4;
- sbit nanG=P3^5;
- uint a=10,b,c,type=1,j,i;
- void Delay(uint x) //延時mn
- {
- uchar i;
- while(x--)
- for(i=0;i<120;i++);
- }
- void delay_ms(uint q) //延時
- {
- uint i,j;
- for(i=q;i>0;i--)
- for(j=141;j>0;j--);
- }
- void shumaguan(uint k ) //數碼管顯示
- {
- b=k/10;
- c=k%10;
- P0=smg_dw[b];//選段碼
- delay_ms(20);//延時5ms
- P2=smg_dw[c];//選段碼
- delay_ms(20);//延時5ms
-
- }
- main()
- {
- TMOD=0x01; //設置定時器T0為工作方式1定時
- TH0=(65536-30000)/256;
- TL0=(65536-30000)%256;
- TR0=1; //啟動T0計數
- ET0=1; //允許T0中斷
- EX0=1; //允許外部中斷0中斷
- EA=1; //開中斷
- IT0=1; //允許外部中斷0為邊沿觸發方式
- //倒計時10s
- while(1)
- {
- switch(type)
- {
- case 1: //東西向綠燈與南北向紅燈亮
- beiR=0;beiY=1;beiG=1;
- nanR=1;nanY=1;nanG=0;
- shumaguan(a);
- break;
- case 2: //東西向黃燈閃爍,綠燈關閉
- if(a%2!=0)
- {
- nanR=1;nanY=0;nanG=1;
- }
- if(a%2==0)
- {
- nanR=1;nanY=1;nanG=1;
- }
- shumaguan(a);
- break;
- case 3: //東西向紅燈,南北向綠燈亮
- beiR=1;beiY=1;beiG=0;
- nanR=0;nanY=1;nanG=1;
- shumaguan(a);
- break;
- case 4: //南北向黃燈閃爍3次
- if(a%2!=0)
- {
- beiR=1;beiY=0;beiG=1;
- }
- if(a%2==0)
- {
- beiR=1;beiY=1;beiG=1;
- }
- shumaguan(a);
- break;
- }
- }
- }
- void T0_int0(void) interrupt 1 //中斷
- {
- TH0=(65536-30000)/256;
- TL0=(65536-30000)%256;
- i++;
- if(i==20)
- {
- i=0;
- a--;
- if(a==0)
- {
- type++;
- if(type>4)
- {
- type=1;
- }
- if(type==1)
- {
- a=10;
- }
- if(type==2)
- {
- a=5;
- }
- if(type==3)
- {
- a=10;
- }
- if(type==4)
- {
- a=5;
- }
- }
- }
-
- }
復制代碼
全部資料51hei下載地址:
簡易交通燈設計 仿真.rar
(33.76 KB, 下載次數: 53)
2018-1-9 11:45 上傳
點擊文件名下載附件
|