历史上的今天
返回首页

历史上的今天

今天是:2024年12月17日(星期二)

正在发生

2019年12月17日 | 基于51单片机交通灯课程设计

2019-12-17 来源:51hei

1 绪论1.1设计目的

单片机具有性价比高、集成度高、可靠性好、抗干扰性强等特点,广泛运用于各种智能仪器中。基于新型规则的可编程交通控制系统,可以实现对车辆、行人的控制,使的交通便于管理。所以,采用单片机自动控制交通灯有现实的社会意义。


通过本次设计,使学生不仅更加深刻领会微型计算机从硬件组成到软件编程的基本原理和知识,而且更要学会应用,务必做到理论和实践相结合,掌握硬件分析、软件设计的基本思想和方法,提高分析问题、解决问题和工程实践的能力。


1.2设计内容

1)设计一个十字路口交通灯控制器。用单片机控制LED灯模拟指示。模拟东西方向的十字路口交通信号控制情况。南北方向主干道计时时间为60s,东西方向次干道计时时间为45s。

2)红绿灯不变期间,在七段数码管上显示每秒倒计时。

3)计时到最后5秒时,两个方向的黄灯同时闪烁直至计时到0。
2 系统设计方案
2.1设计思路

模拟交通灯控制器就是使用单片机来控制一些LED灯和数码管,模拟真实交通灯的功能。当南北主干道通车时绿灯亮,而东西次干道干道红灯亮;当55s通车时间到后,主干道绿灯熄灭,黄灯亮,黄灯亮5s后由主干道切换到次干道通车。此时主干道黄灯熄灭,红灯亮,而次干道红灯熄灭,绿灯亮,次干道开始通车; 40s通车时间到后,次干道绿灯熄灭,黄灯亮,黄灯亮5s后由次干道切换到主干道通车。此时次干道黄灯熄灭,红灯亮;而主干道红灯熄灭,绿灯亮,如此不断循环。红、黄、绿交替闪亮,利用数码管倒计数显示间隔等,用于管理十字路口的车辆及行人交通。


2.2方案设计

利用AT89C52单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,数码管显示剩余时间。红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯,8个共阴极数码管显示剩余时间,根据设计功能及要求,我们可得系统的原理框图如图2-1所示。


图2-1  系统原理图(见51hei附件)3 系统硬件电路设计
3.1 AT89C52单片机

AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。


AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。

如下图3-1所示:

图3-1  AT89C52单片机3.1.1晶振电路设计

时钟电路用于产生MCS-52单片机工作时所必须的时钟控制信号。其内部电路在时钟信号控制下,严格地按时序执行指令进行工作。在执行指令时,CPU首先要到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定操作。


本设计采用12MHz晶振和两个27Pf瓷片电容,他们构成一个稳定的自激振荡器。该电容的大小影响振荡器频率的高低、振荡器的稳定性和起振的快速性。为单片机提供标准时钟。其中两个瓷片电容起微调作用。 如图3-2所示:

图3-2  晶振电路3.1.2复位电路设计

复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。


复位电路通常采用上电自动复位和按钮复位两种方式。

该设计采用加电直接复位,复位电容采用10uF,电阻10000欧。加电瞬间,RES管脚为高电平。通过电阻回路放电,使电压逐渐降为零,从而实现了复位功能。

其连接图如下图3-3所示:

图3-3  复位电路3.2显示部分电路设计3.2.1数码管选择

此处采用的数码管时共阴极数码管,G、F、E、D、C、B、A七个端口是输入端口,对其各位进行赋值,置位则亮,复位则灭,用此来显示出相应的数字;1、2两端口用来控制高位和低位的选通显示,只要对端口置位,便可以选择该端口,并对其所代表的位进行赋值,显示。数码管如下图3-5所示。

图3-5 数码管
3.2.2十字路口交通灯设计

一条主干道和一条次干道汇合成十字路口,南北方向道路为主干道,东西方向干道为次干道。每个路口都采用了三个LED灯来显示,分别代表了红黄绿三种灯,来模拟路口交通灯的变换。LED信号灯如下图3-6所示。


