找回密码
 立即注册

QQ登录

只需一步,快速开始

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

交通信号灯控制电路的设计 单片机课程设计报告 PPT文档下载

[复制链接]
跳转到指定楼层
楼主

全部资料下载(包含论文程序及单片机交通灯仿真文件,word ppt文档)
交通灯.rar (818 KB, 下载次数: 75)


课程设计报告

报 告 题 目 : 交通信号灯控制电路的设计        

作者所在系部:物理与电子科学学院

作者所在专业:电子信息与科学技术专业

作者所在班级: 电子三班

作 者 姓 名 :宋伟         201840620325     

张淼201840620342

吴刚201840620334

徐美炯201840620336      

完 成 时 间 :2010 12 19



课程设计任务书
课题名称
交通信号灯控制电路的设计
完成时间

指导教师

职称

学生姓名
宋伟、张淼、吴刚、徐美炯
班 级
电子三班
总体设计要求和技术要点
设计一个交通信号灯控制电路。要求:
1.产生以1秒为单位的计时;
2.显示通行时间和缓行时间;
3.控制显示时间和缓行时间,使之能加减。
工作内容及时间进度安排
第15周:
1立题论证方案设计、熟悉软件
2检查设计结果,预答辩
第16周:
1 仿真实验
2 验收答辩
3完成设计报告ppt word文档等
课程设计成果
1.与设计内容对应的软件程序
2.课程设计报告书


内     容     摘      要

随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。为此,通过我应用所学的知识设计了一套交通灯控制电路的方案。交通灯的控制系统主要由计时电路、主控电路、中断电路、显示电路组成。

目           录

一、 概    述  ……… ……………………………………………………………3
二、方案设计
1、单片机AT89C52……………………………………………………………..3
2、数码管显示原理……………………………………………………………4~5
三、单元电路设计与源程序………………………………………………………5~11
四、总电路图及元器件清单
1.总电路图……………………………………………………………………12
2.元器件清单…………………………………………………………………12
五、使用说明参考…………………………………………………………………..12
六、结论……………………………………………………………………………..12
七、心得体会………………………………………………………………………..13
八、参考文献………………………………………………………………………..13
  • 概述
单片机完成交通信号灯的控制,该交通信号灯控制器由两条干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯。二、方案设计1.方案设计

根据设计的要求可知,系统的硬件原理框图如下图所示。


  系统硬件框图

1、单片机可选用AT89C52,它与8052系列单片机全兼容,但其内部带有8KB的FLASH ROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。键盘系统可以根据系统的需要设置不同的键的个数,可以选择线式键盘,若单片机的IO口不够用时,可以考虑扩展8255或8155满足系统的要求。

  2、数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。

2. 软件方案

根据设计要求,软件由C语言完成。软件设计可以分为以下几个功能模块:

主程序:初始化及键盘监控。

计时程序模块:为定时器的中断服务子程序,完成50毫秒的定时中断和1秒的定时时间。

显示程序模块:完成4个交通灯和6个LED数码管的显示驱动。

中断子程序:


程序流程图:


三、单元电路设计与源程序

1、主控电路

  控制电路由P3^3—P3^7控制,其中P3^3控制开/停按钮,P3^4、P3^5控制通行时间的加和减,P3^6、P3^7控制缓行时间的加和减;开/停的控制由标志位flag控制,且flag的初始值置为0。通行时间和缓行时间的控制由jianpan函数控制(具体见源程序中的键盘函数)。

2、显示电路

显示电路由单片机AT89C52的P1和P2两个并行I/O接口控制,其中P1口控制显示控制台的时间以及车辆的通行时间和缓行时间,P2口控制十字路交通灯;在控制显示时,使用xianshi函数控制控制台显示的显示时间,xianshi2函数控制显示车辆的通行时间和缓行时间。

