|
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- #include<reg52.h>
- //unsigned char digtub[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- unsigned char digtub[]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
- 0x90};
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit lred=P2^0;//東西方紅燈
- sbit lgreen=P2^1;//東西方綠燈
- sbit lyellow=P2^7;//東西方黃燈
- sbit rred=P2^5; //南北方紅燈
- sbit rgreen=P3^0;//南北方綠燈
- sbit ryellow=P2^6;
- sbit L1=P3^4;
- sbit L2=P3^5;
- typedef unsigned int u16;
- typedef unsigned char u8;
- u8 dat[4];
- void show();
- void delay(u16 ms)
- {
- u16 j;
- for(ms;ms>0;ms--)
- for(j=0;j<120;j++);
- }
- void timer_init()
- {
- TMOD|=0X01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0=1;
- ET0=1;
- EA=1;
- }
- void interr() interrupt 1
- {
- static u16 num=0;
- static u16 i=31,a;
- static u16 k=56,j;
- static u16 q=26,b,l;
- static u16 p=0;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- num++;
- if(num==20)
- {
- num=0;
- i--;
- k--;
- q--;
- if(j==2&&i==0){i=5;j=3;}
- if(j==3&&i==0){i=30;k=55;a=0;b=0;j=0;}
- if(i>=5&&!a)lred=0;
- else{lred=1;}
- if(i<5&&i>=0&&j==3){a=1;lyellow=~lyellow;lgreen=1;}
- if(i<5&&i>=0&&!b){a=1;lyellow=~lyellow;lgreen=1;}
- if(i<=0){i=k;lyellow=1;b=1;lgreen=0;a=1;j=2;}
-
- if(q==0&&!l){q=5;l=1;}
- if(q<=0&&l==3){q=25;l=0;}
- if(q==0&&l==1){q=30;l=3;}
-
- if(q>0&&!l){rgreen=0; rred=1;ryellow=1;}
- if(q<=5&&q>0&&l==1){ryellow=~ryellow;rgreen=1;}
- if(q>5&&l==3){rred=0;ryellow=1;}
- if(q<=5&&q>0&&l==3){ryellow=~ryellow;rred=1;}
-
- dat[0]=digtub[i/10];
- dat[1]=digtub[i%10];
- dat[2]=digtub[q/10];
- dat[3]=digtub[q% 10];
-
- }
- }
- void main()
- { u8 g;
- timer_init();
- while(1)
- {
- show();
- delay(20);
- for(g=0;g<2;g++)
- {
- P1=0XFF;
- switch(g)
- {
- case 0:L1=1;L2=0;
- P1=dat[2];delay(10); break;
- case 1: L1=0;L2=1;
- P1=dat[3];
- delay(10); break;
- default:break;
- }
- }
- }
- }
- void show()
- {
- u16 i;
- for(i=0;i<2;i++)
- {
- /*1278為東西方向數(shù)碼管,3456為南北方向數(shù)碼管*/
- switch(i)
- { P0=0XFF;
- case 1:LSA=0;LSB=0;LSC=0;P0=dat[0];delay(10);break; //1
- case 0:LSA=1;LSB=0;LSC=0;P0=dat[1];delay(10);P1=0XFF;break; //2
-
- //case 2:LSA=1;LSB=1;LSC=1;P1=dat[1];delay(10); break; //8
- //case 3:LSA=0;LSB=1;LSC=1;P1=dat[0];delay(10);break; //7
- // case 0:LSA=0;LSB=0;LSC=1;P1=dat[0];delay(10);break; //5
- //case 1:LSA=1;LSB=0;LSC=1;P1=dat[1];delay(10); break; //6
- // case 7:LSA=1;LSB=1;LSC=0;P1=dat[0];delay(10); break; //4
- //case 8:LSA=0;LSB=1;LSC=0;P1=dat[1];delay(10);break;//3
- default:break;
- }
- }
- }
復(fù)制代碼
Keil代碼與Proteus仿真下載:
紅綠黃智能交通燈.7z
(78.19 KB, 下載次數(shù): 90)
2022-12-1 16:35 上傳
點(diǎn)擊文件名下載附件
|
|