单片机交通灯课程设计报告_第1页
单片机交通灯课程设计报告_第2页
单片机交通灯课程设计报告_第3页
单片机交通灯课程设计报告_第4页
单片机交通灯课程设计报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 课程设计报告纸单片机原理与应用课程设计报告 题 目: 学 院: 姓 名: 学 号: 日 期: 指导老师: 交通灯的设计一、课程设计的目的1、进一步熟悉和掌握单片机的结构及工作原理。2、掌握单片机的接口技术及相关外围芯片的特性,控制方法。3、通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。4、通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。5、通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应工作打下基础。6、通过课程设计,培养学生综合运用所学专业知识分析问题和解决问题的能力。二、仪器设备伟福

2、Lab8000系列单片机仿真实验系统。三、课程设计主要内容及技术指标 基本要求:设计由红黄绿三色灯组成的交通信号灯,各灯逐次点亮,按照红灯亮63秒绿灯亮60秒黄灯亮3秒红灯亮63秒的顺序反复循环。利用单片机片内的定时计数器定时,红黄绿灯用发光二极管表示,计时值用数码管以十进制数字显示。要求定时准确,数码管和二极管显示正确。拓展要求:要有较好的人机对话界面;由单向路口的红绿灯循环点亮拓展为十字路口红绿灯的循环点亮;在十字路口的某一方向设定紧急通行开关,闭合开关时要求此方向绿灯点亮,另一方向红灯点亮,且倒计时的显示数码管停止计时。4、 系统工作原理该系统以89C51单片机为控制核心,由外接三色(红

3、绿黄)LED灯同步八段数码管的倒计时显示,外接两开关电路控制两方向的应急中断。单片机上电后,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到八段数码管上实时显示。在此过程中随时通过开关调用LED灯常亮显示和清除数码管显示的中断。五、系统的硬件设计注:单片机的晶振电路的复位电路略去连线时,伟福Lab8000系列单片机仿真实验系统的数码管显示打到外驱,P2口连接数码管的段码口,P3连接位选通口;用P1.0P1.5分别选连两组红绿黄灯,P1.6P1.7连接两控制开关key和key1.六、系统的软件设计1、 系统工作过程(1) 在一个十字路口的两条主干道上,分别装上一套红、黄、

4、绿3种信号灯。 (2) 在通常情况下,一条主干道为红灯,另一条主干道为绿灯或黄灯。采用定时器查询方式控制南北向、东西向交通灯。数码管倒计时显示。亮灯规律:东西红灯亮63秒,南北绿灯亮60秒、黄灯亮3秒;南北红灯亮63秒,东西绿灯亮60秒、黄灯亮3秒。(3) 在紧急情况时,数码管倒计时显示暂停,应急方向绿灯常亮,另一方向红灯亮。设置某一方向中断的优先级更高。解除应急以后,系统接着之前中断时的状态继续正常工作。2、 软件设计思想通过定时器的查询方式,实现对数码管倒计时显示以及红绿黄三色的LED灯的亮灭时间的控制:通过中断方式,实现在紧急情况下两方向红绿灯亮灭的控制。3、 程序流程图 (一)、主函数

5、部分: (二) 、更新LED灯的状态和数码管的显示值模块:4、 软件源程序#include < reg51.h >/ 此表为 LED 的字模 / 0 1 2 3 4 5 6 7 8 9 clearunsigned char code Disp_Tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;/count_1s为定时到1s的循环次数20,count1和count为倒计时数/flag_1s是1s到的标志unsigned char count_1s,count,count1,flag_1s; unsigned ch

6、ar flag,flag1=1;/0->red; 1->green; 2->yellowsbit red=P10;sbit green=P11;sbit yellow=P12;sbit red1=P13;sbit green1=P14;sbit yellow1=P15;sbit key=P16;sbit key1=P17;unsigned char a4;/显示数据缓存void zd_ini() /中断初始化程序TMOD=0x01;/选择方式1,定时器00000 0001bTH0=0X3C; /定时50ms初值TL0=0XB0;ET0=1;/开定时器中断EA=1;TR0=1;

7、void system_ini()flag=0;count_1s=20; / 20*50ms=1s;count=63; count1=60;zd_ini();/调用中断初始化程序red=1;green=0;yellow=0; green1=1; red1=0; yellow1=0; key=1; key1=1;void timer_0() interrupt 1/定时器中断0TH0=0X3C; /继续赋初值TL0=0XB0;if(-count_1s) /如果没到1s,则返回 return;/到1sflag_1s=1;/置位标志位count_1s=20;void show()/用于计算和查表转换

8、相应的待显示数/东西向 a0=count/10; /高位 a1=count%10; /低位a0=Disp_Taba0;a1=Disp_Taba1;/南北向a2=count1/10; /高位a3=count1%10; /低位a2=Disp_Taba2;a3=Disp_Taba3;void update() /更新count和count1的值,切换LED灯 if(key=1)/如果开关按下,则东西通,南北止 red=green1=0; yellow=yellow1=0; green=red1=1; else if(key1=1) /如果开关1按下,则南北通,东西止 red=green1=1; ye

9、llow=yellow1=0; green=red1=0; else/如果无开关按下if(flag=0)if(count=0)flag=1;/绿灯亮flag1=0;/红灯1亮count=60;count1=63; else if(count1=0) flag1=2; /黄灯1亮 count1=3; elsecount-; count1-;else if(flag=1)if(count=0)flag=2; /黄灯亮count=3;elsecount-; count1-;elseif(count=0)flag=0;/红灯亮 flag1=1;/绿灯1亮 count1=60;count=63;else

