找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6839|回复: 1
打印 上一主题 下一主题
收起左侧

基础80c51单片机交通信号灯控制程序与Proteus仿真+设计文档

[复制链接]
跳转到指定楼层
楼主
单片机代码如下,按键1按下触发中断,相当于总开关,可以控制南北信号灯,此外可以用串口发送16进制数据,控制信号灯时间(只做了南北方向的,东西方向需要另做一个res接受位)

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


目录
一、选题一理论部分              2
1.1 课题的要求与内容              2
1.1.1 课题内容: 十字路口交通灯系统设计              2
1.1.2 课题要求:              2
1.2  系统的方案设计              2
1.2.1 系统方案:              2
1.2.2系统的构成:              2
1.3系统的硬件设计              2
1.3.1 系统硬件的设计步骤              2
1.3.2 系统硬件电路连接效果              3
1.4  系统的软件设计              4
1.4.1 系统的软件设计步骤              4
二、选题一实践部分              4
2.1 系统的硬件原理与说明              4
2.1.1 系统的硬件仿真效果图              4
2.1.2 仿真图说明:              5
2.2系统硬件调试的过程中出现的问题以及解决的措施              5
2.3系统软件调试的过程中出现的问题以及解决的措施              6

一、(选题一)理论部分
1.1 课题的要求与内容
1.1.1 课题内容 十字路口交通灯系统设计
为了减少交通事故,确保交通顺畅,十字路口必须安置信号灯,以一定的时间间隔轮流点亮和熄灭。系统要求利用单片机的定时器定时功能,令十字路口的红黄绿灯交替点亮和熄灭,并且用LED数码管显示时间。
1.1.2 课题要求
(1)开机或复位后,信号灯全灭,南北和东西各有两组信号灯,分别是直行和左转弯,LED数码管显示2位:显示秒。南北方向直行绿灯时间为20s,左转绿灯时间为17s;东西方向直行绿灯时间为27s,左转方向为22s。黄灯时间为3s。
(2)发挥部分
a.系统存储两套十字路口配时方案,可以通过按键来进行选择;
b.利用串口调试助手或编写上位机软件,通过上位机来人工设定十字路口配时方案。
1.2  系统的方案设计
1.2.1 系统方案:
本次课程设计所采用的方案是用单片机控制十字路口交通灯。单片机具有结构简单、编程方便、经济、易于连接等优点,特别是其内部定时器计数器、中断系统资源丰富可对交通灯进行精确的控制,有应用价值,可扩展功能多,灵活性比较强
1.2.2系统的构成:
整个系统的构成以80C51单片机为核心,由I/O口扩展,LED数码管显示,紧急情况中断电路还有复位电路等组成。
单片机作为整个硬件系统的核心,它既是协调整工作系统的控制器,又是数据处理器。它由单片机、时钟电路、复位电路等组成。行车方向指示采用LED发光二极管,可有红、绿两种颜色指示放行与禁止,黄灯作为红绿转换的提示,形象直观。
本系统为交通信号灯设计了两种不同的配时方案,可以根据道路实时交通量的大小选择最佳配时方案。同时本系统还配有串口调试助手,可以通过串口发送数据从而达到改变配时时间的效果。
1.3系统的硬件设计
本系统的硬件主要由以下几部分组成:80C51单片机、电阻、LED数码管、LED发光二极管、电容、电解电容、晶体振荡器、开关、标准RS232端口。电路图是在Proteus中来连接完成的。
1.3.1 系统硬件的设计步骤

                  
                      图1    系统硬件设计流程图

1.3.2 系统硬件电路连接效果

                   图2   硬件电路连接效果图


1.4  系统的软件设计
本系统的软件设计部分全部在Keil uvision4中完成,采用的编程语言为Keil C51.
1.4.1 系统的软件设计步骤


                      图3  系统软件设计流程图

二、(选题一)实践部分
2.1 系统的硬件原理与说明
   2.1.1 系统的硬件仿真效果

         
                图4   硬件仿真效果图


2.1.2 仿真图说明:
当开关1按下时,交通信号灯首先执行第一套配时方案,首先,南北方向的直行是绿灯,东西方向的直行和左转均为红灯,待南北方向的直行时间变为0时,黄灯闪烁3秒,然后南北方向的左转变为绿灯,东西方向的直行和左转仍然全部为红灯;待南北方向的左转时间变为0时,黄灯仍然闪烁3秒,然后东西方向的直行变为绿灯,以此类推,信号灯亮的顺序和南北方向一致。配时方案2中信号灯亮的顺序和配时方案一的顺序一致,只是亮的时间不同。
本系统在设计的过程中还使用了串口调试助手,修改的是南北方向直行的时间的个位上的数值。
2.2系统硬件调试的过程中出现的问题以及解决的措施
问题:
信号灯点亮的顺序不对。
串口不能正常使用。
措施:
重新计算信号灯的字模。
重新连接串口。
2.3系统软件调试的过程中出现的问题以及解决的措施
问题:
接收不到串口发来的数据。
措施:
给定义的变量赋初值。

