




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河北建筑工程学院课程设计报告书课程名称: 交通信号灯模拟控制系统 学 院: 电气工程学院 专 业: 电气工程及其自动化 班 级: 学 号: 学生姓名: 指导教师: 职 称: 讲师 2014年06月20日目录一、题目2二、课程设计的性质和目的2三、设计任务2四、设计方案2五、元件清单41.AT89C52单片机42.LED数码管53.发光二级管6六、硬件电路图61.单片机主电路72.交通灯接口电路73.LED数码管显示电路84.键盘接口电路8七、软件设计91.程序流程图102.主要功能模块10八、主要问题18九、心得体会19附录19单片机课程设计任务书一、题 目:交通信号灯模拟控制系统设计二、课程设计的性质和目的: 本课程设计的主要目的是通过对电子技术及单片机原理的学习,综合掌握电子电路综合设计的过程,设计要求和具体的设计方法。通过设计更好的复习、理解模拟电子、数字电子和单片机等课程内容,使得理论和实际相结合,加强学生的动手能力以及查阅相关资料解决实际问题的能力,培养学生从事设计工作的整体观念。三、设计任务:1、完成交通灯的变化规律,即一个十字路口为东西向和南北向,四个路口均有红黄绿三灯和两个LED数码显示管。交通灯上电以后进入初始状态即东西红灯,南北红灯。5s后转状态1:南北绿灯亮通车,东西红灯亮,禁止通行,持续30s;30s后转状态2:南北绿灯灭转黄灯闪亮,延时5秒,东西仍然红灯;5s后转状态3:东西绿灯亮通车,南北转红灯,持续30s;30s后转状态4:东西绿灯灭转亮黄闪灯,延时5秒,南北仍然红灯。最后循环至状态1。2、用8个LED数码管(各个方向均有两个LED数码管,分别表示个位和十位),显示倒计时。倒计时用于提醒驾驶员或行人信号灯发生改变的时间,以便他们在“停止”和“通行”两者作出合适的选择。3、在紧急状态下,通过K1键手动设置,将所有路口的灯变为红灯;再次按下此键后进入状态1,然后依次循环。四、设计方案及原理:1.方案一、直接进行片选和驱动LED数码显示的交通灯系统AT89C51单片机时钟电路LED数码显示复位电路红绿灯电路按键电路 该方案直接采用单片机的I/O口对LED数码管进行数字显示和片选的驱动。时钟电路和复位电路为单片机提供正常的工作环境。按键电路为在紧急情况下的应急处理系统,作用是使东西南北的等变为红灯。红绿灯电路由单片机I/O口直接驱动。2.方案二、采用74HC573锁存器的交通灯系统AT89C51单片机时钟电路74HC573锁存器LED数码显示复位电路红绿灯电路按键电路该方案采用74HC573锁存器控制数码管显示,使用动态扫描方法,控制数码管位选和段选的通断来使数码管依次显示相应数值;交通灯则可通过单片机的I/O口来直接控制其关断;按键可通过对外部中断标志位的查询来控制紧急情况的相应动作。3.方案比较:方案一直接用单片机的I/O口进行LED数码管字位驱动,使用的I/O口比较多,但是成本较低。方案二采用了74HC573锁存器,理论上为单片机的使用节省了I/O口,但是由于使用了一个锁存器,所以在成本上增加了花销。通过比较两种方案,对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的,所以只要用两组就行了,因此,采用单片机内部的I/O口上的P1口中的6个引脚即可来控制6个信号灯,而且可以节省I/O口;而使用74HC573锁存器不仅增加了成本,不仅没起到什么太大的作用,而且在编程的时候也大大增加了编程的难度,电路也相对复杂了。所以综合考虑,采用方案一的设计。五、元件清单 AT89C51单片机 1个; 发光二极管(红绿黄) 各4个; 两位共阴极数码管 4个; 12MHz晶振 1个; 2K电阻 1个; 1K排阻 1个; 500排阻 1个; 30pF电容 2个; 22pF电解电容 1个; 按键 1个; 开关 1个; +5V电源 导线若干 1. AT89C51单片机 AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。现在AT89S51/52已经取代了AT89C51/52。外形及引脚排列如下图所示。 AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。2. LED数码管 LED数码管LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的2个8数码管字样了。如:显示一个“2”字,那么不同之分,也有0.5寸、1寸等不同的尺寸。小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。LED数码管分为共阴极和共阳极两种,本实验在硬件电路搭建的时候采用的是共阳极LED数码管,这样使用单片机容易驱动,而采用共阴极则不易驱动二极管。 a. 共阳极接法:把发光二极管的阳极连在一起构成公共阳极。使用时公共阳极接+5V。这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不亮。 b.共阴极接法:把发光二极管的阴极连在一起构成公共阴极。使用时公共阴极接地。这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不亮。 十进制数字形代码如下表: 十进制数字形代码表字型共阳极代码共阴极代码字型共阳极代码共阴极代码0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF8EH71H7F8H07H灭FFH00H880H7FH3.发光二级管 发光二级管它是半导体二极管的一种,可以把电能转化成光能;常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。不同的半导体材料中电子和空穴所处的能量状态不同。当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的光的波长越短。常用的是发红光、绿光或黄光的二极管。发光二极管和数码二极管一样分为共阴极和共阳极两种,本实验在硬件电路搭建的 时候采用的是共阳极发光二级管,这样使用单片机容易驱动,而采用共阴极则不易驱动二极管,有时候采用高电平驱动则会产生单片机电压过低而无法点亮二极管致使单片机烧毁的情况。6、 硬件电路图1.单片机主电路 a时钟振荡电路AT89C51是内部具有振荡电路的单片机,只需在18脚和19脚之间接上石英晶体,给单片机加工作所需直流电源,振荡器就开始振荡起来。振荡电路就为单片机工作提供了所需要的时钟脉冲信号,是单片机的内部电路、单片机的内部程序(若有)开始工作。振荡电路不工作,整个单片机电路都不能正常工作。AT89C51常外接6MHz、12MHz的石英晶体,18脚和19脚分别对地接了一个20pF的电容,目的是防止单片机自激。若从18脚输入外部时钟脉冲,则19脚接地。b复位电路复位电路就是在RST端(9脚)外接的一个电路,目的是使单片机上的电开始工作时,内部电路从初始状态开始工作,或者在工作中人为让单片机重新从初始状态开始工作。在时钟工作的情况下,只要复位引脚高电平保持在两个机器周期以上的时间,AT89C51便能完成系统重置的各项工作,使得内部特殊功能寄存器的内容均被设置成已知状态,并且从地址0000H处读入程序代码而执行程序。单片机最小系统电路如上图所示。2.交通灯接口电路交通灯接口电路交通灯接口电路如上图所示。硬件电路的发光二级管是共阳极的,采用低电平驱动点亮方式,而在软件中提供的交通灯模块是共阴极的,本汇编程序最初编写是根据硬件电路共阳极二极管采用低电平驱动编写而成,所以在软件仿真的时候需要加一个非门来将P0口输出的低电平变成高电平来驱动交通灯模块发光,经过实验得出其结果和硬件仿真的完全相同。由于是软件仿真,所以不会出现无法驱动的情况,真实情况下需要考虑其驱动情况。南北和东西的交通灯显示相同,所以本系统仅仅使用了六个I/O口来进行交通灯的控制。3.LED数码管显示电路LED数码管显示电路如上图所示。该电路采用P2口进行数码管的数字显示,用P0.6、P0.7口对数码管进行片选。软件程序仿真电路图结果如上图所示。4.键盘接口电路键盘接口电路键盘接口电路如右图所示。该电路比较简单,原理是先将P1.0口全部置1,然后在延迟代码段中加入检测P1口高低电平的代码,观察P1口是否变化,如果有变化则进入紧急情况的处理代码,在紧急情况处理代码中继续检测P1口状态,如果变回全部为1则跳到初始状态重新开始。由程序代码可得,该电路连至P1任意一口都是可以的。用单片机最小系统和单片机学习模板块搭建的交通等系统如下图所示用proteus绘制的整体电路图如下图整体电路七、软件设计1.程序流程图 程序流程图2.主要功能模块设置状态模块 该模块设置程序的状态初始值,分为初始状态,状态1和状态2,代码段主要如下:;设置初始状态;INIT:MOV 42H,#1 ;闪烁标志位 MOV R0,#0 ;R0为状态标志位 MOV SP,#60H ;设置堆栈指针 MOV DPTR,#TABLE ;将TABLE送DPTR MOV P2,#0FFH ;所有计数器片选置1 MOV R7,#0 ;计数器1十位 MOV R6,#5 ;计数器1个位 MOV R5,#60 ;循环次数 MOV R2,#0 ;计数器2十位 MOV R1,#5 ;计数器3个位 MOV P1,#0F6H ;红绿灯状态 LJMP SCAN ;跳计数器扫描段代码循环扫描模块 该模块主要功能为扫描数码管的显示计数器时间,以及显示红绿灯的状态。代码段主要如下:;扫描显示数码管和红绿灯;SCAN:MOV A,R7 ;将计数器十位送A MOVC A,A+DPTR ;取数据对应的码 MOV P0,A ;送P0口显示 CLR P2.7 ;选中第一个数码管显示 LCALL DELA ;延迟 SETB P2.7 ;取消选中的第一个数码管 MOV A,R6 ;计数器个位送A MOVC A,A+DPTR ;取计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.6 ;选中第二个数码管显示 LCALL DELA ;延迟 SETB P2.6 ;取消选中的第二个数码管 MOV A,R2 ;将计数器十位送A MOVC A,A+DPTR ;取计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.5 ;选中第三个数码管显示 LCALL DELA ;延迟 SETB P2.5 ;取消选中的第三个数码管 MOV A,R1 ;选中第四个数码管 MOVC A,A+DPTR ;去计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.4 ;选中第四个数码管显示 LCALL DELA ;延迟 SETB P2.4 ;取消选中的第四个数码管 DJNZ R5,SCAN ;循环扫描延迟代码模块 该模块提供延迟0.004167s的时间,用于四个数码管的循环扫描延时调用,以此来对计数器进行技术,代码主要如下:;延迟代码段;DELA:MOV R4,#10 ;给R4赋10DEL: MOV R3,#228 ;给R3赋228 DJNZ R3,$ ;减R3 DJNZ R4,DEL ;减R4,不为0则跳转DEL MOV A,P3 ;将P3口的状态赋给A CJNE A,#0FFH,WARNING ;若按键则跳转到紧急控制代码段 RET ;子程序返回紧急控制模块 该模块的功能是为紧急情况下的应急系统,通过K1键手动设置,将所有路口的等变为红灯,代码主要如下:;紧急控制代码段;WARNING:MOV P1,#0F6H ;将南北东西红灯点亮 MOV R7,#0 ;给R7赋0 MOV P2,#00H ;将数码管全部选中 MOV A,R7 ;将计数器十位送A MOVC A,A+DPTR ;取数据对应的码 MOV P0,A ;送P0口显示 MOV A,P3 ;将P3口的状态赋给A CJNE A,#0FFH,WARNING ;若按键则跳转到紧急控制代码段 LJMP INIT ;没有则跳转到初始状态重新开始3.总汇编程序如下: ORG 0030H AJMP INIT ORG 00H;设置初始状态;INIT:MOV 42H,#1 ;闪烁标志位 MOV R0,#0 ;R0为状态标志位 MOV SP,#60H ;设置堆栈指针 MOV DPTR,#TABLE ;将TABLE送DPTR MOV P2,#0FFH ;所有计数器片选置1 MOV R7,#0 ;计数器1十位 MOV R6,#5 ;计数器1个位 MOV R5,#60 ;循环次数 MOV R2,#0 ;计数器2十位 MOV R1,#5 ;计数器3个位 MOV P1,#0F6H ;红绿灯状态 LJMP SCAN ;跳计数器扫描段代码;设置状态1;STATE1:MOV P1,#0EEH ;红绿灯状态 MOV R0,#1 ;R0为状态标志位 MOV 40H,#1 ;判断闪烁位 MOV 41H,#1 ;判断闪烁位 MOV P2,#0FFH ;所有计数器片选置1 MOV R7,#3 ;计数器1十位 MOV R6,#5 ;计数器1个位 MOV R5,#60 ;循环次数 MOV R2,#3 ;计数器2十位 MOV R1,#0 ;计数器3个位 LJMP SCAN ;跳计数器扫描段代码;设置状态2;STATE2:MOV P1,#0F5H ;红绿灯状态 MOV 42H,#1 ;判断闪烁位 MOV R0,#2 ;R0为状态标志位 MOV P2,#0FFH ;所有计数器片选置1 MOV R7,#3 ;计数器1十位 MOV R6,#0 ;计数器1个位 MOV R5,#60 ;循环次数 MOV R2,#3 ;计数器2十位 MOV R1,#5 ;计数器2个位 LJMP SCAN ;跳计数器扫描段代码;扫描显示数码管和红绿灯;SCAN:MOV A,R7 ;将计数器十位送A MOVC A,A+DPTR ;取数据对应的码 MOV P0,A ;送P0口显示 CLR P2.7 ;选中第一个数码管显示 LCALL DELA ;延迟 SETB P2.7 ;取消选中的第一个数码管 MOV A,R6 ;计数器个位送A MOVC A,A+DPTR ;取计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.6 ;选中第二个数码管显示 LCALL DELA ;延迟 SETB P2.6 ;取消选中的第二个数码管 MOV A,R2 ;将计数器十位送A MOVC A,A+DPTR ;取计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.5 ;选中第三个数码管显示 LCALL DELA ;延迟 SETB P2.5 ;取消选中的第三个数码管 MOV A,R1 ;选中第四个数码管 MOVC A,A+DPTR ;去计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.4 ;选中第四个数码管显示 LCALL DELA ;延迟 SETB P2.4 ;取消选中的第四个数码管 DJNZ R5,SCAN ;循环扫描 MOV R5,#60 ;扫描一秒到 给R5送扫描下一秒时间 DEC R6 ;计数器1个位减1 DEC R1 ;计数器2个位减1 CJNE R1,#5,LP1 ;判断计数器1个位是否为5 SJMP LP2 ;若是则跳转LP2LP1: CJNE R6,#5,LOOP ;判断1、2个位是否为5,不是则跳转LOOP SJMP LP3 ;若是则跳转LP3LP2: CJNE R2,#0,LP3 ;计数器2个位是否为0 SJMP LP4 ;跳LP4LP3: CJNE R7,#0,LOOP ;判断1、2十位是否为0,不是则跳转LOOP SJMP LP4 ;跳LP4LP4: MOV R5,#60 ;若计数器为05,则开始闪烁 CJNE R0,#0,SET1 ;闪烁初始态为当前状态决定 LJMP SHINESCAN ;跳闪烁语句SET1:CJNE R0,#1,SET2 ;设置闪烁初始态-数码管10s和5s MOV R7,#1 MOV R6,#0 MOV R2,#0 MOV R1,#5 LJMP SHINESCAN ;跳转到闪烁段代码 SET2:CJNE R0,#2,SET3 ;设置闪烁初始态-数码管5s和10s MOV R7,#0 MOV R6,#5 MOV R2,#1 MOV R1,#0 LJMP SHINESCAN ;跳转到闪烁段代码SET3:NOP LJMP SHINESCAN ;跳转到闪烁段代码LOOP:CJNE R1,#0FFH,LOOP1 ;判断2个位是否减为0 MOV R1,#9 ;超出给2个位赋9 DEC R2 ;并且将2十位减1LOOP1:CJNE R6,#0FFH,LOOP2 ;判断1个位是否减为0 MOV R6,#9 ;超出给1个位赋9 DEC R7 ;并且将1十位减1LOOP2:CJNE R2,#0FFH,LOOP3 ;判断2十位是否减为0 MOV R2,#0 ;减为0则计数器2置0 MOV R1,#0 ;计数器2置0LOOP3:CJNE R7,#0FFH,MID ;判断计数器1十位是否为0 AJMP STATE1 ;为0则跳到状态1MID: LJMP SCAN ;不为0则跳SCAN继续扫描 ;闪烁代码-计数器1、2全亮状态;SHINESCAN:MOV A,41H ;41H内容送A CJNE A,#0,VV1 ;判断41H内容是否为0 CLR P1.5 ;是则东西黄灯开始闪烁VV1: MOV A,42H ;42H内容送A CJNE A,#0,TT1 ;判断42H内容是否为0 CLR P1.2 ;是则南北黄灯开始闪烁TT1: MOV A,R7 ;将计数器十位送A MOVC A,A+DPTR ;取数据对应的码 MOV P0,A ;送P0口显示 CLR P2.7 ;选中第一个数码管显示 LCALL DELA ;延迟 SETB P2.7 ;取消选中的第一个数码管 MOV A,R6 ;计数器个位送A MOVC A,A+DPTR ;取计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.6 ;选中第二个数码管显示 LCALL DELA ;延迟 SETB P2.6 ;取消选中的第二个数码管 MOV A,R2 ;将计数器十位送A MOVC A,A+DPTR ;取计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.5 ;选中第三个数码管显示 LCALL DELA ;延迟 SETB P2.5 ;取消选中的第三个数码管 MOV A,R1 ;选中第四个数码管 MOVC A,A+DPTR ;去计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.4 ;选中第四个数码管显示 LCALL DELA ;延迟 SETB P2.4 ;取消选中的第四个数码管 DEC R5 ;R5减1 CJNE R5,#30,SHINESCAN ;闪烁代码-计数器1亮;TAP: SETB P1.2 ;将东西黄灯灭掉 CJNE R0,#1,PP1 ;判断红绿灯状态是否为1 MOV A,41H ;将41H内容送A CJNE A,#0,TT ;判断41H是否为0 SETB P1.5 ;将南北黄灯灭掉TT: MOV A,R7 ;将计数器十位送A MOVC A,A+DPTR ;取数据对应的码 MOV P0,A ;送P0口显示 CLR P2.7 ;选中第一个数码管显示 LCALL DELA ;延迟 SETB P2.7 ;取消选中的第一个数码管 MOV A,R6 ;计数器个位送A MOVC A,A+DPTR ;取计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.6 ;选中第二个数码管显示 LCALL DELA ;延迟 SETB P2.6 ;取消选中的第二个数码管 MOV A,42H ;将42H的内容送A CJNE A,#1,QQ1 ;判断42H内容是否为1 MOV A,40H ;将40H的内容送A CJNE A,#1,PP1 ;判断40H的内容是否为1,不为1跳转PP1(不是1即计数器2闪烁) LCALL DELA ;若为1则开始延时 LCALL DELA DEC R5 ;R5减1 JMP TAP3 ;跳TAP3;闪烁代码-计数器2亮;PP1: SETB P1.5 ;将南北黄灯灭掉 MOV A,42H ;将42H内容送A CJNE A,#0,BB ;判断42H内容是否为0,不是则跳转BB SETB P1.2 ;为0则将东西黄灯灭掉BB: MOV A,R2 ;将计数器十位送A MOVC A,A+DPTR ;取计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.5 ;选中第三个数码管显示 LCALL DELA ;延迟 SETB P2.5 ;取消选中的第三个数码管 MOV A,R1 ;选中第四个数码管 MOVC A,A+DPTR ;去计数器个位对应的码 MOV P0,A ;送P0口显示 CLR P2.4 ;选中第四个数码管显示 LCALL DELA ;延迟 SETB P2.4 ;取消选中的第四个数码管 CJNE R0,#1,QQ ;判断是否为状态1 JMP QQ1 ;是则跳转QQ1QQ: MOV A,42H ;将42H内容送A CJNE A,#1,TT ;判断42H是否为1,不是则跳转TT(不是1则计数器1和2全亮) LCALL DELA ;是则延时 LCALL DELAQQ1: DEC R5 ;R5减1;判断状态代码段;TAP3:CJNE R5,#0,TAP ;判断是否为0,不是则继续扫描显示 MOV R5,#60 ;若为0(1S到)阅媳彬送R5 60继续扫描 DEC R6 ;并且将计数器1的个位 减1 CJNE R6,#0FFH,WW1 ;判断计数器1的个位是否减到了0,没有则跳转到WW1 CJNE R0,#2,XX ;如果减到了0,判断是否为状态2,不是则跳转到XX JMP AA1 ;如果是状态2,跳转到AA1XX: MOV R7,#0 ;不是状态2,给计数器赋值09 MOV R6,#9WW1: CJNE R6,#5,WW2 ;计数器1的个位是否为5,不是跳WW2 MOV 41H,#0 ;计数器1已减至5,则将0赋给41H MOV P1,#0DEH ;东西红灯, 南北黄灯WW2: CJNE R6,#0,AA1 ;计数器1个位是否为0,不是则跳AA1 CJNE R0,#2,AA ;是否在状态2,不是则转TAP1AA1: CJNE R6,#0FFH,TAP1 ;判断计数器1是否减为0,不是则跳转TAP1 MOV R7,#0 ;计数器1送固定值00 MOV R6,#0 MOV 42H,#0 ;想42H中送0 JMP TAP1 ;跳转TAP1 AA: MOV 41H,#1 ;给41H送1 LJMP STATE2 ;跳转STATE2状态2TAP1:DEC R1 ;计数器2个位减1 CJNE R1,#0FFH,WW ;判断计数器2是否减为0 CJNE R2,#1,WW3 ;判断计数器2十位是否为1,不是则跳转到WW3 MOV R2,#0 ;是则给计数器2赋值09 MOV R1,#9 SJMP TAP2 ;跳转TAP2WW3: MOV R2,#0 ;给计数器2赋值00 MOV R1,#0WW: CJNE R1,#0,ZZ ;判断计数器2个位是否为0,不是则跳转ZZ MOV R2,#0 ;给计数器2赋值00 MOV R1,#0 MOV 40H,#0 ;给40H赋值0 CJNE R0,#2,YY ;判断是否为状态2,不是则跳转YY MOV 42H,#1 ;是则将42H置1 LJMP STATE1 ;跳转状态1YY: NOP ;空指令ZZ: CJNE R1,#5,TAP2 ;判断计数器2个位是否为5,不是则跳转TAP2 MOV 42H,#0 ;是则将42H置0 MOV P1,#0F3H ;将东西黄灯,南北红灯亮TAP2:LJMP SHINESCAN ;跳转闪烁代码;延迟代码段;DELA:MOV R4,#10 ;给R4赋10DEL: MOV R3,#228 ;给R3赋228 DJNZ R3,$ ;减R3 DJNZ R4,DEL ;减R4,不为0则跳转DEL MOV A,P3 ;将P3口的状态赋给A CJNE A,#0FFH,WARNING ;若按键则跳转到紧急控制代码段 RET ;子程序返回;紧急控制代码段;WARNING:MOV P1,#0F6H ;将南北东西红灯点亮 MOV R7,#0 ;给R7赋0 MOV P2,#00H ;将数码管全部选中 MOV A,R7 ;将计数器十位送A MOVC A,A+DPTR ;取数据对应的码 MOV P0,A ;送P0口显示 MOV A,P3 ;将P3口的状态赋给A CJNE A,#0FFH,WARNING ;若按键则跳转到紧急控制代码段 LJMP INIT ;没有则跳转到初始状态重新开始 ;数码管代码对应表;TABLE:DB 0C0H,0F9H,0A4H,0B0H ;0 1 2 3 DB 99H,92H,82H,0F8H ;4 5 6 7 DB 80H,90H,88H,83H ;8 9 A B DB 0C6H,0A1H,86H,8EH ;C D E F END ;结束八、遇到的问题1.单片机的I/O口是否够用,不够用怎么办?够用,本系统中交通灯需要用掉12个I/O口,数码管显示信号及片选信号需要用到16个I/O口,应急系统按键电路需要用到1个I/O口,加起来一共29个,而单片机共有32个I/O口,所以对于本系统完全够用。考虑到南北方向和东西方向的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于HPLC技术精准测定胆固醇代谢酶CYP7A1活性的方法学构建与验证
- 住宅楼给排水系统设计方案
- 网球快速入门及训练技巧手册
- 临床医学专业职业发展规划与路径设计
- 高校毕业生求职简历优化技巧大全
- 移动应用产品用户行为分析报告
- 铝及铝合金表面处理技术详细介绍
- 医院门诊药品调配操作规程
- 初中化学碳元素氧化物考试复习题
- 2025年五月检验科考核试题含答案
- 配网全过程管理
- 立陶宛语儿童文学的语言特点论文
- 学生代表大会制度
- 民宿的内涵专题课件
- 高职高考数学复习第五章数列5-1数列课件
- 高一必修一英语单词默写表
- GB/T 40816.2-2024工业炉及相关工艺设备能量平衡测试及能效计算方法第2部分:钢加热炉
- 增值税发票清单模板
- 第10课《往事依依》教学课件+2024-2025学年统编版语文七年级上册
- 人教版六年级数学上册第一单元测试卷
- 2024年注册安全工程师生产技术押密试题及答案
评论
0/150
提交评论