单片机课设-基于51单片机的交通灯显示系统(紧急制动按钮)(特殊情况)(实时提醒绿灯亮的剩余时间)(左转右转)

单片机课设系列文章-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 实现计划

单片机课设-基于51单片机的交通灯显示系统(紧急制动按钮)(特殊情况)(实时提醒绿灯亮的剩余时间)(左转右转)_第1张图片

四、硬件仿真及整体讲解

4.1 仿真整体概览

单片机课设-基于51单片机的交通灯显示系统(紧急制动按钮)(特殊情况)(实时提醒绿灯亮的剩余时间)(左转右转)_第2张图片

4.2 中断按键系统实现

单片机课设-基于51单片机的交通灯显示系统(紧急制动按钮)(特殊情况)(实时提醒绿灯亮的剩余时间)(左转右转)_第3张图片

  中断按键系统用到了外部中断1和外部中断0两个中断,当按下第一个到第5个按键的时候,会进入中断响应函数,开始扫描是哪个按键被按下之后进行相应操作。

4.3 LED显示

单片机课设-基于51单片机的交通灯显示系统(紧急制动按钮)(特殊情况)(实时提醒绿灯亮的剩余时间)(左转右转)_第4张图片

  单片机通过P0口扩展8255芯片,其中8255的PA口控制路人16个LED灯及左转方向4个LED灯;单片机P1口控制主干道9个LED灯。因此I/O口输出低电平时,与之相连的发光二极管会亮,I/O口输出高电平是,相应的发光二极管会灭。

4.4 数码管显示

单片机课设-基于51单片机的交通灯显示系统(紧急制动按钮)(特殊情况)(实时提醒绿灯亮的剩余时间)(左转右转)_第5张图片

  四个路口倒计时显示被置在同一时刻显示相同的数字,四个数码管都由8255芯片的PC口控制,东西南北四个方向共四个路口。考虑到AT89C52单片机所能提供I/O接口的数量以及该控制系统所需要的I/O的个数并结合我们的实际能力,数码管在本系统采用的是静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的数码管恒定地导通或截止。采用静态显示时。占用CPU的资源较少,单片机只要把要显示的字符代码发送到接口电路即可,直到要显示新的数据时,再发送新的字形码。

此处略去6点.............................

五、部分重要代码展示

//主函数
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;
}

点击下面链接进入资源下载

基于单片机的交通灯显示系统(紧急制动按钮)(特殊情况)(实时提醒绿灯亮的剩余时间)(左转右转)


⚠️关于使用仿真时的注意事项

  1. 为什么我的Proteus 7.6打不开这个仿真源文件?
    因为我们这一级大部分仿真都使用的是Proteus 8.6,伦志新老师使用的是Proteus 7,会有不兼容的现象;
  2. 不兼容,我是应该照着这个自己画一份还是安装Proteus 8.6?
    自己画一份需要一个小时,另安装8.6大约只需十分钟,自己权衡利弊;
  3. 去哪里下载Proteus 8.6?
    下载链接:安装Proteus8.6

能力有限,欢迎指正!

你可能感兴趣的:(单片机课设,单片机,stm32,嵌入式硬件)