单片机课设系列文章-3-C51交通灯显示系统
文章目录
一、设计题目、内容及要求
二、所用软件以及版本
❤️三、系统设计方案
3.1 设计思路
3.2 实现计划
四、硬件仿真及整体讲解
4.1 仿真整体概览
4.2 中断按键系统实现
4.3 LED显示
4.4 数码管显示
五、部分重要代码展示
点击下面链接进入资源下载
⚠️关于使用仿真时的注意事项
一、设计题目、内容及要求
题目:基于单片机的LED点阵广告牌设计
内容:
1、东西干道和南北干道的通行分左行、右行、直行,其中左行、右行固定15秒;直行固定30秒;
2、信号灯分绿灯(3种)、红灯、黄灯,每次绿灯换红灯时,黄灯亮3秒钟;
3、东西干道和南北干道交替控制,每次干道绿灯交替时,有3秒钟所有干道的交通灯都是黄灯闪烁3秒钟,提示已经进入路口的车辆迅速通过;
4、其他创新内容。
要求:
1、根据设计内容,设计系统硬件结构,画出系统流程图。
2、应用Keil、Proteus软件开发应用系统并仿真调试。
二、所用软件以及版本
仿真:Proteus 8.6 下载链接
编译器:Keil 5 Keil 5下载链接
⚠️提醒:Proteus 8.9能打开旧版Proteus 8的工程,但是不能打开Proteus 7的工程;Keil 4和Keil 5版本不互通
❤️ 三、系统设计方案
3.1 设计思路
交通灯控制器就是使用单片机来控制一些LED灯和数码管,模拟真实交通灯的功能。
本课设就是要用STC89C52RC单片机控制LED灯模拟指示。模拟东西南北方向的十字路口交通灯信号控制情况;用51单片机的定时中断来控制两个数码管以及数目显示;由于红绿灯对向的数码管相同,所以只需要控制两个数码管即可;利用按键来满足路人对于路口红绿灯的需求。
本模拟系统由单片机硬/软件系统,用Keil 5和Proteus 8.6软件来实现两位8段数码管和LED灯显示系统。
3.2 实现计划
四、硬件仿真及整体讲解
4.1 仿真整体概览
4.2 中断按键系统实现
中断按键系统用到了外部中断1和外部中断0两个中断,当按下第一个到第5个按键的时候,会进入中断响应函数,开始扫描是哪个按键被按下之后进行相应操作。
4.3 LED显示
单片机通过P0口扩展8255芯片,其中8255的PA口控制路人16个LED灯及左转方向4个LED灯;单片机P1口控制主干道9个LED灯。因此I/O口输出低电平时,与之相连的发光二极管会亮,I/O口输出高电平是,相应的发光二极管会灭。
4.4 数码管显示
四个路口倒计时显示被置在同一时刻显示相同的数字,四个数码管都由8255芯片的PC口控制,东西南北四个方向共四个路口。考虑到AT89C52单片机所能提供I/O接口的数量以及该控制系统所需要的I/O的个数并结合我们的实际能力,数码管在本系统采用的是静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的数码管恒定地导通或截止。采用静态显示时。占用CPU的资源较少,单片机只要把要显示的字符代码发送到接口电路即可,直到要显示新的数据时,再发送新的字形码。
五、部分重要代码展示
//主函数
void main()
{
uint num;
num=0;
aa=0;
COM =0x82; //PA口输出,PB口输入,PC口输出
TMOD=0x01; //定时器工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //开启总中断
ET0=1; //开启定时器中断
TR0=1; //开启定时器0
EX0=1; //外部中断0允许标志
IT0=0; //外部中断0电平触发
EX1=1; //外部中断1允许标志
IT1=0; //外部中断1电平触发
while(1){
..........//略去
dongxi();
dx_flash();
dongxizuo();
}
}
//定时器0中断
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==18)
{
aa=0;
flag=1;
}
}
void disp(uint n) //数码管显示函数
{
while(!flag)
{
ge=0;
PC=table[n%10];
//此处略去部分灯闪烁函数
....
....
delay(50);
shi=1;ge=1;
}
if(flag==1)
flag=0;
}
基于单片机的交通灯显示系统(紧急制动按钮)(特殊情况)(实时提醒绿灯亮的剩余时间)(左转右转)
能力有限,欢迎指正!