1、闪烁LED小灯的设计毕业设计论文 精品学生姓名指导老师 职 称课题名称闪烁LED小灯的设计 课题工作内容交通灯的硬件电路主要由单片机控制电路、数码管显示电路、时钟电路、LED显示电路、按键控制电路组成。主要实现:1、交通灯指挥通行的实现:通过时钟电路、LED显示电路与数码管显示电路,实现通行灯的亮、灭与时间的显示。2、特殊情况的处理实现:通过按键控制电路,实现发生交通事故与有救护车要紧急通行时的交通灯状况。 指标要求1、自动控制 2、显示时间 进程安排第一天: 下达任务、了解课题要求、查阅资料; 第二天: 方案论证与确定,采购元器件; 第三天、第四天:硬件制作与调试; 第五天第八天:软件设计与
2、调试; 第九天: 撰写报告; 第十天: 作品掩饰与答辩考核。主要参考文献单片机原理及应用技术 范力旻 电子工业出版社 51系列单片机设计实例 楼然苗 李光飞 北航出版社 单片机的C语言应用程序设计 马忠梅 籍顺心 北京航空航天大学出版社51单片机应用开发案例精选王为青 邱文勋 人民邮电出版社 51系列单片机设计实例楼然苗 李广飞 北京航空航天大学出版社 单片机原理与接口技术胡汉才 清华大学出版社 单片机原理与应用 丁元杰 机械工业出版社 地点起止日期2012.6.106.23 目录第一章、设计目的1第二章、硬件设计12.1单片机最小系统12.1.1单片机12.1.2震荡电路2 2.1.3复位电
3、路22.2外接电路2 2.2.1串行口扩展3 2.2.2显示电路32.2.3十字路口交通灯显示电路4第三章、软件设计及调试43.1 流程图53.2程序6 3.2.1子程序9 3.2.2延时子程序9 3.2.3显示子程序103.3软件调试结果与说明13 第四章、实物调试13第五章、课程设计小结14附录A仿真16附录B系统程序21元件清单28 第一章 设计目的1.1课题简介近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
4、1.2课题研究的目的和意义本次课题利用了单片机内部定时器、外部中断,74HC164芯片,LED灯和数码管,解决了原始的人工指挥交通带来的一系列麻烦,大大的提高了实用性、灵活性和可靠性。同时通过这次课题使我们进一步熟悉单片机的内部结构,编程技巧以及相关芯片的了解与应用。第二章硬件设计本系统主要由单片机、74HC164芯片、8位共阳极数码管、LED灯等一系列电路组成,主要完成交通灯十字路口的通行控制及其时间的显示。2.1.最小系统2.1.1单片机:AT89C51AT89C51的工作特性:内含4KB的FLASH存储器檫写次数1000次; 内含128字节的RAM;具有32根可编程I/O线;具有2个16
5、位编程定时器 具有6个中断源,5个中断矢量,2级优先权的中断结构;具有1个全双工的可编程串行通信接口;具有1个数据指针DPTR;具有可编程3级程序锁定位;AT89C51的工作电源为5(10.2)V且典型值为5V;AT89C51最高工作频率为24MHZ;AT89C51的编程频率为324MHZ(本次用12MHz),编程启动电流和启动电压分别为1mA、5或12V(本次5V)。电源:采用USB接口连接,提供5V电压。2.1.2震荡电路:本次设计采用12MHz的晶振,电路图如下:图1震荡电路两只电容在20pF100pF之间取值,其取值在60pF70pF时振荡器频率稳定性较高,按照一般经验,外接晶体时两个
6、电容的取值为33pF。2.1.3复位电路: 图2 手动复位2.2外接电路 2.2.1串行口端口扩展74HC16474HC164是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。74HC164是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。 时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA 和 DSB)的逻辑与,它将上升时钟沿之
7、前保持一个建立时间的长度。 主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。 AT89C51通过P3.0口和P3.1口对其进行片选控制2.2.2显示电路图3 LED数码管显示电路: 本次LED显示电路主要采用74HC164与共阳极数码管相接。通过四片74HC164来控制数码管的输出。74HC164的1,2号脚接到AT89C51的P3.0口,第8脚接到P3.1口。2.2.3十字路口交通灯显示电路:图4 通过LED红、绿、黄三种颜色灯的亮与灭来模仿十字路口的交通灯。交通灯的变化规律:红灯亮20秒,黄灯亮15秒,绿灯亮5秒。假设一个十字
8、路口为东西南北走向。分为五个状态:1初始状态为南北绿灯亮,东西红灯亮;2南北绿灯亮20秒后,转为黄灯闪烁5秒,东西红灯仍亮;3南北黄灯亮5秒后,转为红灯,东西绿灯亮;4东西绿灯亮20秒后,转为黄灯,南北红灯亮;5东西黄灯亮5秒后,转为红灯;南北为绿灯亮。重复循环。交通灯变化过程中用数码管进行计时,以便观察。第三章 软件设计及调试 3.1流程图YNNYNYNYYNNYY NYY3.2程序 3.2.1主程序 void main(void) TMOD=0x01; /设置定时方式1 TH0=0x3c; /定时初值50MS TL0=0xb0; TR0=1; /T0溢出中断请求开启 EA=1; /总中断开
9、启 ET0=1; /T0中断开启 EX0=1; /外部中断INT0开启 IT0=1; /设置开关下降沿有效 EX1=1; /外部中断INT0开启 IT1=1; /设置开关下降沿有效 ns_time=ns_time_green; /东西南北红黄绿灯时间赋值 ew_time=ew_time_red; ew_time_red=ns_time_green+ns_time_yellow; if(!a) /a=0,东西显示19开始倒计时,南北14开始倒计时 ns_time=ew_time_red; ew_time=ns_time_green+ns_time_yellow; while(!a) /a=0,进
10、入循环 if(ew_time-50) while(!flag); display(ew_time,ew_time-5); /flag=1,显示东西19,南北14 P1=0xdd; /南北绿灯,东西红灯 flag=0; if(ew_time=5) /东西时间0) /南北红灯,东西绿灯 while(!flag); display(ns_time-5,ns_time); /flag=0,显示南北19,东西14 delay(5000); /延时子函数调用 P1=0xeb; /南北红扥个,东西绿灯显示 if(ns_time-5=0) /南北时间=0;i-) /分别将4位数送到SBUF区域 SBUF=ta
11、bleai; while(!TI) ; /判断是否发送完一个数据 TI=0; /若发送完,0赋给TI 3.2.4中断程序:void int0(void) interrupt 0 /int0中断子函数,当紧急情况(救护车等)发生时,对应INT0按键调用此函数 int i,j; display(00,00); /显示器显示0000,不再进行倒计时 delay(5000); for(i=0;i10;i+) /利用flag实现东西南北方向红灯均显示亮,对应东西南北方向车流均停止,处理紧急情况 for(j=0;j10;j+) delay(50000); while(!flag) P1=0xdb; fla
12、g=0; void int1(void) interrupt 2 /int1中断子函数,当紧急情况(救护车等)发生时,对应INT1按键调用此函数 int i,j; display(00,00); /显示器显示0000,不再进行倒计时 for(i=0;i10;i+) for(j=0;j10;j+) /利用flag实现主干道东西方向绿灯南北方向红灯 while(!flag) P1=0xeb; flag=0;int t0int()interrupt 1 /t0中断(定时器0中断)子函数 TH0=0x3c; /定时50ms初值设定 TL0=0xb0; point-; /20次T0定时次数控制 if(p
13、oint=0) /如果20次到了,改变显示的东西南北方向的时间 flag=1; point=20; if(ns_time!=0) ns_time-; if(ew_time!=0) ew_time-; 3.3软件调试结果与说明用Keil uVision4软件编程,编译无误后,生成*.hex文件。把hex文件写入Protues仿真软件进行仿真,按图(见附录)连接电路,进行仿真。开始仿真,东西南北红、绿、黄三种灯自动按要求规律运行,同时数码管显示相应时间。按下K,1电路复位。按下K2东西南北红灯全亮,数码管显示为0。按下K3,东西绿灯亮,南北红灯。经多次验证,设计符合要求,则软件调试成功。 第四章
14、实物调试烧入程序后,接通电源,发现交通灯自动运行,但对应时间不同且数码管显示时间很乱。用万用表检测后,未发现短路、虚焊的情况。经线路分析知,74HC164与AT89C51之间连接顺序有误。改正后,交通灯正常运行但数码管显示数字缺笔划。经检测后,发现是数码管本身损坏,更换数码管后,系统运行正常。 第五章 课程设计小结两周的课程设计结束了,但我学到了很多。课程设计的每一个环节都很重要,需要我们的耐心与细心。一个微小的错误可能会使结果出现很大的差距。在实物测试过程中,发现了很多的小问题。例如:电路按照仿真图焊好后便直接接电源进行测试。实物与仿真电路中的元件存在差异,这是不可忽略的问题。在实物调试前,
15、我们应好好想一下,还有什么没做,是否有遗漏的地方。查找错误要懂得方法,要有针对性,不要胡乱拆线改线。先从AT89C51芯片查起,看其是否工作后,在查线路问题。在无法查出问题时应多注意常识性问题。通过两周的课程设计,明确了软件设计的具体步骤,提高了对定时、中断等编程的认知和理解,同时巩固了所学的知识,掌握了一定的编程技巧。在设计与检测过程中,独立思考的能力很重要。遇到问题,不能一味的回避或求助他人,要学会从基础入手,一步一步地分析问题并解决问题。只有把所学的理论知识与实践相结合起来,才能进一步地提高自身分析问题与解决问题的能力,为将来就业夯实基础。 第六章 参考文献单片机原理及应用技术 范力旻
16、电子工业出版社 单片机应用系统设计技术 张齐 电子工业出版社 51系列单片机设计实例 楼然苗 李光飞 北航出版社 单片机的C语言应用程序设计 马忠梅 籍顺心 北京航空航天大学出版社51单片机应用开发案例精选王为青 邱文勋 人民邮电出版社 51系列单片机设计实例楼然苗 李广飞 北京航空航天大学出版社 单片机原理与接口技术胡汉才 清华大学出版社 单片机原理与应用 丁元杰 机械工业出版社 附录A 1.proteus 仿真原理图2实物效果图南北绿灯亮19s,东西红灯亮。南北黄灯亮5s,东西红灯。东西绿灯14s,南北红灯。东西黄灯5s,南北红灯发生交通事故时,交通灯红灯全亮,且数码管显示0有特殊情况是只
17、有东西通行。附录B1.系统程序 #include sbit p1_0=P10; sbit p1_1=P11; sbit p1_2=P12; sbit p1_3=P13; sbit p1_4=P14; sbit p1_5=P15; sbit p0_0=P16; bit flag=0; /定义显示状态控制位 int ns_time; int ew_time; int ns_time_red=20; int ns_time_green=15; int ns_time_yellow=5; int ew_time_red=20; int ew_time_green=15; int ew_time_yel
18、low=5; char point=20; /定时的控制次数初值设定 int a=0; /南北,东西两方向切换状态标志初值设定 delay(int t) /延时子函数 while(t-); display(int time) /显示子函数 char table10=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09; /共阳极数码显示0-9对应的字型码 char i,a2; a0=time%10; /时间个位数赋值给a0 a1=time/10; /时间十位数赋值给a1 SM1=0;SM0=0; /串行口工作方式0设定 for(i=1;i=0;i-
19、) /将数送到SBUF区域 SBUF=tableai; while(!TI) ; /判断是否发送完一个数据 TI=0; /若发送完,0赋给TI void main(void) TMOD=0x01; /设置定时方式1 TH0=0x3c; /定时初值50MS TL0=0xb0; TR0=1; /T0溢出中断请求开启 EA=1; /总中断开启 ET0=1; /T0中断开启 EX0=1; /外部中断INT0开启 IT0=1; /设置开关下降沿有效 EX1=1; /外部中断INT0开启 IT1=1; /设置开关下降沿有效 ns_time=ns_time_green; /东西南北红黄绿灯时间赋值 ew_t
20、ime=ew_time_red; ew_time_red=ns_time_green+ns_time_yellow; if(!a) /a=0,东西显示19开始倒计时 ns_time=ew_time_red; ew_time=ns_time_green+ns_time_yellow; while(!a) /a=0,进入循环 if(ew_time-50) while(!flag); display(ew_time); /flag=1,显示东西19 P1=0xdd; /南北绿灯,东西红灯 flag=0; if(ew_time=5) /东西时间0) /南北红灯,东西绿灯 while(!flag); d
21、isplay(ns_time-5); /flag=0,显示东西14 delay(5000); /延时子函数调用 P1=0xeb; /南北红扥个,东西绿灯显示 if(ns_time-5=0) /南北时间=5时南北红灯,东西黄灯闪烁 while(!flag); /flag=0南北显示19开始倒计时 flag=0; display(ns_time,ns_time);/东西,南北均从5开始倒计时显示 P1=0xfb; /南北红灯,东西黄灯一亮一灭显示 p1_3=p1_3;/东西黄灯P1.3位取反,以实现黄灯亮灭变化显示 delay(5000); /延时函数调用 if(ns_time=0) /如果南北时间为0赋值a为0 a=0; int t0int()interrupt 1 /t0中断(定时器0中断)子函数 TH0=0x3c; /定时50ms初值设定 TL0=0xb0; point-; /20次T0定时次数控制 if(point=0) /如果20次到了,改变显示的东西南北方向的时间 flag=1; point=20; if(ns_time!=0) ns_time-; if(ew_time!=0) ew_time-;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1