图3-6 LED信号灯设计

3.3系统硬件总电路图

根据设计要求和所需电路,得到系统硬件总电路图如图3-7所示。

图3-7 系统硬件总电路图
4 系统软件程序设计4.1主程序设计4.1.1总体流程图



4.2其他子程序设计

4.2.1循环流程控制思路



5 调试与仿真5.1 Proteus软件系统仿真

打开Proteus软件,按照硬件系统图3-7所示接线,连线完毕后,通过keil把编好的c语言程序转换为.hex文件,并将其放入单片机内。


设置好仿真器后,编译程序无误后调试执行程序,结果显示符合要求。


5.2仿真结果

根据功能要求分别仿真各种情况下的亮灯情况,具体如下:

1.如下图5-1仿真图所示,南北方向主干道亮绿灯,东西次干道方向亮红灯。

图5-1  南北绿灯东西红灯


2.如下图5-2所示,南北方向倒计时5s后变为黄灯,东西为绿灯。

图5-2南北黄灯东西红灯

3.如下图5-3所示,东西方向变为绿灯,南北方向变为红灯。

图5-3南北红灯灯东西绿灯

4.如下图5-4所示,东西方向在变为黄灯


6 总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。


这次的单片机课程设计大概用了一个月的时间,在这一个月的时间当中,虽然开始遇到了很多的困难,但是由于合理地进行设计安排,分工合作,并各自查阅了相关的资料,最后在大家共同努力下我们顺利地完成了本次单片机课程设计,同时也学到了很多东西。

回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。例如我们在设计数码管显示的时候,刚开始的时候,由于对数码管引脚的不熟悉,我们都无法让数字显示,后来发现时十位和个位的置位、复位发生了问题,我们对此进行了修改,可以正确的显示出十位及个位的数值,但是数字的显示不稳定,不停的跳动,我们为此查阅了很多的资料,但还是未能解决,最后我们不停地对程序进行修改,终于发现了问题所在,在显示子程序上存在缺陷未能快速的切换对十位、个位的置位和复位,经过这样的修改,终于可以完美的显示时间了。我们也更好地掌握了对数码管的使用,这都是课堂上学不到的知识。   


这次的单片机课程设计是通过实践操作和理论相结合,提高动手实践能力,提高科学的思维能力。与此同时,我们也对分工合作有了进一步的认识,只有通过合理的分工合作,我们们才能够在短短一周的时间内完成设计任务,相信这对以后在社会上工作和学习会有很多帮助,让我们能更好的进入工作状态。最重要的是,这次课程设计也增加了我们对问题的研究和探讨,们以后的学习中会有更多的帮助。


单片机为我们的主要专业课之一,对我们还是很有帮助的,课程设计也是为我们以后的工作提前进行了一次练手,也是我们学习生活之中少有的一次自己探索、研究,发现问题、解决问题的机会。当然要做好一个课程设计也不是很简单的,我认为有以下几步:


  • 在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;

  • 要有一个清晰的思路和一个完整的的软件流程图,善于将大的程序段缩小为每个子函数来实现;

  • 在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;

  • 要养成注释程序的好习惯,写程序是应该思路清晰,结构明了,应该让人一看就能明  白你的思路,方便资料的保存和交流;

  • 我们们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的 


在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。我们们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,或者与其他小组成员讨论,共同解决,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。通过这次课程设计我们也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。


通过这次课程设计使我更加懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正将一个东西学好学透,从而提高自己的实际动手能力和独立思考的能力。我想这对于我今后的学习生活和工作都会是有很大帮助的!


参考文献

[1].肖金球.单片机原理与接口技术[M];

[2].江志红.51单片机技术与应用系统开发案例精选[M];

[3].周润景.基于PROTEUS的51单片机设计与仿真[M];

[4].王守中.51单片机开发入门与典型实例[M];

[5].张齐.朱宁西.单片机系统设计与开发[M];

[6].周立功.单片机开发网[M];

[7].天津锐志单片机开发网[M];

