|
1.用單片機擴展一片8255,用4個交通燈模擬一個十字交叉路口的紅、綠、黃燈,并設置二個單方向行按鍵,和一個緊急按鍵;
2.正常行駛時,東西或南北方向的燈按綠燈亮27秒,黃燈閃爍3秒,紅燈亮30秒控制;
3.當兩個單方向通行按鍵某一個按下時,則南北(東西)方向一直是綠燈,東西(南北)方向一直是紅燈;或者緊急按鍵按下時,兩方向均為紅燈禁止通行,而只要有按鍵按下時8個數(shù)碼管均顯示8,且停止計時,按鍵松開后恢復到之前的狀態(tài)。 本設計選用的51單片機內部晶振為12MHz,12分頻所得時鐘周期為1μs,選用定時器0,選用方式1,T0定時最長時間約為65ms,選用T0產(chǎn)生50ms的定時,再通過計時20次產(chǎn)生1S標志。設定時初值為X,則有(65536-X)*1μs=50ms,得X=3CB0H, 即 TH0=3CH, TL0=B0H
jtd.png (186.65 KB, 下載次數(shù): 69)
下載附件
原理圖
2018-5-16 20:43 上傳
jtd2.png (17.45 KB, 下載次數(shù): 63)
下載附件
框圖
2018-5-16 20:47 上傳
源程序: - #include<reg51.h>
- #include<absacc.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define PA XBYTE[0x0000] //8255 A口地址
- #define PB XBYTE[0x0001] //8255 B口地址
- #define PC XBYTE[0x0002] //8255 C口地址
- #define PS XBYTE[0x0003] //8255 控制口地址
- sbit button1=P3^3; //K0 接外部中斷1,緊急車輛通過指示開關
- sbit button2=P1^0; //K1 支道狀態(tài)開關
- sbit button3=P1^1; //K2 主道狀態(tài)開關
- sbit button4=P3^2; //K3 接外部中斷0,調整紅綠時長
- sbit button5=P0^4;
- sbit wei1=P1^4;
- sbit wei2=P1^5;
- sbit wei3=P1^6;
- sbit wei4=P1^7;
- sbit wei5=P1^2;
- sbit wei6=P1^3;
- sbit wei7=P3^0;
- sbit wei8=P3^1;
- uint num0=0,num1=0;
- uint k;
- uchar dp1,dp2,dp3,dp4;
- uchar code table[]= //共陰七段碼
- {
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
- };
- void time0_int() //計時器初始化
- {
- TMOD=0x11; //設置定時器0位方式1
- TH0=0x3C; //定時50毫秒,初值為15536=3CB0
- TL0=0xB0;
- EA=1; //開全局中斷
- EX1=1; //開外部中斷1
- EX0=1;
- IT0=0;
- IT1=0; //中斷1為低電平觸發(fā)
- ET0=1; //開計時器0中斷
- TR0=1; //啟動計時器0
-
- }
- void delay(unsigned int z) //延時程序
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void ini() //兩路燈初始狀態(tài)
- {
- P3=0xff;
- P1=0xff;
- P2=0xff;
- PA=0x21;
- PB=0x0C;
- }
-
- void display0(uchar unit,uchar decade) //南北方向倒計時顯示
- {
- wei1=0; //顯示低位
- P2=table[unit];
- delay(2);
- wei1=1;
- wei2=0; //高位顯示
- P2=table[decade];
- delay(2);
- wei2=1;
- wei5=0;
- P2=table[unit];
- delay(2);
- wei5=1;
- wei6=0;
- P2=table[decade];
- delay(2);
- wei6=1;
- }
- void display1(uchar unit,uchar decade) //東西方向倒計時
- {
- wei3=0; //顯示低位
- P2=table[unit];
- delay(10);
- wei3=1;
- wei4=0; //顯示高位
- P2=table[decade];
- delay(10);
- wei4=1;
- wei7=0;
- P2=table[unit];
- delay(10);
- wei7=1;
- wei8=0;
- P2=table[decade];
- delay(10);
- wei8=1;
- }
- void main()
- {
- PS=0x80; //8255控制字寫入,A B C口均為輸出,均為方式0
- time0_int();
- ini();
- while(1)
- {
- while((button1!=0)&&(button2!=0)&&(button3!=0))
- {
- if((button1!=0)&&(button2!=0)&&(button3!=0)) //南北方向
- {
- if(num0>0&&num0<540)
- {
- PA=0x0C; //綠燈亮27秒
- dp1=(27-(num0-0)/20)%10;
- dp2=(27-(num0-0)/20)/10;
- display0(dp1,dp2); //倒計時顯示
- }
-
- if(num0>=540&&num0<600) //黃燈連續(xù)閃爍3秒
- {
- PA=0x12;
- delay(200);
- PA=0x00;
- dp1=(3-(num0-540)/20)%10;
- dp2=(3-(num0-540)/20)/10;
- display0(dp1,dp2); //倒計時顯示
- }
-
- if(num0>=600&&num0<1200) //紅燈亮30秒
- {
- PA=0x21;
- dp1=(30-(num0-600)/20)%10;
- dp2=(30-(num0-600)/20)/10;
- display0(dp1,dp2); //倒計時顯示
- }
- if(num0>=1200)num0=0;
- }
-
- if((button1!=0)&&(button2!=0)&&(button3!=0)) //東西方向
- {
- if(num1>0&&num1<600) //紅燈亮30秒
- {
- PB=0x0C;
- dp3=(30-num1/20)%10;
- dp4=(30-num1/20)/10;
- display1(dp3,dp4); //倒計時顯示
- }
- if(num1>=600&&num1<1140) //綠燈亮27秒
- {
- PB=0x21;
- dp3=(27-(num1-600)/20)%10;
- dp4=(27-(num1-600)/20)/10;
- display1(dp3,dp4); //倒計時顯示
- }
-
- if(num1>=1140&&num1<1200) //黃燈連續(xù)閃3秒
- {
- PB=0x12;
- delay(200);
- PB=0x00;
- dp3=3-(num1-1140)/20;
- dp4=0;
- display1(dp3,dp4); //倒計時顯示
- }
- if(num1>1200)num1=0;
- }
- }
- }
- }
- void time0() interrupt 1 //定時中斷響應
- {
- TH0=0x3C; //定時1ms初值
- TL0=0xB0;
- num0++;
- num1++;
- }
- void thing1() interrupt 0 //某一方向放行
- {
- display0(0,0);
- display1(0,0);
- while((button1!=0)&&(button2!=0)&&(button3==0)) //南北禁行,東西放行
- {
- PA=0x21;
- PB=0x21;
- dp1=8;
- dp2=8;
- display0(8,8);
- display1(8,8);
- }
-
- while((button1!=0)&&(button2==0)&&(button3!=0)) //南北放行,東西禁行
- {
- PA=0x0C;
- PB=0x0C;
- dp1=8;
- dp2=8;
- display0(8,8);
- display1(8,8);
- }
- }
- void thing2() interrupt 2 //外部中斷器1響應_緊急情況_兩道禁止通行
- {
- PA=0x21;
- PB=0x0C;
-
- display0(8,8);
- display1(8,8);
- }
復制代碼
|
-
-
交通燈模擬控制系統(tǒng).rar
2018-5-16 20:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
21.85 KB, 下載次數(shù): 71, 下載積分: 黑幣 -5
評分
-
查看全部評分
|