3源程序

  1. #include
  2. #define uint unsigned  int
  3. #define uchar unsigned char
  4. #define n  5 //
  5. uchar qian,bai, shi,ge,aa;
  6. uchar flag=0,n1,n2,b,c,d; //标志位及变量
  7. sbit k0=P0^0;//数码管显示位定义
  8. sbit k1=P0^1;
  9. sbit k2=P0^2;
  10. sbit k3=P0^3;
  11. sbit k4=P0^4;
  12. sbit k5=P0^5;
  13. sbit k6=P0^6;
  14. sbit k7=P0^7;
  15. sbit kai=P3^3; //键盘控制位定义
  16. sbit jia1=P3^4;
  17. sbit jian1=P3^5;
  18. sbit jia2=P3^6;
  19. sbit jian2=P3^7;
  20. uchar code table[]={
  21. 0x3f,0x06,0x5b,0x4f,
  22. 0x66,0x6d,0x7d,0x07,
  23. 0x7f,0x6f,0x77,0x7c,
  24. 0x39,0x5e,0x79,0x71};//数码管显示代码
  25. void xianshi();        //十字路口数码管显示函数
  26. void xianshi2();//控制台数码管显示函数
  27. void jianpan();        //键盘检测函数
  28. void delay(uint z) //延时函数
  29. {        
  30.         uint i,j;
  31.         for(i=z;i>0;i--)
  32.         for(j=110;j>0;j--);
  33. }

  34. void init()        //定时器0初始化,变量初始化函数
  35. {        b=0;
  36.     c=0;
  37.         d=0;
  38.         n1=0;
  39.         n2=0;
  40.     P1=0;
  41.         P2=0;
  42.         TMOD=0x01;
  43.         TH0=(65536-50000)/256;         
  44.         TL0=(65536-50000)%256;
  45.         EA=1;
  46.         ET0=1;
  47. }
  48. void main()
  49. {
  50.         init();
  51.         while(1)
  52.                 {           
  53.                            jianpan();//检测键盘
  54.                          if(flag==0)//交通灯处于设置状态标志位flag=0
  55.                          P2=0x09;//四路红灯全亮
  56.                          if(flag==1)//检测交通灯处于运行状态标志位flag=1进入交通显示循环
  57.                          {
  58.                           if(n1<10)//检查通行时间设置是否合理,不合理则自动设置
  59.                           {n1=30,n2=5;}
  60.                           if(b==0&&c==0)
  61.                           {b=n1;d=n1-n2;c=1;P2=0x21;}
  62.                       if(d==0&&c==1)
  63.                       {d=n2;c=2; P2=0x11;}
  64.                           if(d==0&&c==2)
  65.                           {b=n1-n2,d=n1;c=3;P2=0x0c;}
  66.                       if(b==0&&c==3)
  67.                       {b=n2;c=0; P2=0x0a;}                        
  68.                       xianshi();//十字路口显示        
  69.                          }
  70.                          xianshi2();//控制台显示
  71.          }
  72. }                 
  73. void time0 () interrupt  1
  74. {        
  75.         TH0=(65536-50000)/256;
  76.         TL0=(65536-50000)%256;
  77.         aa++;
  78.          if(aa==20)//检测1S钟
  79.           {        aa=0;
  80.                 --d;//数码管显示减一
  81.                 --b;
  82.            }
  83. }
  84. void jianpan() //键盘检查函数
  85. {  if(kai==0)//检测开始键按下
  86.         {delay(5);                  
  87.          if(kai==0)
  88.          flag++;
  89.          if(flag>2)//设置开始键2种状态
  90.          flag=0;         
  91.          while(!kai)//键盘松手检测
  92.          xianshi();//显示路口数码管
  93.         }
  94.         if(flag==1)//检测开始键按下flag=1,打开定时器                  
  95.          TR0=1;
  96.         if(flag==2)//检测开始键按下flag=0,重新初始化系统
  97.         {TR0=0;n1=0;n2=0;flag=0;b=0;c=0;d=0;}
  98.   if(jia1==0&&flag==0)//检测通行+键按下且flag=0(交通灯处于设置状态)
  99.    {
  100.     delay(5);                  
  101.          if(jia1==0&&flag==0)
  102.          {n1++;}//通行时间+1s
  103.          if(n1>99)//检测通信时间最大时长99s
  104.          n1=n2+1;//重置通行时间且大于缓行时间
  105.          while(!jia1)
  106.          xianshi2();
  107.    }
  108.   if(jian1==0&&n1>n2&&flag==0)//检测通行-键按下且通行时间大于缓行时间且flag=0(交通灯处于设置状态)
  109.    {
  110.     delay(5);                  
  111.          if(jian1==0&&n1>n2&&flag==0)
  112.          {n1--;}//通行时间减一
  113.          if(n1==n2)
  114.          n1=99;
  115.          while(!jian1)
  116.          xianshi2();
  117.    }
  118.   if(jia2==0&&n2<n1&&flag==0) 检测缓行+键按下且缓行时间小于通行时间且flag="0(交通灯处于设置状态)
  119.    {
  120.     delay(5);                  
  121.          if(jia2==0&&n2<n1&&flag==0)
  122.          {n2++;}//缓行时间+1s
  123.          if(n2==n1)
  124.          n2=1;
  125.          while(!jia2)
  126.          xianshi2();
  127.    }
  128.   if(jian2==0&&flag==0)//检测缓行-键按下且flag=0(交通灯处于设置状态)
  129.    {
  130.     delay(5);                  
  131.          if(jian2==0&&flag==0)
  132.          {n2--;}//缓行时间-1s
  133.          if(n2==0)
  134.          n2=n1-1;
  135.          while(!jian2)
  136.          xianshi2();
  137.    }
  138. }
  139. void xianshi()//路口数码管显示函数
  140. {                shi=b/10;
  141.         ge=b%10;
  142.                 qian=d/10;
  143.                 bai=d%10;
  144.             k0=0;
  145.                 P1=table[shi];
  146.                 delay(n);
  147.                 k0=1;
  148.                 k1=0;
  149.                 P1=table[ge];
  150.                 delay(n);
  151.                 k1=1;
  152.                 k2=0;
  153.                 P1=table[qian];
  154.                 delay(n);
  155.                 k2=1;
  156.                 k3=0;
  157.                 P1=table[bai];
  158.                 delay(n);
  159.                 k3=1;
  160.                 xianshi2();
  161. }
  162. void xianshi2()        //控制台数码管显示函数
  163. {        
  164.             k4=0;
  165.                 P1=table[n1/10];
  166.                 delay(n);
  167.                 k4=1;
  168.                 k5=0;
  169.                 P1=table[n1%10];
  170.                 delay(n);
  171.                 k5=1;
  172.                 k6=0;
  173.                 P1=table[n2/10];
  174.                 delay(n);
  175.                 k6=1;
  176.                 k7=0;
  177.                 P1=table[n2%10];
  178.                 delay(n);
  179.                 k7=1;
  180. }
