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);
- }
- }
复制代码
|