LED交通燈控制(可使用8255接口芯片) (1)使用匯編語言或C語言編程。功能為:通過開關實現LED燈工作方式即時控制,完成LED交通燈自動循環顯示功能。 (2)在完成交通燈基本功能基礎上,當有急救車到達時,兩向交通信號為全紅,以便讓急救車通過。假定急救車通過路口時間為10秒,急救車通過后,交通燈恢復中斷前狀態。本實驗題以按鍵為中斷申請,表示有急救車通過。 在Proteus中進行仿真
源代碼如下:- #include<reg52.h>
- #include "Intrins.h"
- #define uchar unsigned char
- uchar n=0;
- uchar s=0;
- sbit shi=P3^0;
- sbit ge=P3^1;
- uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- void delay(uchar k) //1ms
- {
- uchar i;
- while(k--)
- {
- for(i=0;i<115;i++);
- }
- }
- void display(uchar num)
- {
- shi=1;
- P2=tab[num/10];
- delay(10);
- shi=0;
- ge=1;
- P2=tab[num%10];
- delay(10);
- ge=0;
- }
- void main()
- {
- EA=1;
- IT0 = 1;
- EX0 = 1;
- ET0=1;
- TMOD=0x01;
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- TR0=1; //
- while(1)
- {
- if(s<30)
- {
- if(s<25)
- {
- display(25-s);
- P1=0xee;
- P0=0xbb;
- }
- else
- {
- display(30-s);
- P1=0xee;
- P0=0xdd;
- }
- }
- else if(s<55)
- {
- display(55-s);
- P1=0xbb;
- P0=0xee;
- }
- else
- {
- display(60-s);
- P1=0xdd;
- P0=0xee;
- }
- }
- }
- void time() interrupt 1
- {
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- ++n;
- if(n==100)
- {
- n=0;
- ++s;
- if(s==60)
- s=0;
- }
- }
- void int0_isr() interrupt 0
- {
- uchar i;
- for(i=0;i<50;i++)
- {
- P1 = 0xee;
- P0 = 0xee;
- shi=0;
- ge=0;
- delay(1000);
- }
- }
復制代碼
|