复制代码




四、总电路图及元器件清单

1.总电路图

总电路图

2.元器件清单

      元件名称

          数量(个)

单片机AT89C52

1

交通灯

4

LED数码显示

6

按钮

5

线阻

1

五、使用说明参考书

在使用此交通灯设计时,开/停按钮控制交通灯的运行,在停的状态下,十字路交通灯全部为禁止通行的状态,此时控制台可以设置通行时间和缓行时间,设置完成后,按下开/停按钮,交通灯开始正常运行。

、结论

通过为期两周的课程设计,我们应用所学数字电子技术顺利得完成了交通灯控制器的设计。期间,我们查阅了相关书籍,学到了很多知识,并利用它们设计了符合设计要求的信号产生器、计数器、控制电路等。不仅巩固了课堂知识,而且有效的和实际结合在了一起,扩展了所学知识和见识。
在设计过程中遇到不少问题,如相关元件运用条件不熟、接口不对应等问题,感觉到书本知识与实际问题及需要结合的难处,但也激发了我这方面的兴趣,提高了理论结合实际的意识。

、心得体会

由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,所以在这次课程设计过程中,我了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。有一点是在设计过程中,经常会遇到这样那样的情况,就是心里想老着这样的接法可以行得通,但实际接上电路,总是实现不了,而又一下找不出问题所在,只有在查了书上有关这方面的解释后才有所进展,因此耗费在这上面的时间很多。总体感觉是:通过这次课程设计,加强了我们动手、思考和解决问题的能力。

、参考文献

丁元杰  《单片微机原理及应用》 ;第三版;机械工业出版社出版社

谭浩强  《C程序设计》     ;第三版; 清华大学出版社


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

使用道具 举报

沙发
ID:125378 发表于 2016-8-12 15:50 | 只看该作者
求分享
回复

使用道具 举报

板凳
ID:306001 发表于 2018-4-11 17:11 | 只看该作者
,这是大学时候和同学一起做的课程设计,被谁上传了
回复

使用道具 举报

地板
ID:309914 发表于 2018-4-18 00:19 | 只看该作者
不错,感谢分享
回复

使用道具 举报

5#
ID:309914 发表于 2018-4-18 10:04 | 只看该作者
还不错的说。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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