一、设计介绍
模块说明:
- 1、STC89C52:主控芯片 单片机
- 2、2位0.36英寸共阳数码管:数码管显示时间
- 3、74HC238N译码器:扩展IO口, 此项目用于选择锁存器
- 4、SN74HC573N 锁存器:扩展IO口,将设置的IO口数据进行固定
- 5、独立按键:设置以及控制系统
功能介绍:
- 1、行人的绿灯通行时间为车辆通行绿灯时间+黄灯警示时间,红灯也随车辆的排队时间进行累加
- 2、该系统可以人为开启、暂停,且可以自由调节路口倒计时,以适应不同场合的需求
- 3、黄灯为5秒不可修改,绿灯时间可进行按键修改,绿灯时间修改后,下一次红绿灯切换修改生效。并且在修改后,其余红灯时间均根据修改量进行增减。
- 4、该系统可进入紧急模式,人形横道与车辆红绿灯均为红色;可进入全通行模式,人形横道全为绿色,车辆红绿灯为黄色
原理图:
使用立创EDA格式打开,打开方式为将文件夹内 .json 后缀文件拖入嘉立创EDA(标准版) - 免费、易用、强大的在线电路设计软件 立创EDA编辑网站中即可
本次原理图使用立创EDA画出的,对于新手较为方便,全中文易上手,不需要安装任何软件。另,Altium Designer 格式打开后标注会有所丢失,建议使用立创EDA
Proteus仿真图:
实物图:
元器件清单:
如果您不能独自完成焊接,我这边也提供付费焊接服务以及调试,完成后第一时间通过快递寄给您。
二、代码资料展示
主要代码展示:
/********************* 变量定义 *******************/
uchar menu = 0;
uint Time0_Cnt;//定时器计时计数作用变量
//0~9的十六进制数码 16 为全灭
uchar code num[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71,0x00,0x40
}; // 0~9
uchar Tube_Str[8] = {1,2,3,4,5,6,7,8};//存储每个路口显示的内容
Led_Time Traffic_North = {15,15,STATUS_LED_G};
Led_Time Traffic_East = {15,15,STATUS_LED_R};
Led_Time Traffic_South = {30,15,STATUS_LED_R};
Led_Time Traffic_West = {45,15,STATUS_LED_R};
uchar dis_cnt = 0;//定时器 动态扫描计数
uint Temp;//PO口数据暂存变量
bit Flag_WalkLed = 1;//刷新人行横道数据的标志位
bit Flag_TrafficAlarm;//紧急情况标志位
bit Flag_TrafficYellow;//黄灯情况标志位
bit Flag_Start = 1;//红绿灯暂停开启标志位 1--开启 0--暂停
/********************* 函数声明 *******************/
//获取数据
void Get_Dat();
//按键扫描
void Key_Scan();
//定时器0初始化
void timer0_init();
//74HC238 译码器驱动函数
void Proc_74HC238(uchar InputCnt);
void display(uchar Select_Cnt); //显示函数
void Select_Dig(uchar Cnt);//段选函数
void Select_Seg(uchar Cnt);//位选函数
void Count_Display();//数码管显示数据赋值
void WalkLedProc();//人行横道红绿灯处理
void main()
{
uchar j = 0;
DelayMs(100);//等待系统稳定
timer0_init();//定时器0初始化
while (1)
{
Key_Scan();//按键扫描处理函数
Count_Display();//数码管显示数据赋值
WalkLedProc();//人行横道红绿灯处理
}
}
//人行横道红绿灯处理
void WalkLedProc()
{
//如果北向车道不是红灯
if (Traffic_North.Status_led != STATUS_LED_R)
{
WalkLed_East = 0;//东路口人行横道为绿灯
WalkLed_North = WalkLed_South = WalkLed_West = 1;//其余为绿灯
}
//如果东向车道不是红灯
else if (Traffic_East.Status_led != STATUS_LED_R)
{
WalkLed_South = 0;//南路口人行横道为绿灯
WalkLed_North = WalkLed_East = WalkLed_West = 1;//其余为绿灯
}
//如果南向车道不是红灯
else if (Traffic_North.Status_led != STATUS_LED_R)
{
WalkLed_West = 0;//西路口人行横道为绿灯
WalkLed_North = WalkLed_East = WalkLed_West = 1;//其余为绿灯
}
//如果西向车道不是红灯
else if (Traffic_West.Status_led != STATUS_LED_R)
{
WalkLed_North = 0;//北路口人行横道为绿灯
WalkLed_East = WalkLed_South = WalkLed_West = 1;//其余为绿灯
}
}
工程管理展示:
下载内容展示:
更多详细功能与代码视频讲解请B站搜索:易佳电子设计 主页搜索该设计编号或名称
视频链接:【51毕业设计案例】【026】红绿灯(交通灯)系统设计带人行横道-基于51/52单片机_哔哩哔哩_bilibili