[8].ATMEL公司AT89S52单片机中文PDF资料[M];
单片机源程序如下:


      #include

              #include

              #define uint unsigned int

              #define uchar unsigned char

              uchar temp,aa,nn;

              sbit rn=P2^0;                               

              sbit nb=P2^1;

              sbit gn=P2^2;

              sbit rw=P2^3;

              sbit dx=P2^4;

              sbit gw=P2^5;

              sbit shi=P3^6;

              sbit ge=P3^7;        /*对要使用的单片机各个口进行定义*/

              bit flag=0;


              uchar code table[]={

              0x3f,0x06,0x5b,0x4f,

              0x66,0x6d,0x7d,0x07,

              0x7f,0x6f,0x77,0x7c,

              0x39,0x5e,0x79,0x71};/*将数字0123456789的16进制数定义成数组用以显示*/


              void delay(uint z);

              void disp(uint n);

              void nb_flash(void);

              void dx_flash(void);

              void  xint0();

              void timer0();

              void  LED_ON();

              void  xint1();

              void  LED_OFF();

              void nanbei();

              void dongxi();                 /*将所使用的子函数定义*/


              void main()

              {

                            uint num;

                            num=0;

                            aa=0;

                            TMOD=0x01;

                            TH0=(65536-50000)/256;

                            TL0=(65536-50000)%256;

                            EA=1;

                            ET0=1;

                            TR0=1;

                            EX0=1;

                            IT0=0;

                            EX1=1;

                            IT1=1;                       /*中断初始化*/

                            while(1)

                            {

                                          nanbei();             

                                          nb_flash();

                                          dongxi();

                                          dx_flash();  /*主函数中显示部分*/

        }

              }


              void delay(uint z)                    /*延时子函数*/

              {

                            uint x,y;

                            for(x=z;x>0;x--)

                                          for(y=110;y>0;y--);

              }


              void timer0() interrupt 1             /*定时器初始化*/

              {

                            TH0=(65536-50000)/256;

                            TL0=(65536-50000)%256;

推荐阅读

史海拾趣

Cypress Industries公司的发展小趣事

Cypress不仅仅局限于某一特定的市场领域,而是积极开拓多元化的市场布局。除了传统的数据通信和消费类电子市场外,公司还涉足了汽车、工业和太阳能等领域。这种多元化的市场策略使Cypress能够抵御单一市场波动的影响,保持稳定的业务增长。

Amprobe公司的发展小趣事

2020年,Cypress迎来了其发展历程中的一个重要时刻——与德国半导体巨头英飞凌(Infineon)的合并。这次合并使Cypress成为英飞凌的一部分,双方在技术、市场和资源等方面实现了互补和整合。这次合并不仅增强了Cypress在全球半导体市场的竞争力,也为其未来的发展提供了更广阔的空间。

以上故事均基于Cypress Semiconductor(赛普拉斯半导体)的发展历史而创作,旨在客观描述公司在电子行业中的发展历程和成就。

旌芯半导体(GN)公司的发展小趣事

2020年,Cypress迎来了其发展历程中的一个重要时刻——与德国半导体巨头英飞凌(Infineon)的合并。这次合并使Cypress成为英飞凌的一部分,双方在技术、市场和资源等方面实现了互补和整合。这次合并不仅增强了Cypress在全球半导体市场的竞争力,也为其未来的发展提供了更广阔的空间。

以上故事均基于Cypress Semiconductor(赛普拉斯半导体)的发展历史而创作,旨在客观描述公司在电子行业中的发展历程和成就。

Elytone Electronics Co Ltd公司的发展小趣事

随着公司规模的扩大,Elytone公司意识到品质管理对于企业发展至关重要。他们引入了先进的质量管理体系,加强了对原材料采购、生产过程和售后服务的监控。通过持续改进和优化,公司的产品质量得到了显著提升,赢得了客户的广泛认可。

Astro Industries Inc公司的发展小趣事

面对日益激烈的市场竞争,Astro Industries Inc意识到成本控制的重要性。于是,公司开始着手进行供应链的整合与优化。通过与优质供应商建立长期合作关系,公司确保了原材料的稳定供应和质量可控。同时,公司还引入了先进的生产管理系统,提高了生产效率,降低了生产成本。这些措施使得Astro Industries Inc在保持产品质量的同时,也具备了更强的市场竞争力。

ETEQ Microsystems Inc公司的发展小趣事

面对电子行业日新月异的发展变化,ETEQ Microsystems Inc始终保持敏锐的市场洞察力。公司不断调整战略方向,积极应对行业变革带来的挑战。未来,ETEQ Microsystems Inc将继续加大研发投入,推动技术创新和产品升级,致力于成为电子行业的领军企业。

问答坊 | AI 解惑

智芯科技最优化设计案例

设计最优化是我们的核心竞争力。我们的设计专家曾因推动设计水平的提升得到业界的奖励和认可。我们强大的设计能力来源于独特的方法、特殊的工具与设计技术。智芯的最优化设计技术包括简单、但一般设计服务公司很难做到的技术,同时也包括对业内最先 ...…

查看全部问答>

什么是汽车网络技术?

汽车网络技术   汽车制造商和一级供应商面临日益复杂的安全性、动力总成、底盘和车身系统协调统一的问题。诸如线控、碰撞避免、辅助驾驶等新兴系统都需要一个能以可预测的可靠方式提供极高数据速率的网络。MOST可支持高数据速率,然而,其网络标 ...…

查看全部问答>

2440Nandflash,64MB到256MB,keil调试

【基本情况:】 平台S3C2440 RAM:64MB  NANDFLASH :原来是64MB,现在要做成256MB(K9F2G08U0A ) 【调试环境:】keil uvision3+ulink+J-TAG口 【进展:】 1、改了SJF2440程序,读出来的跟原来的数据是一样的, 2、改引导程序(是 ...…

查看全部问答>

VS2005/WinCE6 是180天的试用版,已经过期了,必须重装吗?

VS2005/WinCE6 是180天的试用版,已经过期了,必须重装吗?…

查看全部问答>

请问在allegro中把位号文件打印成PDF文件,怎样才能让里面的文字是可以查找的?

可以肯定,打印出来的PDF文件中,文字是矢量字体──因为它可以无限放大。 但是,这些文字就是无法查找,这在查找位号时就不是很方便。 请问,有何方法?…

查看全部问答>

项目开发外包:与GPS蓝牙通信通过GPRS传回数据

项目开发外包:与GPS蓝牙通信通过GPRS传回数据 OS:windows Mobile 5 for smart phone (多普达310) 主要工作如题。有工作经验的呼我 13913911764 宁周峰 南京 面向带GPS的手机定位监控系统设计方案 产品功能定义 基于带蓝牙GPS或者内置GPS的 ...…

查看全部问答>

ucos 事件与消息区别的

ucos 中事件和消息的区别是 什么?…

查看全部问答>

vs2005 调试:源文件与模块生成时的文件不同,仍要让调试器使用它吗?

我在VC8智能设备ATL项目中遇到了“源文件与模块生成时的文件不同,仍要让调试器使用它吗?”这个问题。程序可以运行,断点也有效,就是在运行中回引起其他地方出错,搞不情为什么 ,那位大侠帮忙解决一下啊…

查看全部问答>

uclinux挂载romfs的问题

我现在把内核和romfs.img直接下到ram中, 启动参数为 /dev/rom0 内核配置为: #define DRAM_BASE 0x00000000 #define DRAM_SIZE 0x01000000 #define FLASH_MEM_BASE 0x00900000 (把romf.img直接下到900000) #define FLASH_SIZE 0x1000000 ...…

查看全部问答>

CC2530的做板要求

我自己layout了一块CC2530的板子,现在要发出去做,有如下要求: 板厚:1.2mm  材质:FR-4   铜箔厚度:1OZ  全板沉金 过孔盖阻焊 请问下除了这些约束,还有其他的要求吗? 天线部分50欧姆阻抗匹配,怎样要求板厂呢? 谢谢 ...…

查看全部问答>