历史上的今天
今天是:2024年11月04日(星期一)
2020年11月04日 | 51单片机控制模拟交通信号灯
2020-11-04 来源:51hei
采用单片机的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; //从中断回复,仍显示设置过的数值
sec_dx=set_timedx; //显示设置过的时间
TR1=0; //关定时器1
if(set==0) //时间倒时到0时
{
P2=0X00; //灭显示
Green_dx=1; //东西绿灯亮
Red_nb=1; //南北红灯亮
sec_nb=sec_dx+5; //回到初值
}
else
{
P2=0x00; //南北绿灯,东西红灯
Green_nb=1;
Red_dx=1;
sec_dx=sec_nb+5;
}
}
}
}
上一篇:风速风向传感器在单片机上的应用
史海拾趣
|
持续了六年的数字电视地面传输标准之争终于尘埃落定。曾经水火不相容的清华、上交大、广科院三个标准方案最终将以集合各自特色技术的“融合标准”方案面世。但是,这并不意味着三方都能成为最终标准的获益者,因为标准必须经历一年试用期,届 ...… 查看全部问答> |
|
rotel DXP2004教程(原理图,PCB)下载 [ 本帖最后由 shuijian 于 2008-10-21 17:23 编辑 ]… 查看全部问答> |
|
File--> New (Ctrl+N):新建原理图文件 Open (Ctrl+O):打开已有一个原理图文件 Close (Ctrl+F4):关闭已打开的某一个原理图 & ...… 查看全部问答> |
|
可编程霓虹灯图形动态广告控制器的设计 摘要 本文结合国内外霓虹灯控制技术的发展状况设计了一种采用美国ATMEL公司生产的AVR系列单片机中的ATmega8作控制芯片的霓虹灯控制器.通过ATmega8芯片控制驱动电路,在由驱动电路驱动继电器,而继电器则作 ...… 查看全部问答> |
|
用热电偶测温,经单片机pid调节,触发固态继电器实现线性升温 但当电网电压变化时,升温曲线不稳定,很不线性 原因到底出在哪里呢,高次谐波?继电器?pid参数?还是其它因素,希望大家各抒己见,十分希望能得到各位的帮助,谢谢!… 查看全部问答> |
|
我发过两篇了..但是一直都没人解答 我自己这样写了一段 你们给看看对吗 DSP有4个字节一个一个的往SPI上发送.然后与SPI上已计算出的一个字节进行比较 unsigned Rev_data(unsigned flag_msb)//这是一个接收返回函数,有关硬件的 { } ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:47 编辑 http://www.nuedc.com.cn/news.asp?bid=5&sid=20&id=631 … 查看全部问答> |
|
STM32F103Z的AD采样寄存器为什么没有符号位!如何测量负电压! STM32的内部AD,是12位的,板子上是有个电位器,是从0伏到3.28V。 采样的电压值是 0x0000-0x0fff 但是有个问题,怎么内部的AD采样值没有符号位呢,那怎么去测量负电压!… 查看全部问答> |
|
【玩转ADuCM360】带个LCD --- VG-240-R01LCM(VG5188) 这个LCD型号是VG-240-R01LCM(VG5188),驱动芯片是R61503B 网上关于这个芯片的初始代码很少,昨天搞了一下,没有反应。今天继续! … 查看全部问答> |




