交通灯控制系统软件源程序文本.docx
- 文档编号:26289906
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:33
- 大小:124.89KB
交通灯控制系统软件源程序文本.docx
《交通灯控制系统软件源程序文本.docx》由会员分享,可在线阅读,更多相关《交通灯控制系统软件源程序文本.docx(33页珍藏版)》请在冰豆网上搜索。
交通灯控制系统软件源程序文本
时钟和交通灯控制系统软件设计——技术文件(源程序文本)
;▲设计思路:
硬件设计原理见原理图,设计思路略;系统软件设计思路如下。
;分三个独立模块,主程序依次循环调用三个模块(显示模块、时间计算模块、键盘扫描与时间设置模块),;使用两个中断(内部定时器T0中断、外部中断INT1),在主程序循环调用三个模块的进程中嵌套调用各中断服务程序。
;各模块之间通过相应的控制变量来建立联系,并确定分支运行的路径,控制变量全部由地址传值;
;模块之间传递的数据(特别是显示的数据:
如计算结果、键盘修改或设置时间显示数据等,变化后的数据存入51H~54H、
;76H~79H和7CH~7FH字节单元,显示只从这些单元中取数据)由同一个地址传值。
;定时0.05s,(216-X)*10-6=0.05,X=15536(3CB0H),加上执行中断服务程序花去的平均时间约222个时钟周期(相当于定
;时脉冲19个)。
因此,定时计数器的计数初值为15536+19=15555(3CC3H)。
;#程序开始段,主程序和中断服务程序地址初始化
RESET:
ORG0000H
LJMPMAIN
ORG000BH
LJMPT00
ORG0013H
LJMPINT11
;系统复位后,程序开始执行地址(主程序起始地址)
;T0中断服务程序地址
;INT1中断服务程序地址
;#主程序段
ORG100H
MOV@R0,#00H
DJNZR1,CLRAM
MOVSP,#10H;工作寄存器区0和1区会使用,堆栈从2区开始
MOVSCON,#00H;串行口控制寄存器设置。
工作于方式0(移位寄存器方式),禁止接收数据,中断清0
MOV79H,#0C6H;79H存放第1组交通灯(绿1,红2)时间LED4显示位6,P1(11000110,段选码),值变化
MOV78H,#0C0H;78H存放第1组交通灯(绿1,红2)时间LED3显示位0,P1(11000000,段选码),值变化
共16页,第1页
时钟和交通灯控制系统软件设计——技术文件(源程序文本)
MOV77H,#0E6H
;77H存放第2组交通灯(绿2,红1)时间LED2显示位6,P1(11100110,段选码和控制码),值变化
MOV76H,#0D0H
;76H存放第2组交通灯(绿2,红1)时间LED1显示位0,P1(11010000,段选码和控制码),值变花
MOV75H,#32H
;75H存放第1组交通灯点亮(绿1,红2),LED3显示控制参数,RXD(00110010,控制位选)
MOV74H,#31H
;74H存放第1组交通灯点亮(绿1,红2),LED4显示控制参数,RXD(00110001,控制位选)
MOV73H,#05H
;第1组交通灯绿变红
(2)时“黄1”闪(4),红绿灯息,LED4显示,RXD(00000101),下画线位变
MOV72H,#06H
;第1组交通灯绿变红
(2)时“黄1”闪(4),红绿灯息,LED3显示,RXD(00000110),下画线位变
MOV51H,78H
;第1组交通灯时间显示中“个位”(LED3)初值,不变化
MOV52H,79H
;第1组交通灯时间显示中“十位”(LED4)初值,不变化
MOV53H,76H
;第2组交通灯时间显示中“个位”(LED1)初值,不变化
MOV54H,77H
;第2组交通灯时间显示中“十位”(LED2)初值,不变化
MOV71H,#8AH
;71H存放第2组交通灯点亮(绿2,红1),RXD(LED3:
10001010,8AH,LED4:
10001001,89H)
MOV70H,#42H
;第2组交通灯绿变红
(2)时"黄2"闪(4),红绿灯息,RXD(LED3:
01000010)下画线位变
MOV60H,#41H
;第2组交通灯绿变红
(2)时"黄2"闪(4),红绿灯息,RXD(LED4:
01000001),下画线位变
MOV6FH,#00H
;记录定时器中断的次数,每次读取后清0,初值为0,每增加1即增加0.5秒
MOV6EH,#00H
;记录定时器中断的次数,控制交通灯“黄”灯闪烁
CLR0AH
;K2键,控制系统工作模式:
0AH=0(工作于时钟模式,默认),0AH=1(工作于交通灯控制模式)
CLR0BH
;哪组交通灯显示控制参数:
0BH=0(第1组交通灯显示),0BH=1(第2组交通灯显示)
CLR0CH
;交通灯“黄”灯是否“闪”:
0CH=0(不闪),0CH=1(闪)
CLR0DH
;检验定时器是否中断,0DH=1(中断),0DH=0(无中断),每次取走定时器中断次数后清0
CLR0EH
;交通灯时间计算中间控制变量
CLR0FH
;时间设置中间控制变量,与回车控制量12H共同起回车的控制作用
CLR10H
;方向键K4,控制参量:
10H=0(显示数据减小1/按一次数据键),10H=1(数据增大)
CLR11H
;K4键,时间设置模式/正常工作模式切换,11H=0(正常工作模式),11H=1(时间设置模式)
CLR12H
;K2键,作为时间某一位设置结束(回车)控制,12H=1(回车标志)与11H同时使用
CLR13H
;第1,2组交通灯设置位控制,13H=0(第1位),13H=1(第2位)
CLR14H
;时钟时间设置位控制,14H=0(小时十位),14H=1(小时个位)
CLR15H
;时钟时间设置位控制,15H=0(分钟十位),15H=1(分钟个位)
CLR16H
;时钟时间设置位控制,16H=0(设置小时),16H=1(设置分钟)
CLR17H
;4位时间设置结束标志位,17H=1,表示设置四位时间结束
MOVR2,#00H
;R2用于暂存交通灯时间的个位数据,中间变量
MOVR3,#01H
;R3用于存放显示控制参数,R3=1(显示),R3=0(不显示)
MOVR4,#00H
;R4用于存放计算时间的暂存器
MOVR5,#00H
;R5用于暂存交通灯时间的十位数据,中间变量
MOVR6,#00H
;R6用于暂存交通灯时间设置过程中变化的数据,中间变量
MOVR7,#00H
;定时中断用中间变量
MOVA,#00H
;清A
MOVSBUF,A
;数据发送缓冲器清0
共16页,第2页
时钟和交通灯控制系统软件设计——技术文件(源程序文本)
SETBEA
;EA=1,CPU开放中断
SETBET0
;ET0=1,允许定时器/计数器溢出中断
SETBEX1
;EX1=1,允许外部中断1中断
SETBP3.2
;清“:
”闪烁
SETBTR0
;TR0=1,允许T0计数
PROC0:
LCALLKEYS
;键盘扫描子程序
LCALLTIME
;时间计算子程序
LCALLDISP
;显示子程序
AJMPPROC0
;#键盘扫描与时间设置模块
;4个键主要完成:
①功能转换,②时间设置,③系统复位(不需要软件干预)
;K1—系统复位键(RESET);
;K2—①时钟模式/交通灯模式切换,在非设置情况下有效;②时间设置过程中作为某位时间设置的结束标志(*INT1,回车);
;K3—调整显示数据按键(
P1.6);
;K4—①正常工作时作为进入时间设置模式的按键,②设置过程中作为数据调整方向键(P1.7);
;设置顺序从高位到低位,从小时到分钟;交通灯从第1组到第2组分别设置;只有进入设置模式,K3、K4键才有效;
;下段程序为进入时间设置模式、改变数据变化方向
KEYS:
JNBP1.7,KEYS0
;P1.7=0(按了K4键),转移,判断工作模式或数据方向;否则(没按K4键),操作如下
LJMPKEYS000
;没按K4键,转移到判断是否“已是时间设置模式(11H=1)”
KEYS0:
LCALLDELAY
;延时,消除抖动
JNBP1.7,KEYS02;P1.7=0(确是按了K4键),转移,判断工作模式或数据方向;否则(没按K4键),操作如下
KEYS000:
JB11H,KEYS1
;没按K4键,是“已是时间设置模式(11H=1)”,转移;否则,不作任何操作(如下)
LJMPKEYSO
;不作任何操作
KEYS02:
JBP1.7,KEYS03
LCALLDELAY
AJMPKEYS02
KEYS03:
SETBP3.2
;清“:
”闪烁
SETBP1.7
;清出P1.7的键位
JB11H,KEYS00
;11H=1,转移(调整数据方向);11H=0,置时间设置模式,操作如下
SETB11H
;置时间设置模式
CLR0BH
;从第1组交通灯第1位开始设置
LJMPKEYS1
KEYS00:
JB10H,KEYS01
;调整数据变化方向,原方向控制参量为1,转移到清0;
SETB10H
;原方向控制参量为0,置1
LJMPKEYS1
KEYS01:
CLR10H
;原方向控制参量为1,则清0
;时间设置
共16页,第3页
时钟和交通灯控制系统软件设计——技术文件(源程序文本)
KEYS1:
JNBP1.6,KEYS100
;P1.6=0,有数值调整键(K3)输入,转移到KEYS100;否则,不进行任何操作
LJMPKEYSO
;不进行任何操作
KEYS100:
LCALLDELAY
;延时,消除抖动
JNBP1.6,KEYS10
;P1.6=0(确是按了K3),转移(进行时间调整);否则,不进行任何操作(如下)
LJMPKEYSO
KEYS10:
JBP1.6,KEYS04
LCALLDELAY
AJMPKEYS10
KEYS04:
SETBP1.6
;清出P1.6的键位
JB0AH,KEYSA
;判断是哪种工作模式,0AH=1(交通灯,转移到KEYS1A),0AH=0(时钟,进行如下操作)
LJMPKEYSB
;时钟时间设置开始
KEYSA:
LJMPKEYS1A
;交通灯时间设置
KEYSB:
JB16H,KEYS20
;小时/分钟判断,16H=1(分钟,转移),16H=0(小时设置,进行如下操作)
MOVPSW,#00H
;小时设置,工作寄存器0区
JB14H,KEYS40
;14H=1,转移,设置小时的个位;否则设置小时的十位(如下)
JB12H,KEYS40
;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整
MOVA,#00H
;清A
MOVR6,#00H
;清R6
MOVB,#00H
;清B
MOVA,7CH
;取出小时“十位”数据
MOVB,A
;原始数据暂存于B
ANLA,#0FH
;屏蔽掉高四位
MOVR6,A
LCALLKSETBIT
;R6为十位显示数据
MOV7CH,R6
;回存小时“十位”数据
CLR12H
;清“回车”控制位
LJMPKEYSO
;返回
KEYS40:
SETB14H
;置控制参量,使转移到设小时个位;
JNB0FH,KEYS41
CLR0FH
JB12H,KEYS20
;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整
KEYS41:
MOVA,#00H
;清A
MOVR6,#00H
;清R6
MOVB,#00H
;清B
MOVA,7DH
;取出小时“个位”数据
MOVB,A
;原始数据暂存于B
ANLA,#0FH
;屏蔽掉高四位
共16页,第4页
时钟和交通灯控制系统软件设计——技术文件(源程序文本)
MOVR6,A
LCALLKSETBIT
;R6为“个位”显示数据
MOV7DH,R6
;回存小时“个位”数据
CLR12H
;清“回车”控制位
SETB0FH
LJMPKEYSO
;返回
KEYS20:
SETB16H
;分钟设置,置控制参量,使转移到设分钟;
MOVPSW,#00H
;工作寄存器0区
JB15H,KEYS50
JNB0FH,KEYS51
;15H=1,转移,设置分钟的个位;否则设置分钟的十位(如下)
CLR0FH
JB12H,KEYS50
;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整
KEYS51:
MOVA,#00H
;清A
MOVR6,#00H
;清R6
MOVB,#00H
;清B
MOVA,7EH
;取出分钟“十位”数据
MOVB,A
;原始数据暂存于B
ANLA,#0FH
;屏蔽掉高四位
MOVR6,A
LCALLKSETBIT
;R6为分钟“十位”显示数据
MOV7EH,R6
;回存分钟“十位”数据
CLR12H
;清“回车”控制位
SETB0FH
LJMPKEYSO
;返回
KEYS50:
SETB15H
;置控制参量,使转移到设置分钟“个位”
JNB0FH,KEYS54
CLR0FH
JB12H,KEYS55
;12H=0,没有回车(不作设置位的调整操作如下);12H=1,有回车,进行设置位调整
KEYS54:
MOVA,#00H
;清A
MOVR6,#00H
;清R6
MOVB,#00H
;清B
MOVA,7FH
;取出分钟“个位”数据
MOVB,A
;原始数据暂存于B
ANLA,#0FH
;屏蔽掉高四位
MOVR6,A
LCALLKSETBIT
;R6为分钟“个位”显示数据
MOV7FH,R6
;回存分钟“个位”数据
共16页,第5页
时钟和交通灯控制系统软件设计——技术文件(源程序文本)
SETB0FH
SETB17H
CLR12H
;清“回车”控制位
KEYS55:
LJMPKEYSO
;返回
;时钟设置结束,交通灯设置开始
KEYS1A:
JB0BH,KEYS1B
;哪组交通灯,0BH=1(2组,转移到KEYS1B),0BH=0(1组,进行如下操作)
MOVPSW,#00H
;第1组交通灯设置,工作寄存器0区
JB13H,KEYS1C
;13H=1,转移,设置第1组交通灯的第2位;否则设置第1组交通灯的第1位(如下)
JB12H,KEYS1C
;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整
MOVA,#00H
;清A
MOVB,#00H
;清B
MOVR6,#00H
;清R6
MOVA,79H
;第1组交通灯的第1位显示数据
MOVB,A
;原始数据暂存于B
ANLA,#0FH
;屏蔽掉高四位
MOVR6,A
;R6为第1位显示数据
LCALLKSETBIT
;设置第1组交通灯的第1位(如下)
MOV79H,R6
;回存第1位数据到显示存储单元
MOV52H,R6
;回存第1位数据LED4
CLR12H
;清回车控制
LJMPKEYSO
;返回
KEYS1C:
SETB13H
;置控制参量,使转移到设置交通灯的第2位;
JNB0FH,KEYS1D
CLR0FH
JB12H,KEYS1B
;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整
KEYS1D:
MOVA,#00H
;清A
MOVB,#00H
;清B
MOVR6,#00H
;清R6
MOVA,78H
;第1组交通灯的第2位显示数据
MOVB,A
;原始数据暂存于B
ANLA,#0FH
;屏蔽掉高四位
MOVR6,A
;R6为第2位显示数据
LCALLKSETBIT
;设置第1组交通灯的第2位(如下)
MOV78H,R6
;回存第2位数据到显示存储单元
MOV51H,R6
;回存第2位数据LED3
CLR12H
;清回车控制
SETB0FH
共16页,第6页
时钟和交通灯控制系统软件设计——技术文件(源程序文本)
LJMPKEYSO
;返回
KEYS1B:
SETB0BH
;第2组交通灯设置,置控制参量,转移到第2组交通灯设置
MOVPSW,#00H
;工作寄存器0区
JNB0FH,KEYS1B0
CLR0FH
JB13H,KEYS1E
;13H=1,转移,设置第2组交通灯的第2位;否则设置第2组交通灯的第1位(如下)
JB12H,KEYS1E
;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,进行设置位调整
KEYS1B0:
MOVA,#00H
;清A
MOVB,#00H
;清B
MOVR6,#00H
;清R6
MOVA,77H
;第2组交通灯的第1位显示数据
MOVB,A
;原始数据暂存于B
ANLA,#0FH
;屏蔽掉高四位
MOVR6,A
;R6为第1位显示数据
LCALLKSETBIT
;设置第2组交通灯的第1位(如下)
MOV77H,R6
;回存第1位数据到显示存储单元
MOV54H,R6
;回存第1位数据LED2
CLR12H
;清回车控制
CLR13H
;清控制参量
SETB0FH
LJMPKEYSO
;返回
KEYS1E:
SETB13H
;置控制参量,使转移到设置交通灯的第2位
JNB0FH,KEYS1E0
JB12H,KEYSO
;12H=0,没有回车(不作设置位的调整,操作如下);12H=1,有回车,结束
KEYS1E0:
MOVA,#00H
;清A
MOVB,#00H
;清B
MOVR6,#00H
;清R6
MOVA,76H
;第2组交通灯的第2位数据
MOVB,A
;原始数据暂存于B
ANLA,#0FH
;屏蔽掉高四位
MOVR6,A
;R6为第2位显示数据
LCALLKSETBIT
;设置第2组交通灯的第2位(如下)
MOV76H,R6
;回存第2位数据到显示存储单元
MOV53H,R6
;回存第2位数据LED1
CLR12H
;清回车控制
SETB0FH
SETB17H
;置设置结束标志
共16页,第7页
时钟和交通灯控制系统软件设计——技术文件(源程序文本)
KEYSO:
SETBP1.6
SETBP1.7
RET
;返回
;时间设置每位数据变化子程序,
R6—入口(只是位显示数据)/出口(显示数据和控制位)
KSETBIT:
MOVPSW,#00H
;工作寄存器0区
JB10H,KSETBTZ
;判断数据变化的方向,10H=0(减小,如下),10H=1(增加,转移到KSETBTZ)
CJNER6,#00H,KSETBTY;是否为0,不为0(转移);为0,操作如下
MOVR6,#09H
AJMPKSETBTO
;如果为0,则置为9
KSETBTY:
DECR6
AJMPKSETBTO
KSETBTZ:
CJNER6,#09H,KSETBTX;是否为9,不为9(转移,不作任何变化);为9,操作如下
MOVR6,#00H
;如果为9,则置为0
AJMPKSETBTO
KSETBTX:
INCR6
KSETBTO:
MOVA,#00H
;清A
MOVA,B
;取出原始数据
ANLA,#0F0H
;屏蔽低4位,保留高4位(即:
控制位和键位)
ORLA,R6
;加入低4位
MOVR6,A
;赋值给出口R6
RET
;返回
;键盘扫描与时间设置模块结束
;#时间计算模块
TIME:
JNB11H,TIME1;检验工作模式,11H=0(正常工作模式,转移,计算时间),11H=1(时间设置,不作任何时间计算)
MOV50H,#00H;清秒钟数据0
LJMPTIMEO
;下面根据当前的显示模式,
决定哪一存储单元改变数据,并进行时、分、秒之间的进位
;0AH=1转移到交通灯模式,0AH=0进行下面的时钟模式调整时间
MOVA,#00H
MOVR4,A
MOV50H,#00H
;秒钟存储单元清0
INC7FH
;分钟“个位”存储单元加1
MOVA,7FH
;取出分钟个位存储单元数值
ANLA,#0FH
;屏蔽控制位的值,保留分钟“个位”时间值进行操作(00001111)
CJNEA,#60,TIME1O
共16页,第8页
时钟和交通灯控制系统软件设计——技术文件(源程序文本)
CJNEA,#10,TIME1O
;判断分钟“个位”是否到10分,没到,不作任何操作,转移;相等,进位到分钟的十位,操作如下
MOV7FH,#0D0H
;分钟“个位”数据清0+LED1、LED2显示控制码及P1口键码初值(11010000)
INC7EH
;分钟“十位”数据加1
MOVA,7EH
;取出分钟十位存储单元数值
ANLA,#00FH
;屏蔽控制位的值,保留分钟“十位”时间值进行操作(00001111)
CJNEA,#6,TIME1O
;判断分钟“十位”是否到6,没到,不作任何操作,转移;相等,进位到小时的个位,操作如下
MOV7EH,#0E0H
;分钟“十位”存储单元清0+LED1、LED2显示控制码及P1口键码初值(11100000)
INC7DH
;小时“个位”数据加1
MOVA,7DH
;取出小时“个位”数值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 控制系统 软件 源程序 文本