1、 目 录1 设计要求及总体方案介绍11.1 设计课题任务11.2 功能说明11.3 设计总体方案介绍及工作原理说明21.3.1 总体方案介绍21.3.2 工作原理32 硬件系统设计42.1 硬件模块介绍42.2 电路原理图 PCB图 元器件布局图42.3 元器件清单43 软件系统设计53.1 单片机的使用资源情况53.2 软件模块功能介绍53.3 程序流程图53.3.1 主程序流程图53.3.2子程序流程图63.3.3应急通道程序流程图73.3.4键扫程序流程图74 设计总结84.1 使用说明84.2 仿真结果84.3 误差分析105 设计总结与体会115.1设计总结115.2 教学建议11结
2、束语12致谢13参考文献14附录A15附录B18附录 C191 设计要求及总体方案介绍1.1 设计课题任务设计一个具有特定功能的十字路口交通灯。该交通灯上电或按键复位后能自动显示系统提示符“P.”, 进入准备工作状态。按开始键则开始工作,按结束键则返回“P.”状态。要求甲车道和乙车道两条交叉道路上的车辆交替运行,甲车道为主车道,每次通车时间为60秒,乙车道为次车道,每次通车时间为30秒,要求黄灯亮3秒,并且1秒闪烁一次。有应急车辆出现时,红灯全亮,应急车辆通车时间10秒,同时禁止其他车辆通过。1.2 功能说明本次课程设计在硬件方面的接法如下:P3口接二极管,P3.0、P3.1、P3.2口线分别
3、来控制东西方向的绿灯、黄灯和红灯;P3.3、P3.4、P3.5口线分别控制南北方向的红灯、黄灯和绿灯。P2口作为数码管的位控,P0口作为数码管的段控,P1口作为输入部分(这里用到了P1.0、P1.1、P1.2口线),控制数码管的显示情况和二极管的亮灭情况。当交通灯上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。当按下启动按钮K0并释放后,数码管显示将会从“57”开始倒计时,每隔一秒减1,此时东西方向开始一直亮绿灯,南北方向一直亮红灯,直到显示为“00”时,数码管将会从“03”开始倒计时,每隔一秒减1,此时东西方向每隔一秒黄灯就闪烁一次,南北方向亮一直红灯,直到显示为“00”时,
4、数码管将会从“27”开始倒计时,此时东西方向一直亮红灯,南北方向一直亮绿灯,直到显示为“00”时,数码管又将从“03”开始倒计时,此时东西方向一直亮红灯,南北方向每隔一秒黄灯就闪烁一次;当没有其他键按下时,交通灯将这样一直循环下去。当按下结束键K2并释放后,数码管将显示“P.”,东西南北方向无灯亮。当按下紧急键JINJI并释放后,数码管将显示“10”,并且每隔一秒就减1,东西南北方向全部红灯亮。单片机采用AT89S52,fosc=12MHZ。其按键功能如表1.1所示。表1.1 按键功能按键键名功能P1.0K0键启动键P1.2K2键结束键P1.1JINJI键紧急键1.3 设计总体方案介绍及工作原
5、理说明1.3.1 总体方案介绍该交通灯电路由单片机AT98S52、键盘接口电路、显示接口电路、发光二极管控制电路、时钟电路和复位电路构成,原理框图如图1.1所示。 图1 原理框图(1) 电源提供方面采用独立的稳压电源,此方案的优点是稳定可靠,且有各种成熟电路可供使用。(2) 显示方面采用数码管显示,用来显示有限符号和数码字符。(3) 键盘输入方面直接在I/O口线上接按键开关,因为设计时精简和优化了电路,所以剩余的口资源较多。此设计共用到了3个按键,分别为:K0、JINJI、K2。1.3.2 工作原理首先时钟电路产生单片机工作时所需要的时钟信号,这是单片机能够正常工作的前提,而单片机有无定时的基
6、础以及定多长的时间,这些还需要我们人为的确定。我是采用50ms延时中断程序用来定时,在我们的硬件电路中,按键的键功能程序在中断服务中,在正常情况下会不断运行主程序,当有键按下时,CPU去转去执行中断程序,而中断程序可以执行三种键功能:第一个是十秒倒计时紧急红灯亮;第二个是结束倒计时,显示P.;第三个是重新开始倒计时。当有键按下时,外部中断0口线就会变成低电平,通过键扫程序来具体判断到底是哪个键按下,CPU才会去执行中断里面的某个键功能。8个发光二极管是由P3口控制的,P3口与二极管之间串接一个限流电阻使二极管不易烧坏,采用送低电平有效。2 硬件系统设计2.1 硬件模块介绍本交通灯硬件模块主要由
7、显示模块,时钟模块,复位模块,键盘模块和指示灯模块五大模块构成。A 显示模块:本次课程设计中,采用的是八位数码管,显示原理跟单个LED的显示原理完全相同,在段控线和位控线都串接一个电阻,以提高其输出功率。B 时钟模块: 时钟电路用来产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。通过在芯片的外部XTAL1和XTAL2两个引脚跨接晶体振荡器和微调电容,形成反馈电路。C 复位模块:复位电路用于产生复位信号,通过RST引脚送入单片机,复位是单片机的初始操作,其主要功能是:为一些专用寄存器设置初始状态、
8、程序状态字PSW清0、程序计数器PC被赋值为0000H等,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需安装复位键以重新启动。RST引脚是复位信号的输入端,复位信号是高电平有效,完成复位操作共需要24个状态周期,复位结束后,单片机从地址0000H单元开始执行程序,SP为07H,其它寄存器大多数被置为00H,本设计使用频率为12MHz的晶振,所以复位信号持续时间应超过2s才能完成复位操作。D 键盘模块:编码键盘采用硬件方法产生键码。每按下一个键,键盘能自动生成键盘代码,键数较多,且具有去抖动功能。这种键盘使用方便,但硬件较复杂。非编码键盘仅提供按
9、键开关工作状态,其键码由软件确定,这种键盘键数较少,硬件简单,广泛应用于各种单片机应用系统。E 指示灯模块:本次课程设计采用P3口控制二极管的发光情况 具体设计如下:P3.0控制东西方向的绿灯 P3.1口控制东西方向的黄灯 P3.2控制东西方向的红灯 P3.3控制南北方向的绿灯 P3.4控制南北方向的黄灯 P3.5控制南北方向的红灯2.2 电路原理图 PCB图 元器件布局图见附录A2.3 元器件清单见附录B3 软件系统设计 3.1 单片机的使用资源情况AT89S52的P3口用来接八个发光二极管的阴极,控制其亮与灭,P0口和P2口外接由2个LED数码管(LED1、LED0)构成的显示器,用P0口
10、作LED的段码输出口(P0.0P0.7对应于LED的adp),P2口作LED的位控输出线(P1.1、P1.0分别对应于LED1、LED0),P2口外接三个个按键K0、JINJI、K2(分别对应于P1.0、P1.1、P1.2口)用于调整显示接口电路。41H46H单元存放显示在数码管上的初始值7FH作为堆栈的栈底通用寄存器用来存放一些数值78H79H单元为显示缓冲区SFR寄存器中IE,TMOD,TCOD用来定时3.2 软件模块功能介绍主程序模块的主要任务是程序的初始化显示“P.”,当没任何键按下时,显示模块将一直不变,交通灯全部是熄灭的,当K0键按下并松开后开始倒计时,其中在时间显示的过程中判断是
11、否有JINJI和K2键按下,如果是K2按下,将显示“P.”,并且发光二极管全部熄灭,如果是JINJI按下,数码管将开始十秒倒计时,并且东西南北的红灯全部亮起来。显示模块包括送缓冲区模块,BCD码转换和送显示等,通过这些模块完成了显示的功能,并能按照我们所熟悉的时钟时间进行显示。3.3 程序流程图3.3.1 主程序流程图 主程序的主要功能是负责准备状态提示符“P.”显示,等待按键按下进入各键功能子程序完成各项功能 图2 主程序流程图3.3.2子程序流程图 图3 子程序流程图3.3.3应急通道程序流程图 图4 应急程序流程图3.3.4键扫程序流程图 图5 键扫程序流程图4 设计总结4.1 使用说明
12、本实验主要是利用单片机AT89S52、数码管和发光二极管组成,整个电路结构比较简单, 具体操作说明如下: 当交通灯上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。当按下启动按钮K1并释放后,数码管显示将会从“57”开始倒计时,每隔一秒减1,此时东西方向开始一直亮绿灯,南北方向一直亮红灯,直到显示为“00”时,数码管将会从“05”开始倒计时,每隔一秒减1,此时东西方向每隔一秒黄灯就闪烁一次,南北方向亮一直红灯,直到显示为“00”时,数码管将会从“27”开始倒计时,此时东西方向一直亮红灯,南北方向一直亮绿灯,直到显示为“00”时,数码管又将从“03”开始倒计时,此时东西方向一直亮红
13、灯,南北方向每隔一秒黄灯就闪烁一次;当没有其他键按下时,交通灯将这样一直循环下去。当按下结束键K2并释放后,数码管将显示“P.”,东西南北方向无灯亮。当按下紧急键JINJI并释放后,数码管将显示“10”,并且每隔一秒就减1,东西南北方向全部红灯亮,当没亮到显示“00”就有结束键按下时,就退出,执行该键的键功能,当显示到“00”时,就会自动退出中断继续完成主程序。4.2 仿真结果(1)上电时,数码管上的显示显示系统提示符“P.”进入准备工作状态,如图4.1所示。(图示LED灯从左到右依次是,主道干路上的黄灯、红灯、绿灯;次道干路上的黄灯、红灯、绿灯 图6 上电时的数码管显示(2)在正常情况下,L
14、ED循环说明:设LED灯从左至右前六个灯分别为:甲干道绿灯、黄灯、红灯;乙干道绿灯、黄灯、红灯(下面操作显示的各道路灯口皆按此设置)。交通灯上电后,8位数码管显示初始状态即最右边的一个数码管显示“P.”。按下左边第一个按键,交通灯进入运行状态,甲干道绿灯亮,乙干道红灯亮,并且同时数码管从60s开始倒计时;倒计时结束,甲干道绿灯灭,黄灯亮且闪烁,乙干道红红亮,数码管显示倒计时3S;此次计时结束,甲干道红灯亮,乙干道绿灯亮,同时数码管从30s开始倒计时;倒计时结束,乙干道绿灯灭,黄灯亮且闪烁,甲干道红灯亮,计时结束,一轮循环就此完成。如图4.2所示。 图7 倒计时60时显示(3)紧急情况时:按下左
15、边第二个键紧急键,交通灯启动紧急状态,甲、乙两干道红灯同时亮起,数码管显示10秒倒计时,倒计时结束后,交通灯系统回到启动紧急情况前的状态,恢复正常通行。如图4.3所示。 图8 紧急状态显示(4)结束按S7键灯全部灭掉,回到“P.”状态,如图4.4所示; 图9 回到初始状态显示4.3 误差分析交通灯在运行中存在一定的误差,误差产生有三种可能,首先是采用的计时方案是软件计时的,计时优势利用中断来实现。而你开启定时器和开启LED灯顺序上是有先后的,这个过程需时间的,所以就产生了一定的误差,当然这个误差是避免不了的,其次还有硬件系统也有一定的影响。第三,设计用到12MHz的晶振,计算是满20次为一秒钟
16、,但实际会慢很多。5 设计总结与体会5.1设计总结通过这次交通灯的课程设计,更加熟悉了在Proteus里面找元器件,画原理图。由PCB图到制作板子,再到编出来的程序在板子上实现功能。我学会了如何学习和使用一些以前没用过的软件。还学会了如何把课堂中学习到的知识运用到实践当中。在本次课程设计中不断翻开书本的找资料,上网查找资料。一遍又一遍的回顾以前在课堂上学习到的知识。通过这次课程设计,加强了我的动手、思考和解决问题的能力。书中的理论有点枯燥,但是,运用书中的知识去调试,那是一种无法比拟的成就感。这样更能激发我们对我们专业的兴趣,和对我们专业知识的理解和掌握,能激发我们对电子科研技术的钻研,增加设
17、计兴趣。虽然在本次的课程设计中遭遇了很多困难,比如像一开始的时候交通灯的Proteus原理图有些地方不会画,程序有些地方不会编写,在Keil里调试好了程序但是载入进单片机中运行出现问题等。但是通过和同学的交流,以及上网查找相关资料慢慢摸索,也逐一解决了。5.2 教学建议跟随王韧老师一起学习了一个学期的单片机技术,我受益匪浅,不仅在学习上,学到了应该要如何更加深刻的去理解知识,更是明白了要把学到的知识运用到实际当中。而且也在做人和生活上,应该对自己多多自我鞭策,以免自己懒惰。经过这一学期的学习后,我觉得王韧老师有很多教学方法都是很好的,比如:在实验课上绝不马虎,为我们一一检查,纠正错误。上课的时
18、候也穿插着一些人生哲理,劳逸结合,不让我们听课感觉太累。想提出的建议是:希望老师在上课的时候能再详细点,因为我这个人比较笨,理解能力有点差,有时候我还在琢磨的时候老师已经讲完了,似懂非懂。结束语 在全国高等工科类院校中,已经普遍开设单片机及其相关课程,单片机成为电子系统中最普遍的应用手段。除了单独开设单片机课程以外,许多实践性教学环节,如课程设计,毕业设计,单片机系统都是具有广泛的应用手段。因此本次课程设计对我们的学习乃至就业都有重要的意义。课程设计是对自身知识的巩固和加深,使知识和实践相结合是我们学习的最终目的。此次设计是我们学习单片机历史上的第一次,虽然设计内容是单片机领域内最简单的项目,
19、但对于我们来说也同样是一种挑战。在这次课程设计中我翻阅了大量的相关资料,并的到了同学和老师的细心指导和耐心帮助。但是由于这次是初次进行单片机课程设计,出了许多的差错和遗漏。这说明我在这方面还存在着很多不足,知识不够完备和系统,不能很好的把理论知识运用到实践当中去,在以后的学习中还有待提高。希望老师能在以后的学习和生活中对我多加指导,我会悉数改进。错误不能阻难我前进的脚步,反而我会努力去克服,争取下次取得更大的进步。致谢 感谢我的指导老师王韧教授,他严肃的科学态度,严谨的治学精神,精益求精的工作作风,幽默乐观的人生态度都深深地感染和激励着我。不管是在学习上还是在生活中。从一开始的板子的制作到实验
20、的审查再到课程设计王老师都始终给予我细心的指导和不懈的支持。在此谨向王老师致以诚挚的谢意和崇高的敬意。 在此,我还要感谢我的室友徐彪,正是由于你的帮助和支持,我才能克服一个一个的困难和疑惑,直至课程设计的顺利完成。参考文献1马忠梅,单片机的C语言Windows环境编程宝典M, 北京:北京航空航天大学出版社,2003.6 2李光飞,单片机C程序设计指导M,北京:北京航空航天大学出版社,2003.01 3李光飞,单片机课程设计实例指导M,北京:北京航空航天大学出版社,2004.94李广弟.朱月秀.冷祖祁.单片机基础M,北京:北京航空航天大学出版社.2007.15高洪志.MCS-51单片机原理及应用
21、技术教程M,北京:人民邮电出版社,2009.46周润景,张丽娜,丁莉.基于PROTEUS的电路及单片机设计与仿真M,北京:北京航空航天大学出版社,2010.01附录A电路原理图:PCB图 正面反面元器件布局图附录B元器件清单名称数量参数单片机1个AT89S52共阳数码管2个4位一体底座3个晶振1个12MHz发光二极管9个单排插1个40PIN蜂鸣器1个按键9个排阻2个10K下载口座子1个十芯温度传感器1个18B20六脚按键开关1个USB电源线加接口1个电阻1个200电阻1个4.7K电阻3个1K电阻24个470电解电容1个22f瓷片电容2个33p短路帽3个PCB板子1块电源白色插座1个杜邦线1个铜
22、柱 (带螺母)4个附录 C;项目名称:十字路口交通灯的设计;设计者:邓斌;设计日期:2011年12月27日 ;*;堆栈栈底7FH;*;LED数码管显示设定:;P0.7-P0.0段控线,接LED的显示段i,h,g,f,e,d,c,b,a;P2.7-P2.0位控线,从左至右(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0);显示缓冲区设定从左至右依次为7FH,7EH,7DH,7CH,7BH,7AH,79H,78H (LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0);*;8个独立式键盘设定:;8个按键S1到S8分别依次接P1.0-P1.
23、7口;*;子程序:;DIR:数码管显示子程序;KEY:键功能程序;DADD1:减一子程序;ZHUT1:主道绿灯亮,次道红灯亮子程序;ZHUT2:主道黄灯亮,次道红灯亮子程序;ZHUT3:主道红灯亮,次道绿灯亮子程序;ZHUT4:主道红灯亮,次道黄灯亮子程序;*;常数表格;TAB(共阳数码管字型代码表);*;中断服务程序:;TTC0:1ms延时程序;TTC1: 10s计时程序 系统起始程序区 ORG 0000H LJMP MAIN ORG 000BH LJMP TTC0 ORG 001BH LJMP TTC1 ORG 0030H;*;系统监控程序区 MAIN:CLR TR0 CLR TR1 MO
24、V P3,#0FFH MOV PSW,#00H ;初始化 MOV SP,#7FH MOV TMOD,#11H MOV TH0,#3CH MOV TL0,#0B0H MOV TH1,#3CH MOV TL1,#0B0H SETB EA SETB ET0 SETB ET1 MOV 78H,#11H MOV 79H,#10H MOV 7AH,#10H MOV 7BH,#10H MOV 7CH,#10H MOV 7DH,#10H MOV 7EH,#10H MOV 7FH,#10H PP:LCALL DIRSTART:LCALL KEY JB 20H.0,K0 ;按下K0,启动计时 JB 20H.2,M
25、AIN ;运行过程中,按下K2,则结束 LJMP PP K0:SETB TR0 MOV 21H,#00H SETB 21H.1 MOV 78H,#07H MOV 79H,#05H ;计时60秒 MOV R1,#20 MOV R2,#00H KK0:JB 20H.1, LOOPX0 ;按下JINJI键,则运行紧急程序 JB 20H.2, MAIN LCALL KEY LJMP KH0LOOPX0:CLR 20H.1 LCALL JINJI KH0:LCALL DIR LJMP KK0 TTC0:PUSH PSW CLR RS0 CLR RS1 MOV TH0,#3CH MOV TL0,#0B0H
26、 DJNZ R1,KL0 ;50ms,循环20次,即1s MOV R1,#20 INC R2 MOV R0,#78H LCALL DADD1 KL0:JB 21H.1, ZHUT1 JB 21H.2, ZHUT2 JB 21H.3, ZHUT3 JB 21H.4, ZHUT4ZHUT1:CJNE R2,#60,LOOP11 ;不等,则甲绿乙红 MOV R2,#00H CLR 21H.1 SETB 21H.2 ;相等,则亮黄灯 MOV 78H,#03H MOV 79H,#00H LJMP ZHUT2LOOP11:MOV P3,#0DEH ;甲通道亮绿灯,乙通道亮红灯LJMP LAST10ZHUT
27、2: CJNE R2,#03H,LOOP12 MOV R2,#00H CLR 21H.2 SETB 21H.3 MOV 78H,#07H MOV 79H,#02H LJMP ZHUT3LOOP12:CJNE R1,#10,FH1 MOV P3,#0DDH ;红灯均亮LJMP LAST10 FH1:MOV P3,#0DFH LJMP LAST10ZHUT3:CJNE R2,#30,LOOP13MOV R2,#00HCLR 21H.3SETB 21H.4 MOV 78H,#03HMOV 79H,#00HLJMP ZHUT4LOOP13:MOV P3,#0F3H ; 甲通道亮红灯,乙通道亮绿灯LJM
28、P LAST10ZHUT4:CJNE R2,#03H,LOOP14MOV R2,#00HCLR 21H.4SETB 21H.1MOV 78H,#07HMOV 79H,#05HLJMP ZHUT1LOOP14:CJNE R1,#10,FH2 ;黄灯闪烁MOV P3,#0FBH LJMP LAST10 FH2:MOV P3,#0EBHLAST10:POP PSWRETI;* JINJI:PUSH TH0 PUSH TL0PUSH PSWCLR RS0SETB RS1MOV R5,78H ;送R5保存MOV R6,79HMOV TH1,#3CHMOV TL1,#0B0HMOV R1,#20MOV R
29、2,#00HMOV 78H,#00MOV 79H,#01H CLR TR0SETB TR1 GHK:LCALL DIRJB 21H.7,LAST1LCALL KEYJB 20H.2,KXLJMP KY KX:LJMP MAINKY:CLR 21H.7LJMP GHKLAST1:CLR TR1MOV 78H,R5 ;送R5恢复MOV 79H,R6SETB TR0POP PSWPOP TL0 POP TH0 RET TTC1:PUSH PSW CLR RS0 SETB RS1 CLR 21H.7 MOV TH1,#3CH MOV TL1,#0B0H DJNZ R1,LOP1 MOV R1,#20
30、INC R2 MOV R0,#78H LCALL DADD1 CJNE R2,#10,LOP1 SETB 21H.7 LOP1:MOV P3,#0DBH POP PSW RETI ;*;数码管显示子程序DIR:PUSH DPH PUSH DPL PUSH ACC PUSH PSW SETB RS0 CLR RS1 MOV R0,#78H ;建立显示缓冲区首址 MOV R5,#0FEH ;从右边开始显示 MOV A, R5 ;位控码初值LD0:MOV DPTR,#TABLE MOV A,R0 MOVC A,A+DPTR MOV P0,A MOV A,R5 MOV P2,A LCALL DELAY
31、 INC R0 ;转向下一缓冲单元 MOV A,R5 ;位控码 JNB ACC.7,LD1 ;判断是否到最高位,到,则转移 RL A ;不到,显示左移一位 MOV R5,A ;位控码送R5保存 LJMP LD0 ;继续扫描 LD1:POP PSW POP ACC ;恢复现场 POP DPL POP DPH RETKEY:LCALL KEYCHULI ;键扫程序 JZ EXIT CLR TR0 LCALL DIR LCALL KEYCHULI JZ EXIT MOV B,20HKEYSF:LCALL KEYCHULI JZ KEY1 LCALL DIR LJMP KEYSFKEY1:MOV 20
32、H,BEXIT:RET KEYCHULI:MOV P1,#0FFHMOV A,P1 CPL A ANL A,#0FH MOV 20H,A RET DELAY:MOV R7,#01H MOV R6,#0F0H KF0:DJNZ R6,KF0 MOV R6,#0FFH DJNZ R7,KF0 RET;*;减一子程序:DADD1:PUSH ACC MOV A,R0 DEC A CJNE A,#0FFH,LGH0 LJMP LGH1LGH0:MOV R0,A LJMP LAST0LGH1:MOV A,#09H MOV R0,A INC R0 MOV A,R0 DEC A MOV R0,ALAST0: POP ACC RETTABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H ; 0-6 DB 0F8H,80H,90H,88H,83H,0C6H,0A1H ; 7-D DB 86H,8EH,0FFH,0CH ; E-F,灭,P. END26