单片机交通信号灯模拟系统设计.docx

上传人:b****2 文档编号:23229573 上传时间:2023-05-15 格式:DOCX 页数:16 大小:17.85KB
下载 相关 举报
单片机交通信号灯模拟系统设计.docx_第1页
第1页 / 共16页
单片机交通信号灯模拟系统设计.docx_第2页
第2页 / 共16页
单片机交通信号灯模拟系统设计.docx_第3页
第3页 / 共16页
单片机交通信号灯模拟系统设计.docx_第4页
第4页 / 共16页
单片机交通信号灯模拟系统设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

单片机交通信号灯模拟系统设计.docx

《单片机交通信号灯模拟系统设计.docx》由会员分享,可在线阅读,更多相关《单片机交通信号灯模拟系统设计.docx(16页珍藏版)》请在冰豆网上搜索。

单片机交通信号灯模拟系统设计.docx

单片机交通信号灯模拟系统设计

基于单片机的交通信号灯模拟系统设计

主要内容:

利用单片机中的定时器、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模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1