单片机交通灯仿真图如下(proteus仿真工程文件可到本帖附件中下载)
原理图:
单片机源程序如下:
- #include "reg51.h"
- unsigned char t0,t1;//定义全局变量,用来保存延时时间的循环次数
- unsigned char i,j,k,l,m;
- void delay0_10s1()
- {
- for(t0=0;t0<20;t0++)//采用全局变量作为循环控制变量
- {
- TH1=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
- TL1=(65536-46080)%256;//46080的来历,为50000*11.0592/12
- TR1 = 1;//启动T1
- while(!TF1);//查出计数是否溢出,即50ms定时时间一到,TF1 = 1
- TF1 = 0;
- }
- }
- void delay_t1 (unsigned char t)
- {
- for (t1 = 0;t1<t; t1++)
- delay0_10s1();
- }
- void int_0() interrupt 0//紧急情况中断
- {
- unsigned char i,j,k,l,m;
- i = P1;
- j = t0;
- k = t1;
- l = TH1;
- m = TL1;
- P1 = 0xdb;
- delay_t1 (20);
- P1 = i;
- t0 = j;
- t1 = k;
- TH1 = l;
- TL1= m;
- }
- void main() //主函数
- {
- //unsigned char k;
- TMOD = 0x10;//T1设置为工作方式1
- EA = 1; //开总中断允许位
- EX0 = 1; //开外部中断0允许位
- IT0 = 1; //设置外部中断0为下降沿触发
- while(1)
- {
- P1 = 0xde; //A红灯,B绿灯,延时10秒
- delay_t1(20);
- P1 = 0xdd; //A红灯,B黄灯,延时3秒
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
仿真:
交通灯系统控制电路.rar
(93.93 KB, 下载次数: 15)
程序:
交通信号灯.rar
(22.8 KB, 下载次数: 25)
|