资源描述
成绩 南京工程学院课程设计说明书(论文)题 目 交通灯管理系统 课 程 名 称 单片机及其接口技术 院 系 电力工程学院 专 业 电气工程及其自动化 班 级 电气 081 学 生 姓 名 学 号 设 计 地 点 工程实践中心 8216 指 导 教 师 设计起止时间: 2011 年 6 月 20 日至 2011 年 6 月 24 日 目录课程设计任务书 1第一章 单片机简介 61.1 MSC简介 1.2 MSC引脚功能 1.3简介 第二章 总体设计方案2.任务要求2.总体设计 2. 硬件连接1第四章 软件设计 13.流程图3.主程序设计13.子程序设计13.4 中断设计15第四章 运行结果14.1 状态14.2 状态14.状态184.状态194.中断2第五章 心得体会 21- 22 -南京工程学院课程设计任务书题目 交通灯管理系统 课 程 名 称 单片机及其接口技术 院(系、部、中心) 电力工程学院 专 业 电气工程及其自动化 班 级 电气 081 起 止 日 期 2011.6.202010.6.24 指 导 教 师 王 曼 1课程设计应达到的目的本课程设计是在学生学习完单片机及其接口技术课程后进行的一次全面的综合练习。通过本次课程设计进一步巩固和加深对单片机课程的基本知识的理解,掌握使用单片机的基本技能,了解有关单片机应用系统开发的过程与方法,提高利用单片机软硬件解决实际问题的能力。2课程设计题目及要求本课题要求使用51单片机及可编程并行接口芯片Intel8255A实现一个模拟交通灯系统。十字路口东西方向和南北方向各安装一组交通灯,其中东西方向红、绿、黄灯对应试验仪G6区发光二极管3、1、2;南北方向红、绿、黄灯对应试验箱G6区发光二极管4、5、6;并且双方都有对应的倒计时LED。要求:1、 交通信号灯的变化规律为:状态0:东西向绿灯亮,南北向红灯亮;延时20秒进入状态1状态1:东西向黄灯亮,南北向红灯亮;延时5秒进入状态2状态2:东西向红灯亮,南北向绿灯亮;延时20秒进入状态3状态3:东西向红灯亮,南北向黄灯亮;延时5秒进入状态0;如此循环往复2、 紧急通道功能,按下紧急按钮,各路口灯全亮,延时5秒,以供急救车通过。急救车通过后,红绿灯恢复为紧急按钮按下之的前状态继续运行。3、 各状态的延时都有倒计时LED进行计时显示。说明:1、 实验箱MCU为AT89S51,主频为11.0592Hz;2、 A3区A0、A1是地址锁存器对应P0.0、P0.1输出引脚;A3区片选信号线地址范围:片选地址范围片选地址范围CS10F000H0FFFFHCS50B000H0BFFFHCS20E000H0EFFFHCS60A000H0AFFFHCS30D000H0DFFFHCS709000H09FFFHCS40C000H0CFFFHCS808000H08FFFH3、 实验箱硬件电路连接图如下:G6区:发光管电路 G5区:键盘&LED(LED为共阴极数码管)A:按键的列线B:数码管段码C:数码管选择脚D:按键的行线3课程设计任务及工作量的要求包括课程设计计算说明书、图纸、实物样品等要求按照课程设计说明书的格式规范撰写课程设计说明书,正文部分包括:(1)功能描述:对系统要实现的功能进行简明扼要的描述。(2)硬件设计:画系统硬件结构图,并简单描述。(3)软件设计:将系统划分功能模块,并用框图表示各功能模块之间的衔接关系;详细说明各软件模块的实现过程,流程图等。(4)运行效果:说明系统的运行效果(附运行界面图片、系统运行结果照片)。(5)心得体会:谈谈自己在课程设计过程中的心得体会、存在哪些不足以及预期的解决办法。说明:(1)课程设计说明书用A4纸统一打印,按电力学院课程设计说明书规范统一要求书写并装订。(2)课程设计的程序上交,文件夹名称为学生姓名及学号的组合。(3)答辩:未经指导教师许可或无故不到者,缺勤率达50%的学生不能参加答辩。 答辩时,设计者在阐述自己的设计过程和结果,突出设计中遇到的主要问题和解决方法,回答教师提问。4主要参考文献1、 胡汉才.单片机原理及其接口技术.北京:清华大学出版社,20042、 蔡明文,冯先成.单片机课程设计.华中科技大学出版社,20073、 张毅刚.单片机原理及应用M.北京:高等教育出版社,20045课程设计进度安排起 止 日 期工 作 内 容6月20日21日6月22 日23日6月24日需求分析,系统总体设计系统软、硬件调试验收考核6成绩考核办法课程设计成绩的组成: 课程总评成绩分项比例表工作表现设计成果考核测评30%40%30%课程设计成绩评定需综合考虑以下因素:(1)工作表现:独立工作能力及设计过程的表现。占总成绩的30%。(2)设计成果:设计说明书(计算书、论文)、图纸、程序、作品等的质量。占总成绩的40%。(3)考核测评:课程设计结束前,指导教师应采用考试或答辩等形式对所指导的学生进行测评。如采用答辩形式,需填写课程设计答辩记录,测评成绩占总成绩的30%。(4)有创新的设计可以根据情况适当加分。教研室审查意见:教研室主任签字: 年 月 日院(系、部、中心)意见:主管领导签字: 年 月 日第一章 单片机简介1.1 MSC-51芯片简介:8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 图1-1 8051内部总线分配图1.中央处理器(CPU):中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。2.数据存储器(RAM)8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。3.程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。4.定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。5.并行输入输出(I/O)口:8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。6.全双工串行口:8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。7.中断系统8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。8.时钟电路8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。图1-2 MCS-51系列单片机的内部结构示意图1.2 MCS-51的引脚说明 MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,组8位共32个I/O口,中断口线与P3口线复用。 图1-3 MCS-51单片机引脚图1.3 8255芯片简介 8255可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7PA0、PB7PB0和PC7PC0。其内部还有一个控制寄存器,即控制口。通常A口、B口作为输入输出的数据端口。C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。它们分别与端口A配合使用,可以用作控制信号输出或作为状态信号输入。8255可编程并行接口芯片方式控制字格式说明:8255有两种控制命令字;一个是方式选择控制字;另一个是C口按位置位复位控制字。其中C口按位置位复位控制字方式使用较为繁难,说明也较冗长,故在此不作叙述。方式控制字格式说明如表1: D7D6D5D4D3D2D1D0 D7:定工作方式标志,1有效。 D6、D5:A口方式选择 0 0 方式0 0 1 方式1 1 方式2 D4:A口功能 (1=输入,0=输出) D3:C口高4位功能 (1=输入,0=输出) D2:B口方式选择 (0=方式0,1=方式1) D1:B口功能 (1=输入,0=输出)D0:C口低4位功能 (1=输入,0=输出) 8255可编程并行接口芯片工作方式说明:方式0:基本输入输出方式。适用于三个端口中的任何一个。每一个端口输出。输出可被锁存,输入不能锁存。 方式1:选通输入输出方式。这时A口或B口的8位外设线用作输入或输出,C口的4条线中三条用作数据传输的联络信号和中断请求信号。 方式2 :双向总线方式。只有A口具备双向总线方式,8位外设线用作输入或输出,此时C口的5条线用作通讯联络信号和中断请求信号。第二章 总体设计方案2.1 任务要求 本课题要求使用51单片机及可编程并行接口芯片Intel8255A实现一个模拟交通灯系统。十字路口东西方向和南北方向各安装一组交通灯,其中东西方向红、绿、黄灯对应试验仪G6区发光二极管3、1、2;南北方向红、绿、黄灯对应试验箱G6区发光二极管4、5、6;并且双方都有对应的倒计时LED。要求:4、 交通信号灯的变化规律为:状态0:东西向绿灯亮,南北向红灯亮;延时20秒进入状态1状态1:东西向黄灯亮,南北向红灯亮;延时5秒进入状态2状态2:东西向红灯亮,南北向绿灯亮;延时20秒进入状态3状态3:东西向红灯亮,南北向黄灯亮;延时5秒进入状态0;如此循环往复5、 紧急通道功能,按下紧急按钮,各路口灯全亮,延时5秒,以供急救车通过。急救车通过后,红绿灯恢复为紧急按钮按下之的前状态继续运行。6、 各状态的延时都有倒计时LED进行计时显示。 图2-1 模拟现场图2.2 总体设计根据设计的要求,由于东西南北都要显示倒计时,数码管要用四个,对于8255只有A,B和C三个口,所以采用动态输出以节省出控制口,用A和B口来控制LED数码显示,用C口来控制发光二极管,简单硬件图如下:A,B口ntel 8255A C口 单片机数码管输出二极管输出图2-1系统硬件框图2.3硬件连接图2-2 交通灯硬件连线图第三章 软件设计 3.1程序流程图 外部中断开始状态0状态1状态2状态3控制数码动态输出 调用 调用 调用 调用 调用 状态0状态0状态0 图2-3 交通灯程序设计流程图 3.2主程序设计 主程序为四种状态的循环,用R7控制每种状态的显示时间,用PC口输出二极管,定义各个变量的意义,对相关变量赋值,同时进行子程序的调用来显示数码管。 dongge data 40H;东西方向数码管显示个位 dongshi data 41H;东西方向数码管显示十位 nange data 42H;南北方向数码管显示个位 nanshi data 43H;南北 方向数码管显示十位 deng data 44H;方向灯的数据 CX DATA 45H PA_8255 EQU 0FFFCH PB_8255 EQU 0FFFDH PC_8255 EQU 0FFFEH CON_8255 EQU 0FFFFH ORG 0000H AJMP MAIN ORG 0013H AJMP INT_1 ORG 0025H MAIN: SETB EA SETB EX1 CLR IT1 MOV SP,#60H MOV DPTR,#CON_8255 MOV A,#80H MOVX DPTR,A MOV dongshi,#2 MOV dongge,#0 MOV nanshi,#2 MOV nange,#5 MOV R7,#20;控制状态转换 zhuangtai0:MOV deng,#0F6H;状态0 MOV A,deng MOV DPTR,#PC_8255 MOVX DPTR,A LCALL jianyi LCALL shumashuchu DJNZ R7,zhuangtai0 MOV dongshi,#0 MOV dongge,#5 MOV nanshi,#0 MOV nange,#5 MOV R7,#5 zhuangtai1:MOV deng,#0F5H;状态1 MOV A,deng MOV DPTR,#PC_8255 MOVX DPTR,A LCALL jianyi LCALL shumashuchu DJNZ R7,zhuangtai1 MOV dongshi,#2 MOV dongge,#5 MOV nanshi,#2 MOV nange,#0 MOV R7,#20 zhuangtai2:MOV deng,#0EBH;状态2 MOV A,deng MOV DPTR,#PC_8255 MOVX DPTR,A LCALL jianyi LCALL shumashuchu DJNZ R7,zhuangtai2 MOV dongshi,#0 MOV dongge,#5 MOV nanshi,#0 MOV nange,#5 MOV R7,#5 zhuangtai3:MOV deng,#0DBH;状态3 MOV A,deng MOV DPTR,#PC_8255 MOVX DPTR,A LCALL jianyi LCALL shumashuchu DJNZ R7,zhuangtai3 LJMP MAIN 3.3子程序的设计 1.减一程序 主程序设置好了各个变量的数值,各个状态的转换,下面到子程序是实现对数码管的显示和倒计时。首把东西南北四个数码管的显示数据放到50H开始的地址里,然后对东西和南北的组合数据进行减1操作,这样每次调用即把数据存起来以便数码输出,又实现每调用一次就减一的操作,实现倒计时,此功能程序命名jianyi,如下所示: jianyi:MOV A,dongshi MOV 50H,A MOV A,dongge MOV 51H,A JNZ donggewei MOV dongge,#0AH MOV A,dongshi DEC A MOV dongshi,A donggewei: DEC dongge MOV A,nanshi MOV 52H,A MOV A,nange MOV 53H,A JNZ nangewei MOV nange,#0AH MOV A,nanshi DEC A MOV nanshi,A nangewei:DEC nange MOV R2,#4 MOV R0,#50H;转换成数码管所对应的数字字表 zhuanhuan:MOV DPTR,#TABLE1 MOV A,R0 MOVC A,A+DPTR MOV R0,A INC R0 DJNZ R2,zhuanhuan RET2.对数码管输出程序 前面减一操作已经把未减前的数据放到了50H开始的地址里了,现在就是要把他们取出来输出,由于是动态输出,所以用A口和B口来配合控制,A口对数码管送数据,B口来控制位选,同时加上延时,就可以搞定了。程序如下:shumashuchu: MOV R4,#60;R4用来控制1s输出 shuma: CLR A MOV R2,#4 MOV A,#0FEH MOV R0,#50H Xunhuan :MOV DPTR,#PB_8255 MOVX DPTR,A RL A MOV R1,A MOV A,R0 MOV DPTR,#PA_8255 MOVX DPTR,A INC R0 MOV A,R1 MOV R6,#10 yanzi:MOV R3,#100;延时16ms LOOP:NOP NOP NOP DJNZ R3,LOOP DJNZ R6,yanzi DJNZ R2,xunhuan DJNZ R4,shuma RET3中断程序 采用外部1中断,因为用到子程序,而主程序也要用到,所以对子程序的变量压栈其他思想和主程序想同。 INT_1: PUSH 50H PUSH 51H PUSH 52H PUSH 53H PUSH dongge PUSH dongshi PUSH nange PUSH nanshi PUSH deng PUSH DPL PUSH DPH PUSH ACC MOV 70H,R0 MOV 71H,R1 MOV 72H,R3 MOV 74H,R4 MOV 75H,R6 MOV A,#0C0H MOV DPTR,#PC_8255 MOVX DPTR,A MOV dongge,#5 mov dongshi,#0 mov nange,#5 mov nanshi,#0 mov CX,#5 wumiao: lcall jianyi LCALL shumashuchu DJNZ CX,wumiao MOV DPTR,#PC_8255 MOVX DPTR,A POP ACC POP DPH POP DPL POP deng POP nanshi POP nange POP dongshi POP dongge POP 53H POP 52H POP 51H POP 50H MOV R0,70H MOV R1,71H MOV R2,72H MOV R3,73H MOV R4,74H MOV R6,75H RETI第四章 运行结果4.1 状态0图4-1 状态0数码管显示图4-2 状态0二极管显示4.1 状态1图4-3 状态1数码管显示 图4-4 状态1二极管显示4.2状态2 图4-5状态2数码管显示图4-6状态2二极管显示43 状态3图4-7状态3数码管显示图4-8 状态3二极管显示4.4紧急状态: 图4-9 紧急状态数码管显示 图4-10 紧急状态二极管显示第五章 心得体会在刚拿到课程设计任务书时,确实觉得有点犯难,因为这种综合硬件和软件的设计对于我们刚学了基础知识对硬件还不是太熟,有点不知从哪下手,通过查资料,翻课本,对各个地方知识的复习,同学的指导,才明白了硬件的控制原理和控制方法,才有了程序设计的初步思路。就像数码管的动态输出如何控制,一开始没认真看书,不是太清晰,所以先进行了主程序的编写,但感觉非常费劲,思路不是那么清晰,最后和同学讨论,最后在看书才彻底明白了,位选和段选如何去控制,同时思路便清晰了,用了两个小时把程序打了出来,但运行出现了二十几个错误,最后改过来后,程序还是运行不出来,然后对程序进行分析,一句一句的对,终于感觉不该有什么差错了,但还是没有结果,让同学指导才知道,对8255的地址弄错了,因为接的CS1,因该是0F开始,但以前用的时候是07开始,没注意当时的接线,这才知道任务书上给片选干嘛的。运行后,二极管对,但数码管是乱码,都说是译码译错了,可我程序细细查了两遍,不可能译错,然后就到处找问题,最后发现A口输出线与数码管高位和低位反了,找了两个小时,才找到,终于运行出来了,然后对中断进行试运行,又有问题了,中断过程对,但返回时,数码管有一段时间的乱码,起初时,只对所用到的数据进行了压栈,不知道哪个地方出了问题,找同学也找不出问题,调了一个下午,发现只要调用数码输出的子程序就会出现乱码,子程序没问题,也不知道哪的问题,回宿舍,看书后,对单片机的片内的各个地址用处都看了一遍分析原因,最后看到压栈,终于明白了,因为中断前,主函数频繁的调用数码输出子程序,而且他占用的时间最多,到中断后,还调用数码输出子程序,由于没有对数码输出子程序里的R等一些反复用的变量进行压栈,所以返回后,里面的数据就被打乱了,所以返回后,程序不能按原来的状态运行,而出现各种不确定的运行。这一周的课程设计确实让我对单片机的认识更加深刻,培养了我综合运用所学知识,发现,提出,分析和解决实际问题,锻炼了我的实践能力,非常有意义。
展开阅读全文