10、count-; count1-;/分别根据flag和flag1的值对LED灯的点亮情况设置if(flag=0)red=1;green=0;yellow=0;if(flag1=1)red1=0;green1=1;yellow1=0;if(flag1=2)red1=0;green1=0;yellow1=1; if(flag=1)red=0;green=1;yellow=0; if(flag1=0) red1=1;green1=0;yellow1=0;if(flag=2)red=0;green=0;yellow=1; void disp() /总的显示函数int i=0;show();/调用用于计算

11、和查表转换相应的待显示数的函数P3=0x01; /输出低位选通信号P2=a1;for(i;i<30;i+);/延时P3=0x02;P2=a0;i=0;for(i;i<30;i+);/延时P3=0x04; /输出低位选通信号P2=a2; i=0;for(i;i<30;i+);/延时P3=0x08;P2=a3;i=0;for(i;i<30;i+);/延时void main()system_ini();/系统初始化while(1)if(flag_1s)update(); /更新flag_1s=0; /清除1秒时间到的标志disp();/一直循环显示七、系统的实现与调试过程(一

12、)、基本功能的实现与测试:(1)、一秒定时的实现;用定时器0定时50ms,循环次数设为20,每次溢出产生中断,进入中断服务程序里把次数减一,20次之后即可实现1s的定时。在中断程序中,添加语句,如果循环到20次,则把P1.0取反,从而直接可以观察到1s定时的LED灯的亮灭。如果没有,则检查中断服务程序。(2)、单个数码管显示的实现;数码管的ABCDEFGH与单片机的P2相连,位选通与P3口相连。使要显示的位的位选通为低电平,从而实现显示。检测时,可以先写P2=0xff;P30=1;看数码管是否能显示8.,如果可以,则说明数码管和电路没问题,如果不可以,则检查电路。然后用要显示的值为索引下标,查

13、找预先定义的数组unsigned char code Disp_Tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;转换成相应的数码管值送到P2口,看数码管能否正常显示。(3)、两个数码管动态扫描显示的实现;循环切换切换各数码管的位选通位,与此同时,送出段码,延时一段时间。如此即可实现动态显示。调试时,观察数码管是否能够正常扫描显示。如果亮度过低,则增加延时时间;如果有闪烁现象,则减小延时即可。(4)、LED灯配合数码管显示数值的改变而亮灭的实现;每1s定时时间到,都要调用更新程序update();在这个函数里,我们通过判断当前

14、计数值是否递减到0来确定是否要切换状态。如果切换状态,则当前计数值重新赋初值,比如,下一个状态是红灯,则初值为63;调试时观察LED灯是否与显示的倒计时同步。如果不同步,检查自己的update()函数里的判断逻辑关系是否有误。(二)、附加南北方向的控制后:(1)、南北和东西交通灯组合情况的逻辑梳理;总共四种情况:东西红灯,南北绿灯;东西红灯,南北黄灯;东西绿灯,南北红灯;东西黄灯,南北红灯。我们在东西红的控制程序段里加入南北绿灯和黄灯的判断处理;东西绿灯和黄灯时,让南北红灯点亮;东西黄灯结束,东西南北的交通灯同时切换。如此即可理清整个逻辑的框架。(2)、四个数码管动态扫描显示的实现;通上所述两

15、个数码管实现和调试方法一样,只是循环切换的位选通位为四位。(3)、LED灯的配合显示;调试时观察,东西向和南北向的LED是否显示合理,若出现不该有的状态,则检查判断逻辑是否有误。观察前,可将各个灯的点亮时间缩短,以节约观察时间,测试完毕修改回来即可。(三)、增加人为应急控制后:(1)、人为控制功能分析;若人为地按下东西向恒通的按键key,则数码管停止倒计时,显示值锁定;若人为地按下南北向恒通的按键key1,则数码管停止倒计时,显示值锁定;key的优先级较key1高。(2)、按键检测的中断或查询方式的实现与分析;我们可以通过ifelse if-else;语句实现优先级,也可以通过中断的优先级来控

16、制实现。于此题看来中断程序似乎显得略微复杂,涉及到两个中断服务程序的编写,现举一例:void int0() interrupt 0TR0=0; /关闭计数器green=1; /东西绿灯亮red=0;yellow=0;red1=1; /南北红灯亮green1=0;yellow1=0;key=1;/设置key为读入方式while(key=0);TR0=1;/打开计数器这只是其中一个中断程序的书写,除此之外还要设置优先级,考虑中断嵌套的问题,不甚麻烦,采用ifelse if-else;语句可以直接确定优先级,代码和思路简单。本次课设采用if语句实现。(3)、最终的实现最终实现程序和连线图见报告的源程序和电路原理图部分。八、心得感悟这次的单片机课设实际上是我们的理论课单片机与嵌入式系统设计的实际应用延伸。通过这次课设,我们进一步地熟悉和掌握了AT89C51单片机的结构和工作原理,能够熟悉地根据单片机的接口特征编写相应的程序,从而达到测试控制的目的。这次课程设计是一个完整的应用系统的开发过程,在课程设计的整个过程中,我们一步一个脚印,从提出设想到功能分析、再到过程设计、再到编码实现,再到最后整个解决方案的形成,大大增强了自己的系统设计能力。我们这次的课程设计题目是交通灯的设计,基本功能就是让红绿黄三个灯

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论