交通灯控制系统软件源程序文本.doc_第1页
交通灯控制系统软件源程序文本.doc_第2页
交通灯控制系统软件源程序文本.doc_第3页
交通灯控制系统软件源程序文本.doc_第4页
交通灯控制系统软件源程序文本.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

时钟和交通灯控制系统软件设计技术文件(源程序文本);设计思路:硬件设计原理见原理图,设计思路略;系统软件设计思路如下。;分三个独立模块,主程序依次循环调用三个模块(显示模块、时间计算模块、键盘扫描与时间设置模块),;使用两个中断(内部定时器T0中断、外部中断INT1),在主程序循环调用三个模块的进程中嵌套调用各中断服务程序。;各模块之间通过相应的控制变量来建立联系,并确定分支运行的路径,控制变量全部由地址传值;模块之间传递的数据(特别是显示的数据:如计算结果、键盘修改或设置时间显示数据等,变化后的数据存入51H54H、;76H79H和7CH7FH字节单元,显示只从这些单元中取数据)由同一个地址传值。;定时0.05s,(216-X)*10-6=0.05,X=15536(3CB0H),加上执行中断服务程序花去的平均时间约222个时钟周期(相当于定;时脉冲19个)。因此,定时计数器的计数初值为15536+19=15555(3CC3H)。;#程序开始段,主程序和中断服务程序地址初始化RESET: ORG 0000H ;系统复位后,程序开始执行地址(主程序起始地址) LJMP MAINORG 000BH ;T0中断服务程序地址LJMP T00ORG 0013H ;INT1中断服务程序地址LJMP INT11;#主程序段ORG 100HMAIN: MOV PSW,#00H ;程序状态字清0,默认工作寄存器区0,此步可以不作(系统复位后自动清0)MOV R1,#7EH ;内部RAM单元个数,不含0区的R0和R1以及SFRMOV R0,#02H ;从0区的R3开始清0CLRAM: INC R0 ;清零内部RAMMOV R0,#00HDJNZ R1,CLRAMMOV SP,#10H ;工作寄存器区0和1区会使用,堆栈从2区开始MOV TMOD,#01H ;定时器T0初始化,定时模式,不受外部INT0(1)控制,计数器设置为方式1,16位计数器MOV TL0,#0C3H ;定时器/计数器低8位值,时钟频率12MHzMOV TH0,#3CH ;计数器高8位值MOV SCON,#00H ;串行口控制寄存器设置。工作于方式0(移位寄存器方式),禁止接收数据,中断清0 MOV 7FH,#0D0H ;时钟显示初始值:12:00,7FH字节单元存放LED1值0(分钟个位),P1(11010000,段选码和控制位选)MOV 7EH,#0E0H ;7EH字节单元存放LED2值0(分钟“十位”),P1(11100000,段选码和控制位选)MOV 7DH,#0C2H ;7DH字节单元存放LED3值2(小时“个位”),P1(11000010,段选码和控制位选)MOV 7CH,#0C1H ;7CH字节单元存放LED4值1(小时“十位”),P1(11000001,段选码和控制位选)MOV 50H,#00H ;50H存放时钟模式和交通灯模式下的秒钟数值MOV 7BH,#02H ;7BH字节单元存放时钟模式LED3控制位选参数,RXD(00000010,交通灯不亮)MOV 7AH,#01H ;7AH字节单元存放时钟模式LED4控制位选参数,RXD(00000001,交通灯不亮)MOV 79H,#0C6H ;79H存放第1组交通灯(绿1,红2)时间LED4显示位6,P1(11000110,段选码),值变化MOV 78H,#0C0H ;78H存放第1组交通灯(绿1,红2)时间LED3显示位0,P1(11000000,段选码) ,值变化MOV 77H,#0E6H ;77H存放第2组交通灯(绿2,红1)时间LED2显示位6,P1(11100110,段选码和控制码) ,值变化MOV 76H,#0D0H ;76H存放第2组交通灯(绿2,红1)时间LED1显示位0,P1(11010000,段选码和控制码) ,值变花MOV 75H,#32H ;75H存放第1组交通灯点亮(绿1,红2),LED3显示控制参数,RXD(00110010,控制位选)MOV 74H,#31H ;74H存放第1组交通灯点亮(绿1,红2),LED4显示控制参数,RXD(00110001,控制位选)MOV 73H,#05H ;第1组交通灯绿变红(2)时“黄1”闪(4),红绿灯息,LED4显示,RXD(00000101),下画线位变MOV 72H,#06H ;第1组交通灯绿变红(2)时“黄1”闪(4),红绿灯息,LED3显示,RXD(00000110),下画线位变MOV 51H,78H ;第1组交通灯时间显示中“个位”(LED3)初值,不变化MOV 52H,79H ;第1组交通灯时间显示中“十位”(LED4)初值,不变化MOV 53H,76H ;第2组交通灯时间显示中“个位”(LED1)初值,不变化MOV 54H,77H ;第2组交通灯时间显示中“十位”(LED2)初值,不变化MOV 71H,#8AH ;71H存放第2组交通灯点亮(绿2,红1),RXD(LED3:10001010,8AH,LED4:10001001,89H)MOV 70H,#42H ;第2组交通灯绿变红(2)时黄2闪(4),红绿灯息,RXD(LED3:01000010)下画线位变MOV 60H,#41H ;第2组交通灯绿变红(2)时黄2闪(4),红绿灯息,RXD(LED4:01000001),下画线位变MOV 6FH,#00H ;记录定时器中断的次数,每次读取后清0,初值为0,每增加1即增加0.5秒MOV 6EH,#00H ;记录定时器中断的次数,控制交通灯“黄”灯闪烁 CLR 0AH ;K2键,控制系统工作模式:0AH=0(工作于时钟模式,默认),0AH=1(工作于交通灯控制模式) CLR 0BH ;哪组交通灯显示控制参数:0BH=0(第1组交通灯显示),0BH=1(第2组交通灯显示) CLR 0CH ;交通灯“黄”灯是否“闪”:0CH=0(不闪),0CH=1(闪)CLR 0DH ;检验定时器是否中断,0DH=1(中断),0DH=0(无中断),每次取走定时器中断次数后清0CLR 0EH ;交通灯时间计算中间控制变量CLR 0FH ;时间设置中间控制变量,与回车控制量12H共同起回车的控制作用CLR 10H ;方向键K4,控制参量:10H=0(显示数据减小1/按一次数据键),10H=1(数据增大)CLR 11H ;K4键,时间设置模式/正常工作模式切换,11H=0(正常工作模式),11H=1(时间设置模式)CLR 12H ;K2键,作为时间某一位设置结束(回车)控制,12H=1(回车标志)与11H同时使用CLR 13H ;第1,2组交通灯设置位控制,13H=0(第1位),13H=1(第2位)CLR 14H ;时钟时间设置位控制,14H=0(小时十位),14H=1(小时个位)CLR 15H ;时钟时间设置位控制,15H=0(分钟十位),15H=1(分钟个位)CLR 16H ;时钟时间设置位控制,16H=0(设置小时),16H=1(设置分钟)CLR 17H ;4位时间设置结束标志位,17H=1,表示设置四位时间结束MOV R2,#00H ;R2用于暂存交通灯时间的个位数据,中间变量MOV R3,#01H ;R3用于存放显示控制参数,R3=1(显示),R3=0(不显示)MOV R4,#00H ;R4用于存放计算时间的暂存器MOV R5,#00H ;R5用于暂存交通灯时间的十位数据,中间变量MOV R6,#00H ;R6用于暂存交通灯时间设置过程中变化的数据,中间变量MOV R7,#00H ;定时中断用中间变量MOV A,#00H ;清AMOV SBUF,A ;数据发送缓冲器清0SETB EA ;EA=1,CPU开放中断SETB ET0 ;ET0=1,允许定时器/计数器溢出中断SETB EX1 ;EX1=1,允许外部中断1中断SETB P3.2 ;清“:”闪烁SETB TR0 ;TR0=1,允许T0计数PROC0: LCALL KEYS ;键盘扫描子程序LCALL TIME ;时间计算子程序LCALL DISP ;显示子程序AJMP PROC0;#键盘扫描与时间设置模块;4个键主要完成: 功能转换, 时间设置, 系统复位(不需要软件干预);K1系统复位键(RESET);K2 时钟模式/交通灯模式切换,在非设置情况下有效; 时间设置过程中作为某位时间设置的结束标志(*INT1,回车);K3调整显示数据按键(P1.6);K4 正常工作时作为进入时间设置模式的按键, 设置过程中作为数据调整方向键(P1.7);设置顺序从高位到低位,从小时到分钟;交通灯从第1组到第2组分别设置;只有进入设置模式,K3、K4键才有效;下段程序为进入时间设置模式、改变数据变化方向KEYS: JNB P1.7,KEYS0 ;P1.7=0(按了K4键),转移,判断工作模式或数据方向;否则(没按K4键),操作如下LJMP KEYS000 ;没按K4键,转移到判断是否“已是时间设置模式(11H=1)”KEYS0: LCALL DELAY ;延时,消除抖动JNB P1.7,KEYS02 ;P1.7=0(确是按了K4键),转移,判断工作模式或数据方向;否则(没按K4键),操作如下KEYS000:JB 11H,KEYS1 ;没按K4键,是“已是时间设置模式(11H=1)”,转移;否则,不作任何操作(如下) LJMP KEYSO ;不作任何操作KEYS02: JB P1.7,KEYS03 LCALL DELAY AJMP KEYS02KEYS03: SETB P3.2 ;清“:”闪烁SETB P1.7 ;清出P1.7的键位 JB 11H,KEYS00 ;11H=1,转移(调整数据方向);11H=0,置时间设置模式,操作如下SETB 11H ;置时间设置模式CLR 0BH ;从第1组交通灯第1位开始设置LJMP KEYS1KEYS00:JB 10H,KEYS01 ;调整数据变化方向,原方向控制参量为1,转移到清0;SETB 10H ;原方向控制参量为0,置1LJMP KEYS1KEYS01: CLR 10H ;原方向控制参量为1,则清0;时间设置KEYS1: JNB P1.6,KEYS100 ;P1.6=0,有数值调整键(K3)输入,转移到KEYS100;否则,不进行任何操作LJMP KEYSO ;不进行任何操作KEYS100:LCALL DELAY ;延时,消除抖动JNB P1.6,KEYS10 ;P1.6=0(确是按了K3),转移(进行时间调整);否则,不进行任何操作(如下)LJMP KEYSOKEYS10: JB P1.6,KEYS04LCALL DELAYAJMP KEYS10KEYS04: SETB P1.6 ;清出P1.6的键位 JB 0AH,KEYSA ;判断是哪种工作模式,0AH=1(交通灯,转移到KEYS1A),0AH=0(时钟,进行如下操作) LJMP KEYSB ;时钟时间设置开始KEYSA: LJMP KEYS1A ;交通灯时间设置KEYSB:JB 16H,KEYS20 ;小时/分钟判断,16H=1(分钟,转移),16H=0(小时设置,进行如下操作)MOV PSW,#00H ;小时设置,工作寄存器0区JB 14H,KEYS40 ;14H=1,转移,设置小时的个位;否则设置小时的十位(如下)JB 12H,KEYS40 ;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整MOV A,#00H ;清AMOV R6,#00H ;清R6MOV B,#00H ;清BMOV A,7CH ;取出小时“十位”数据MOV B,A ;原始数据暂存于BANL A,#0FH ;屏蔽掉高四位MOV R6,A ;R6为十位显示数据LCALL KSETBITMOV 7CH,R6 ;回存小时“十位”数据CLR 12H ;清“回车”控制位LJMP KEYSO ;返回KEYS40:SETB 14H ;置控制参量,使转移到设小时个位;JNB 0FH,KEYS41CLR 0FHJB 12H,KEYS20 ;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整KEYS41: MOV A,#00H ;清AMOV R6,#00H ;清R6MOV B,#00H ;清BMOV A,7DH ;取出小时“个位”数据MOV B,A ;原始数据暂存于BANL A,#0FH ;屏蔽掉高四位MOV R6,A ;R6为“个位”显示数据LCALL KSETBITMOV 7DH,R6 ;回存小时“个位”数据CLR 12H ;清“回车”控制位SETB 0FHLJMP KEYSO ;返回KEYS20: SETB 16H ;分钟设置,置控制参量,使转移到设分钟;MOV PSW,#00H ;工作寄存器0区JB 15H,KEYS50 ;15H=1,转移,设置分钟的个位;否则设置分钟的十位(如下)JNB 0FH,KEYS51CLR 0FHJB 12H,KEYS50 ;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整KEYS51:MOV A,#00H ;清AMOV R6,#00H ;清R6MOV B,#00H ;清BMOV A,7EH ;取出分钟“十位”数据MOV B,A ;原始数据暂存于BANL A,#0FH ;屏蔽掉高四位MOV R6,A ;R6为分钟“十位”显示数据LCALL KSETBITMOV 7EH,R6 ;回存分钟“十位”数据CLR 12H ;清“回车”控制位SETB 0FHLJMP KEYSO ;返回KEYS50:SETB 15H ;置控制参量,使转移到设置分钟“个位”JNB 0FH,KEYS54CLR 0FHJB 12H,KEYS55 ;12H=0,没有回车(不作设置位的调整操作如下);12H=1,有回车,进行设置位调整KEYS54: MOV A,#00H ;清AMOV R6,#00H ;清R6MOV B,#00H ;清BMOV A,7FH ;取出分钟“个位”数据MOV B,A ;原始数据暂存于BANL A,#0FH ;屏蔽掉高四位MOV R6,A ;R6为分钟“个位”显示数据LCALL KSETBITMOV 7FH,R6 ;回存分钟“个位”数据SETB 0FHSETB 17HCLR 12H ;清“回车”控制位KEYS55: LJMP KEYSO ;返回;时钟设置结束,交通灯设置开始KEYS1A:JB 0BH,KEYS1B ;哪组交通灯,0BH=1(2组,转移到KEYS1B),0BH=0(1组,进行如下操作)MOV PSW,#00H ;第1组交通灯设置,工作寄存器0区JB 13H,KEYS1C ;13H=1,转移,设置第1组交通灯的第2位;否则设置第1组交通灯的第1位(如下)JB 12H,KEYS1C ;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整MOV A,#00H ;清AMOV B,#00H ;清BMOV R6,#00H ;清R6MOV A,79H ;第1组交通灯的第1位显示数据MOV B,A ;原始数据暂存于BANL A,#0FH ;屏蔽掉高四位MOV R6,A ;R6为第1位显示数据LCALL KSETBIT ;设置第1组交通灯的第1位(如下)MOV 79H,R6 ;回存第1位数据到显示存储单元MOV 52H,R6 ;回存第1位数据LED4CLR 12H ;清回车控制LJMP KEYSO ;返回KEYS1C:SETB 13H ;置控制参量,使转移到设置交通灯的第2位;JNB 0FH,KEYS1DCLR 0FHJB 12H,KEYS1B ;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整KEYS1D: MOV A,#00H ;清AMOV B,#00H ;清BMOV R6,#00H ;清R6MOV A,78H ;第1组交通灯的第2位显示数据MOV B,A ;原始数据暂存于BANL A,#0FH ;屏蔽掉高四位MOV R6,A ;R6为第2位显示数据LCALL KSETBIT ;设置第1组交通灯的第2位(如下)MOV 78H,R6 ;回存第2位数据到显示存储单元MOV 51H,R6 ;回存第2位数据LED3CLR 12H ;清回车控制SETB 0FHLJMP KEYSO ;返回KEYS1B:SETB 0BH ;第2组交通灯设置,置控制参量,转移到第2组交通灯设置MOV PSW,#00H ;工作寄存器0区JNB 0FH,KEYS1B0CLR 0FHJB 13H,KEYS1E ;13H=1,转移,设置第2组交通灯的第2位;否则设置第2组交通灯的第1位(如下)JB 12H,KEYS1E ;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整KEYS1B0:MOV A,#00H ;清AMOV B,#00H ;清BMOV R6,#00H ;清R6MOV A,77H ;第2组交通灯的第1位显示数据MOV B,A ;原始数据暂存于BANL A,#0FH ;屏蔽掉高四位MOV R6,A ;R6为第1位显示数据LCALL KSETBIT ;设置第2组交通灯的第1位(如下)MOV 77H,R6 ;回存第1位数据到显示存储单元MOV 54H,R6 ;回存第1位数据LED2CLR 12H ;清回车控制CLR 13H ;清控制参量SETB 0FHLJMP KEYSO ;返回KEYS1E:SETB 13H ;置控制参量,使转移到设置交通灯的第2位JNB 0FH,KEYS1E0JB 12H,KEYSO ;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,结束KEYS1E0:MOV A,#00H ;清AMOV B,#00H ;清BMOV R6,#00H ;清R6MOV A,76H ;第2组交通灯的第2位数据MOV B,A ;原始数据暂存于BANL A,#0FH ;屏蔽掉高四位MOV R6,A ;R6为第2位显示数据LCALL KSETBIT ;设置第2组交通灯的第2位(如下)MOV 76H,R6 ;回存第2位数据到显示存储单元MOV 53H,R6 ;回存第2位数据LED1CLR 12H ;清回车控制SETB 0FHSETB 17H ;置设置结束标志KEYSO: SETB P1.6SETB P1.7RET ;返回;时间设置每位数据变化子程序,R6入口(只是位显示数据)/出口(显示数据和控制位)KSETBIT:MOV PSW,#00H ;工作寄存器0区JB 10H,KSETBTZ ;判断数据变化的方向,10H=0(减小,如下),10H=1(增加,转移到KSETBTZ)CJNE R6,#00H,KSETBTY ;是否为0,不为0(转移);为0,操作如下MOV R6,#09H ;如果为0,则置为9AJMP KSETBTOKSETBTY:DEC R6AJMP KSETBTOKSETBTZ:CJNE R6,#09H,KSETBTX ;是否为9,不为9(转移,不作任何变化);为9,操作如下MOV R6,#00H ;如果为9,则置为0AJMP KSETBTOKSETBTX:INC R6KSETBTO:MOV A,#00H ;清AMOV A,B ;取出原始数据ANL A,#0F0H ;屏蔽低4位,保留高4位(即:控制位和键位)ORL A,R6 ;加入低4位MOV R6,A ;赋值给出口R6 RET ;返回;键盘扫描与时间设置模块结束;#时间计算模块TIME: JNB 11H,TIME1 ;检验工作模式,11H=0(正常工作模式,转移,计算时间),11H=1(时间设置,不作任何时间计算)MOV 50H,#00H ;清秒钟数据0LJMP TIMEO;下面根据当前的显示模式,决定哪一存储单元改变数据,并进行时、分、秒之间的进位TIME1:JB 0AH,TIME2 ;0AH=1转移到交通灯模式,0AH=0进行下面的时钟模式调整时间MOV PSW,#00H ;工作寄存器0区MOV A,#00H ;A清0MOV R4,A ;清R4MOV A,50H ;从50H中取出秒钟的当前数值CJNE A,#60,TIME1O ;当前秒钟是否到60秒,没到,不作任何操作,转移;相等,进位到分钟,操作如下MOV 50H,#00H ;秒钟存储单元清0INC 7FH ;分钟“个位”存储单元加1MOV A,7FH ;取出分钟个位存储单元数值ANL A,#0FH ;屏蔽控制位的值,保留分钟“个位”时间值进行操作(00001111)CJNE A,#10,TIME1O ;判断分钟“个位”是否到10分,没到,不作任何操作,转移;相等,进位到分钟的十位,操作如下MOV 7FH,#0D0H ;分钟“个位”数据清0LED1、LED2显示控制码及P1口键码初值(11010000)INC 7EH ;分钟“十位”数据加1MOV A,7EH ;取出分钟十位存储单元数值ANL A,#00FH ;屏蔽控制位的值,保留分钟“十位”时间值进行操作(00001111)CJNE A,#6,TIME1O ;判断分钟“十位”是否到6,没到,不作任何操作,转移;相等,进位到小时的个位,操作如下MOV 7EH,#0E0H ;分钟“十位”存储单元清0LED1、LED2显示控制码及P1口键码初值(11100000)INC 7DH ;小时“个位”数据加1MOV A,7DH ;取出小时“个位”数值ANL A,#0FH ;屏蔽控制位的值,保留小时“个位”值进行操作(00001111)MOV R4,A ;小时“个位”暂存于R4MOV A,7CH ;取出小时“十位”存储单元数值ANL A,#0FH ;屏蔽控制位的值,保留小时“十位”值进行操作(00001111)CJNE A,#2,TIME1A ;小时“十位”是否到2,没到,转移(判断“个位”是否到10);相等,操作如下(判断是否需要转天)MOV A,R4 ;小时“个位”给A,便于比较CJNE A,#4,TIME1O ;小时“个位”是否到4,没到,转移(不作任何操作,前已经加1);相等,需要转天,操作如下MOV 7DH,#0C0H ;小时“个位”数据清0LED1、LED2显示控制码及P1口键码初值(11000000)MOV 7CH,#0C0H ;小时“十位”数据清0LED1、LED2显示控制码及P1口键码初值(11000000)LJMP TIME1OTIME1A:MOV A,R4 ;小时“个位”给A,便于比较CJNE A,#10,TIME1O ;不等于10,转移(不作任何操作,前已经加1);等于10进位小时“十位”,操作如下INC 7CH ;小时“十位”加1MOV 7DH,#0C0H ;小时“个位”数据清0LED1、LED2显示控制码及P1口键码初值(11000000)TIME1O:LJMP TIMEO;交通灯模式,显示情况分两组,应分别考虑,但每组只有秒钟TIME2: JB 0BH,TIME3 ;0BH=1(第2组交通灯显示)转移,0BH=0(第1组交通灯显示),操作如下MOV PSW,#00H ;工作寄存器0区MOV A,#00H ;A清0MOV R2,A ;R2清0MOV R5,A ;R5清0MOV A,50H ;秒钟数据取出与ACJNE A,#1,TIME2O ;判断是否到1秒钟,没到,转移(不作任何操作);相等,操作如下(减1秒,或借位)MOV 50H,#00H ;清1秒钟存储单元50HMOV A,78H ;取出交通灯(第1组)显示时间个位数据ANL A,#0FH ;屏蔽掉高4位的控制码和键位码,只剩下秒钟个位数据(00001111)MOV R2,A ;时间“个位”暂存R2MOV A,79H ;取出交通灯(第1组)显示时间“十位”数据ANL A,#0FH ;屏蔽掉高4位的控制码和键位码,只剩下秒钟十位数据(00001111)MOV R5,A ;时间“十位”暂存R5CJNE R5,#00H,TIME2C ;判断“十位”是否为0,如果不为0,转移;为0,操作如下CJNE R2,#03H,TIME2A ;是否置“黄”灯闪烁标志,不等,转移(检查本组交通灯是否结束);等于,进行如下置标志操作SETB 0CH ;置“黄”灯闪烁标志1LJMP TIME2BTIME2A: CJNE R2,#00H,TIME2B ;秒钟“个位”是否为0,非0,转移;为0,清“黄”灯标志,并交换显示组号,操作如下CLR 0CH ;取消“黄”灯闪烁SETB 0BH ;置0BH为1,转为第二组交通灯显示MOV 79H,52H ;置“十位”初值MOV 78H,51H ;置“个位”初值LJMP TIME2OTIME2B:DEC 78H ;“个位”减1LJMP TIME2OTIME2C: CJNE R2,#00H,TIME2D ;检查个位是否需要借位(“十位”不为0),不为0,转移(不需要借位);为0,需要借位,操作如下MOV 78H,#0C9H ;“个位”置9LED1、LED2显示控制码及P1口键码初值DEC 79H ;“十位”减1LJMP TIME2OTIME2D: DEC 78H ;“个位”减1TIME2O: LJMP TIMEO;第2组交通灯显示TIME3: MOV PSW,#00H ;工作寄存器0区MOV A,#00H ;A清0MOV R2,A ;R2清0MOV R5,A ;R5清0MOV A,50H ;秒钟数据取出与ACJNE A,#1,TIMEO ;判断是否到1秒钟,没到,转移(不作任何操作);相等,操作如下(减1秒,或借位)MOV 50H,#00H ;清1秒钟存储单元50HMOV A,76H ;取出交通灯(第2组)显示时间个位数据ANL A,#0FH ;屏蔽掉高4位的控制码和键位码,只剩下秒钟个位数据(00001111)MOV R2,A ;时间“个位”暂存R2MOV A,77H ;取出交通灯(第1组)显示时间“十位”数据ANL A,#0FH ;屏蔽掉高4位的控制码和键位码,只剩下秒钟十位数据(00001111)MOV R5,A ;时间“十位”暂存R5CJNE R5,#00H,TIME3C ;判断“十位”是否为0,如果不为0,转移;为0,操作如下CJNE R2,#03H,TIME3A ;是否置“黄”灯闪烁标志,不等,转移(检查本组交通灯是否结束);等于,进行如下置标志操作SETB 0CH ;置“黄”灯闪烁标志1LJMP TIME3BTIME3A: CJNE R2,#00H,TIME3B ;秒钟“个位”是否为0,非0,转移;为0,清“黄”灯标志,并交换显示组号,操作如下CLR 0CH ;取消“黄”灯闪烁CLR 0BH ;0BH清0,转为第一组交通灯显示MOV 77H,54H ;置“十位”初值MOV 76H,53H ;置“个位”初值LJMP TIMEOTIME3B:DEC 76H ;“个位”减1LJMP TIMEOTIME3C: CJNE R2,#00H,TIME3D ;检查个位是否需要借位(“十位”不为0),不为0,转移(不需要借位);为0,需要借位,操作如下MOV 76H,#0D9H ;“个位”置9LED1、LED2显示控制码及P1口键码初值DEC 77H ;“十位”减1LJMP TIMEOTIME3D: DEC 76H ;“个位”减1TIMEO: RET;#显示模块(含两种显示模式:0AH=0时钟显示模式,0AH=1交通灯显示显示);时间显示*DISP: JB 0AH,DISP1 ;0AH=1转移到交通灯显示。否则进行下面的“时钟显示” MOV P1,7FH ;LED1显示 LCALL DELAY MOV P1,7EH ;LED2显示 LCALL DELAY MOV P1,7DH ;LED3显示MOV SBUF,7BH ;LED3控制位WTLED3:JNB TI,WTLED3CLR TILCALL DELAYMOV P1,7CH ;LED4显示MOV SBUF,7AH ;LED4控制位WTLED4:JNB TI,WTLED4CLR TILCALL DELAYMOV A,#00H ;清控制位MOV SBUF,A ;清控制位WTCLR1:JNB TI,WTCLR1CLR TILJMP DISPO;交通灯显示*DISP1: JB 0BH,DISP2 ;0BH=1转移到第2组交通灯显示,否则进行下面的第1组交通灯显示;第1组交通灯显示-;第1组交通灯下的第2组显示-MOV P1,76H ;显示第2组LED1LCALL DELAYMOV P1,77H ;显示第2组LED2LCALL DELAY;下面根据是否“黄1”“闪”送出第1组不同的控制位-JB 0CH,DISP1Y ;0CH=1转移到“黄”灯“闪”,否则进行下面“黄”灯“不闪”(第1组)MOV P1,78H ;第1组交通灯LED3显示MOV SBUF,75H ;控制位,点亮交通灯WTFLED3:JNB TI,WTFLED3CLR TILCALL DELAYMOV P1,79H ;第1组交通灯LED4显示MOV SBUF,74H ;控制位,点亮交通灯WTFLED4:JNB TI,WTFLED4CLR TILCALL DELAYDEC 74H ;清出显示控制位,保留交通灯点亮控制位MOV SBUF,74HWTFCL0: JNB TI,WTFCL0CLR TIINC 74H ;恢复显示控制位,保留交通灯点亮控制位LJMP DISPO;第1组“黄1”灯“闪”-DISP1Y: MOV P1,78H ;LED3显示MOV SBUF,72H ;WTF1Y1:JNB TI,WTF1Y1CLR TILCALL DELAYMOV P1,79H ;LED4显示MOV SBUF,73H ;“黄1”灯“闪”WTF1Y2:JNB TI,WTF1Y2CLR TILCALL DELAYDEC 73H ;清出显示控制位,保留交通灯点亮控制位MOV SBUF,73HWTFCL1: JNB TI,WTFCL1CLR TIINC 73H ;恢复显示控制位,保留交通灯点亮控制位LJMP DISPO;第2组交通灯显示-;第2组交通灯LED1、LED2显示-DISP2: MOV P1,76H ;第2组交通灯LED1显示和控制位LCALL DELAYMOV P1,77H ;LED2显示和控制位LCALL DELAY;第2组交通灯下的第1组交通灯LED显示-JB 0CH,DISP2Y ;0CH=1转移到“黄”灯“闪”,否则进行下面“黄”灯“不闪”(第2组)MOV P1,78H ;第1组交通灯LED3显示MOV 71H,#8AH ;点亮第2组交通灯,LED3显示控制位10001010MOV SBUF,71H ;交通灯点亮和控制位WTFL3: JNB TI,WTFL3CLR TILCALL DELAYMOV P1,79H ;第1组交通灯LED4显示MOV 71H,#89H ;点亮第2组交通灯和LED4控制位MOV SBUF,71H ;点亮交通灯和控制位WTFL4: JNB TI,WTFL4CLR TILCALL DELAYMOV 71H,#88H ;清出显示控制位,保留交通灯点亮控制位MOV SBUF,71HWTFCL2: JNB TI,WTFCL2CLR TILJMP DISPO;第2组交通灯“黄2”灯“闪”-DISP2Y:MOV P1,78H ;LED3显示MOV SBUF,70H ;“黄2” 闪控制位,LED3:(01000010(42H)WTF2Y3:JNB TI,WTF2Y3CLR TILCALL DELAYMOV P1,79H ;LED4显示MOV SBUF,60H ;“黄2” 闪控制位,LED4:01000001(41H)WTF2Y4:JNB TI,WTF2Y4CLR TILCALL DELAYDEC 60HMOV SBUF,60HWTFCL3: JNB TI,WTFCL3CLR TIINC 60HDISPO:RET;#延时子程序,双重循环DELAY: MOV PSW,#00HMOV R5,#32HFOR1: MOV R4,#

温馨提示

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

最新文档

评论

0/150

提交评论