三、(选题一)结束语
通过本次课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在51单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是C语言)的掌握方面都能向前迈了坚实的一步。
首先,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,在资料中查看与自己的设计相似的只是,在此基础上完善直至符合设计要求。
其次,在这次课程设计中,我们运用到了以前所学的专业知识,如:C语言、proteus制图。编写的程序与仿真电路图配合使用,发现问题,解决问题,在解决问题的过程中,我受益颇多。
最后,要做好一个课程设计,就必须要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,一次性就将整个程序设计好的概率很小,反复修改、不断改进是程序设计的必经之路,一个完美的代码通常是要修改很多次的;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一目了然地明白设计者的思路,这样也为资料的保存和交流提供了方便;在设计过程中应该将每次遇到的问题记录下来,并分析清楚,从中学到的知识也会让我受益终身。


单片机源码:
#include<reg51.h>
sbit LED1=P1^0;
sbit LED2=P1^1;
unsigned char code DIG_CODE[10]={0x6f/*9*/,0x7f/*8*/,0x07/*7*/,0x7d/*6*/,0x6d/*5*/,0x66/*4*/,0x4f/*3*/,0x5b/*2*/,0x06/*1*/,0x3f/*0*/};

unsigned int time;              
unsigned int LedNumVal[2];     
unsigned int button;
static unsigned char rec;
static unsigned char recs;
static unsigned char recg;

void Delay (unsigned int a )
{  
   unsigned char i=1;
   unsigned int time=0;
   if(time==a)
      {i++;
   }
}
void Display_show( int a , int b )  
{  
    int i=1;
    int j;
    int k;
    LedNumVal[0] = (9 - b) * 1000;
    LedNumVal[1] = (9 - a) * 1000;
     while(i==1)
    {   
       LED2=0;
       P0=DIG_CODE[LedNumVal[0] / 1000];   
       Delay(5);
        if(LedNumVal[0] > 10000)            //
  {
   LedNumVal[1] = LedNumVal[1] + 1000;   //
   LedNumVal[0] = 0;           //b=9
  }
        j = 10;      
  while(j--);
  P0 = 0x00;
  LED2 = 1;
        LED1=0;
        P0=DIG_CODE[LedNumVal[1] / 1000];
        Delay(5);
        if(LedNumVal[1] == 9000)   //
     {
   if(LedNumVal[0] > 9500)    //
   {
    i++;        //??b<0
   }
  }     
        k = 10;    //
  while(k--);
  P0 = 0x00;//
  LED1 = 1;
       }
}

void main(void)
{
    TMOD = 0x21;     //
    TH0 = 0xFE;   //
    TL0 = 0x0C ;   //
TH1=TL1=0xf4;    //
TR1=1;       /
ES=1;            //
PS=1;           //
PT0=0;          /
PCON=0;         //
SCON=0x50;     
    IT0=1;         //      
    EA = 1;        //        
    ET0=1;        //?
    TR0= 1;        /  
EX0=1;        /
    EX1=1;
rec=0;  //receive初值
while(1)
{   
        if(button==1)
  {
     if((button==1)&&(rec==0)) P2=0X7E; Display_show(1,2); //南北方向12s
     if((button==1)&&(rec!=0)) P2=0x7e; Display_show(recs,recg);
  P2=0X7D;
  Display_show(0,3);
       //??????3s
  P2=0X7B;
  Display_show(0,7);
       //7s
  P2=0X7D;
  Display_show(0,3);
       //3s
  P2=0XE7;
  Display_show(0,7);
       //7s
  P2=0XD7;
  Display_show(0,3);
       //3s
  P2=0XB7;
  Display_show(0,7);
       //7s
  P2=0XD7;;
  Display_show(0,3);
            //3s
  }

  if(button==2)
  {

        P2=0X7E;  
  Display_show(2,8);
       //28s
  P2=0X7D;
  Display_show(0,3);
       //3s
  P2=0X7B;
  Display_show(1,2);
       //12s
  P2=0X7D;
  Display_show(0,3);
       //3s
  P2=0XE7;
  Display_show(2,3);
       //23s
  P2=0XD7;
  Display_show(0,3);
       //3s
  P2=0XB7;
  Display_show(1,0);
       //10s
  P2=0XD7;;
  Display_show(0,3);
             //3s
  }

}   
}
void T0zd(void) interrupt 1         //T0 (1ms)     
{
  TH0 = 0xFE;
  TL0 = 0x0C ;
   LedNumVal[0]++;
  time++;  
}
void  int0(void) interrupt 0  using 0
{
      EX0=0;
      button = 1;
      EX0=1;
}
void  int1(void) interrupt 2  using 0
{
      EX1=0;
      button = 2;
      EX1=1;
}
void receiver() interrupt 4
{
   if(RI==1)
    {
      RI=0;
      rec=SBUF;  
      SBUF=rec;
      while(TI==0);
       TI=0;         
       recg=rec%16; //个位
    recs=rec/16*10;  //十位
    }
}



全部资料51hei下载地址:
交通信号灯.zip (8.04 MB, 下载次数: 113)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:104982 发表于 2019-3-6 17:21 | 只看该作者
非常完整的设计,楼主辛苦了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表