×
单片机 > 单片机程序设计 > 详情

51单片机控制模拟交通信号灯

发布时间:2024-05-02 发布时间:
|

采用单片机的I/O口PO口通过上拉电阻和交通灯相连接,P3.0、P3.1口接到数码管控制位上,控制数码管的显示,程序放在STC89C52RC单片机的ROM中,在十字路口的四组红、黄、绿交通灯中,由单片机的 P1.0-P1.2 、P1.5-P1.7、P2.0-P2.2、P2.5-P2.7控制,由于交通灯为发光二极管且阳极通过限流电阻和电源正极相连,因此I/0口输出低电平时,与之相连的指示灯会亮,并通过数码管显示时间倒计时。I/0口输出高电平时,相应指示灯会灭。当交通出现障碍需要恢复到初始状态时,按下复位键即可,此键由单片机的9脚RST键控制。

制作出来的实物图如下:


Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)

主函数:
//主程序
void main()
{
TMOD=0X11; //定时器设置
TH1=0X3C;
TL1=0XB0;
TH0=0X3C; //定时器0置初值 0.05S
TL0=0XB0;
EA=1; //开总中断
ET0=1; //定时器0中断开启
ET1=1; //定时器1中断开启
TR0=1; //启动定时0
TR1=0; //关闭定时1
EX0=1; //开外部中断0
EX1=1; //开外部中断1

P1=0X21; // 开始默认状态,东西绿灯,南北黄灯
sec_nb=sec_dx+5; //默认南北通行时间比东西多5秒
while(1) //主循环
{
key(); //调用按键扫描程序
display(); //调用显示程序
}
}
//函数的定义部分
void key(void) //按键扫描子程序
{

if(k1!=1) //当K1(禁止)键按下时
{
display(); //调用显示,用于延时消抖
if(k1!=1) //如果确定按下
{
TR0=0; //关定时器
P1=0X00;
Red_dx=1;
Red_nb=1; //全部置红灯
TR1=0;
sec_dx=00; //四个方向的时间都为00
sec_nb=00;
do
{
display(); //调用显示,用于延时
}
while(k1!=1); //等待按键释放
}
}
if(k2!=1) //当K2(确认)键按下时
{
display(); //调用显示,用于延时消抖
if(k2!=1) //如果确定按下
{
TR0=1; //启动定时器0
sec_nb=set_timenb;

[1] [2]
51单片机控制模拟交通信号灯IO口

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计