单片机交通信号灯模拟系统设计.docx
- 文档编号:23229573
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:16
- 大小:17.85KB
单片机交通信号灯模拟系统设计.docx
《单片机交通信号灯模拟系统设计.docx》由会员分享,可在线阅读,更多相关《单片机交通信号灯模拟系统设计.docx(16页珍藏版)》请在冰豆网上搜索。
单片机交通信号灯模拟系统设计
基于单片机的交通信号灯模拟系统设计
主要内容:
利用单片机中的定时器、IO接口、中断系统等资源,设计一个十字路口交通信号灯的控制模拟系统。
基本要求:
(1)利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭。
(2)可通过按键对红绿灯点亮和熄灭时间进行调整及设置。
(3)能对红绿灯点亮和熄灭时间进行倒计时时间显示。
提高部分:
(4)可进行紧急或特殊情况的人工处理控制。
(5)有内部24小时钟,可根据时间表对对红绿灯点亮和熄灭时间进行自动调整。
(如高峰期:
7:
30-8:
30,17:
00-18:
30或夜间时段红绿灯主次干道时长比等)。
(6)可根据交通流量自动调整对红绿灯点亮和熄灭时间。
程序:
Z8279EQU0FF82H;8279状态/命令口地址
D8279EQU0FF80H;8279数据口地址
LEDMODEQU00H;左边输入八位字符显示
;外部译码键扫描方式,双键互锁
LEDFEQEQU2FH;扫描速率
LEDCLSEQU0C1H;清除显示RAM
LEDWR0EQU80H;设定的将要写入的显示RAM地址
READKBEQU40H;读FIFORAM地址0的命令字
;-------------------------------------------------------------------------------------
ORG0000H
LJMPSTART
ORG0003H
LJMPEMERGENCY
ORG000BH;定时器中断的入口地址
LJMPCOUNTER
ORG0040H
START:
MOVSP,#60H
LCALLINIT8279;初始化
MOVTMOD,#01H
MOVTL0,#056H;50ms时间常数
MOVTH0,#4CH
MOVR2,#20;设置循环次数20次,定时1s
MOVR3,#1
MOV20H,#5
MOV21H,#2
MOVR6,#06H;时
MOVR1,#59H;分
MOVR0,#45H;秒
MOVR7,#00H;交通灯状态选择
SETBET0;允许定时器中断,
SETBTR0;启动T0
SETBEX0;允许外部中断中断
SETBIT0;外部中断为电平触发方式
SETBEA;开CPU开中断
;----------------------------------------------------------------------------------
WAIT:
LCALLGETKEY;读键盘
CJNEA,#0FFH,CONT;判断是否有键输入
MOVA,B
CJNEA,#3CH,KEY_B;输入键是'C',转CLEAR_T
LCALLCLEAR_T
KEY_B:
CJNEA,#3BH,KEY_A;输入键是'B',转SET_T
LCALLSET_T
KEY_A:
;输入键是'A',转START_T
CJNEA,#3AH,KEY_E
LCALLSTART_T
KEY_E:
;输入键是'E',进行高峰处理,调整时间
CJNEA,#3EH,KEY_F
MOV20H,#10;红绿灯时间为10s
KEY_F:
CJNEA,#3FH,KEY_D;输入是'F',进行低峰处理,调整时间
MOV20H,#3
KEY_D:
CJNEA,#3DH,CONT;输入是'D',进行常态处理,调整时间
MOV20H,#5
CONT:
LCALLDISPLAY;显示时间
SJMPWAIT;循环
CLEAR_T:
;时间清零
CLRTR0
MOVR3,#0H
MOVR6,#0H;时
MOVR1,#0H;分
MOVR0,#0H;秒
LCALLDISPLAY
RET
START_T:
;电子钟计时子程序
SETBTR0
RET
SET_T:
;设置初值子程序
CLRTR0;关计数器
MOVR4,#1
LCALLGETWORD;读秒数
CJNEA,#0FFH,INVALID;判断输入合法性
MOVA,B
ADDA,#156
JCINVALID;判断输入秒值<100
MOVA,B
CJNER7,#01H,T1;若为状态1,保存输入值
MOV20H,A
MOVR3,20H
LCALLDISPLAY
T1:
CJNER7,#02H,T2;若为状态2,保存输入值
MOV21H,A
MOVR3,21H
LCALLDISPLAY
T2:
CJNER7,#03H,T3;若为状态3,保存输入值
MOV20H,A
MOVR3,20H
LCALLDISPLAY
T3:
CJNER7,#00H,T4;若为状态4,保存输入值
MOV21H,A
MOVR3,21H
LCALLDISPLAY
T4:
SETBTR0
RET
INVALID:
LCALLCLEAR_T;时间清零
;------------------------------------------------------------------------------------
GETWORD:
;读数子程序
WKEY1:
LCALLGETKEY;读键盘
CJNEA,#0FFH,WKEY1;无键输入,则再读
MOVA,B
ADDA,#0C6H
JCERROR1;判断输入是否大于
MOVA,B
SUBBA,#30H
JCERROR1;判断输入是否小于
MOVR5,A
LCALLDISLED;显示输入的字符
MOVB,#10
MULAB
PUSHACC;保存输入的值
WKEY2:
LCALLGETKEY;读键盘
CJNEA,#0FFH,WKEY2;无键输入则再读
MOVA,B
ADDA,#0C6H;判断输入是否大于
JCERROR2
MOVA,B
SUBBA,#30H;判断输入是否小于
JCERROR2
DECR4
MOVR5,A
LCALLDISLED;显示输入的字符
MOVB,A
POPACC
ADDA,B
MOVB,A;把得到的值存在B
MOVA,#0FFH;置合法输入标志
AJMPKEYOK
ERROR2:
POPACC
ERROR1:
MOVA,#0;置非法输入标志
KEYOK:
RET
;--------------------------------------------------------------------------------------------
;定时器的中断服务程序
COUNTER:
;INT_T0中断服务子程序
PUSHACC;保护现场
PUSHPSW
CLRTR0
MOVTL0,#056H;重新设置初值
MOVTH0,#4CH
LCALLDISPLAY;1s时间到,显示当前倒计时的时间
DJNZR2,RETURN1
MOVR2,#20H
CJNER0,#59H,SECOND;判断秒=59
MOVR0,#99H
CJNER1,#59H,MINUTE;判断分=59
MOVR1,#99H
CJNER6,#23H,HOUR;判断时=23
MOVR6,#99H
HOUR:
MOVA,R6
ADDA,#1;时加1
DAA
MOVR6,A
MINUTE:
MOVA,R1
ADDA,#1;分加1
DAA
MOVR1,A
SECOND:
MOVA,R0
ADDA,#1;秒加1
DAA
MOVR0,A
CJNER6,#5H,TURN
LJMPTURN
TURN:
LCALLDISPLAY1
MOVA,R7;显示交通灯的状态
SUBBA,#02H
JNCL3
CJNER7,#00H,L2;通过标志位来判断交通灯当前的状态
DJNZR3,RETURN
CJNER6,#5H,SH
MOV20H,#10
MOV21H,#3
SH:
JCSH1
MOV20H,#10
MOV21H,#3
CJNER6,#7H,SH1
MOV20H,#5
MOV21H,#2
SH1:
JCSH2
MOV20H,#5
MOV21H,#2
SH2:
MOVR3,20H
MOVDPTR,#8300H;南北绿灯,东西红灯
MOVA,#96H
MOVX@DPTR,A
MOVR7,#01H;设置交通灯状态标志为下一个状态
SJMPRETURN
RETURN1:
LJMPRETURN
L2:
DJNZR3,RETURN
MOVR3,21H
MOVDPTR,#8300H;南北黄灯,东西红灯
MOVA,#06H
MOVX@DPTR,A
MOVR7,#02H
SJMPRETURN
L3:
CJNER7,#02H,L4
DJNZR3,RETURN
MOVR3,20H
MOVDPTR,#8300H;南北红灯,东西绿灯
MOVA,#69H
MOVX@DPTR,A
MOVR7,#03H
SJMPRETURN
L4:
DJNZR3,RETURN
MOVR3,21H
MOVDPTR,#8300H;南北红灯,东西黄灯
MOVA,#09H
MOVX@DPTR,A
MOVR7,#00H
RETURN:
SETBTR0
POPPSW;恢复现场
POPACC
RETI
;------------------------------------------------------------------------------------
EMERGENCY:
PUSHPSW;保护现场
PUSHACC
MOVDPTR,#8300H
MOVA,#0FH;南北,东西都亮红灯
MOVX@DPTR,A
MOVR3,#10
LCALLDISPLAY
SETBTR0;启动定时器
POPACC;恢复现场
POPPSW
RETI
;---------------------------------------------------------------------------
INIT8279:
;8279初始化子程序
PUSHDPH;保存现场
PUSHDPL
PUSHACC
LCALLDELAY;延时
MOVDPTR,#Z8279
MOVA,#LEDMOD;置工作方式
MOVX@DPTR,A
MOVA,#LEDFEQ;置键盘扫描速率
MOVX@DPTR,A
MOVA,#LEDCLS;清除LED显示
MOVX@DPTR,A
POPACC;恢复现场
POPDPL
POPDPH
RET
;------------------------------------------------------------------------------------------------
GETKEY:
;读取键盘子程序
;输入:
无;输出:
B:
读到的键码A:
按键的标志
PUSHDPH;保存现场
PUSHDPL
PUSHPSW
MOVDPTR,#Z8279
MOVXA,@DPTR;读状态
ANLA,#07H;屏蔽D7-D3
JNZGETVAL;判断是否有键输入
MOVA,#0H;置标志(无键输入)
SJMPRECOVER
GETVAL:
MOVA,#READKB;读FIFORAM命令
MOVX@DPTR,A
MOVDPTR,#D8279
MOVXA,@DPTR;读键
ANLA,#3FH;屏蔽SHIFT和CTRL键
MOVDPTR,#KEYCODE;键码表起始地址
MOVCA,@A+DPTR;查表
MOVB,A;置返回键值
MOVA,#0FFH;置标志(有键输入)
RECOVER:
POPPSW;恢复现场
POPDPL
POPDPH
RET
;---------------------------------------------------------------------------------
DISLED:
;显示字符子程序
;输入:
R4,位置R5,值
PUSHDPH;保存现场
PUSHDPL
PUSHACC
MOVA,#LEDWR0;置显示起始地址
ADDA,R4;加位置偏移量
MOVDPTR,#Z8279
MOVX@DPTR,A;设定显示位置
MOVDPTR,#LEDSEG;置显示常数表起始位置
MOVA,R5
MOVCA,@A+DPTR;查表
MOVDPTR,#D8279
MOVX@DPTR,A;显示数据
POPACC;恢复现场
POPDPL
POPDPH
RET
;------------------------------------------------------------------------------
DELAY:
;延时子程序
PUSH0;保存现场
PUSH1
MOV0,#0H
DELAY1:
MOV1,#0H
DJNZ1,$
DJNZ0,DELAY1
POP1;恢复现场
POP0
RET
;-----------------------------------------------------------------------------
DISPLAY1:
MOVA,R6
ANLA,#0FH
ADDA,#10H
MOVR5,A
MOVR4,#6
LCALLDISLED;显示小时低位
MOVA,R6
SWAPA
ANLA,#0FH
MOVR5,A
MOVR4,#7
LCALLDISLED;显示小时高位
MOVA,R1
ANLA,#0FH
ADDA,#10H
MOVR5,A
MOVR4,#4
LCALLDISLED;显示分钟低位
MOVA,R1
SWAPA
ANLA,#0FH
MOVR5,A
MOVR4,#5
LCALLDISLED;显示分钟高位
MOVA,R0
ANLA,#0FH
ADDA,#10H
MOVR5,A
MOVR4,#2
LCALLDISLED;显示秒低位
MOVA,R0
SWAPA
ANLA,#0FH
MOVR5,A
MOVR4,#3
LCALLDISLED;显示秒高位
RET
DISPLAY:
MOVA,R3
MOVB,#10
DIVAB
MOVR5,B
MOVR4,#0
LCALLDISLED;显示秒低位
MOVR5,A
MOVR4,#1
LCALLDISLED;显示秒高位
RET
;---------------------------------------------------------------------------------------
;LED显示常数表
LEDSEG:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;'0,1,2,3,4,5,6,7'
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;'8,9,A,B,C,D,E,F'
DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,087H;'0.,1.,2.,3.,4.,5.,6.,7.'
DB0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H;'8.,9.,A.,B.,C.,D.,E.,F.'
DB6DH,02H,08H,00H,59H,0FH,76H;'U,-,_,,I,O,P,'
;键盘键码表
KEYCODE:
DB30H,31H,32H,33H,34H,35H,36H,37H;'0,1,2,3,4,5,6,7'
DB38H,39H,3AH,3BH,3CH,3DH,3EH,3FH;'8,9,A,B,C,D,E,F'
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 交通 信号灯 模拟 系统 设计