交通灯程序大全.docx
- 文档编号:12070926
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:30
- 大小:21.05KB
交通灯程序大全.docx
《交通灯程序大全.docx》由会员分享,可在线阅读,更多相关《交通灯程序大全.docx(30页珍藏版)》请在冰点文库上搜索。
交通灯程序大全
程序1:
ORG0000H
LJMPSTART
ORG0040H
START:
MOVSP,#60H
LCALLSTATUS0;初始状态(都是红灯)
CIRCLE:
LCALLSTATUS1;南北绿灯,东西红灯
LCALLSTATUS2;南北绿灯闪转黄灯,东西红灯
LCALLSTATUS3;南北红灯,东西绿灯
LCALLSTATUS4;南北红灯,东西绿灯闪转黄灯
LJMPCIRCLE
STATUS0:
;南北红灯,东西红灯
;MOVDPTR,#8300H
;MOVA,#0FH
;MOVX@DPTR,A
movp2,#0f6h
MOVR2,#10;延时1秒
LCALLDELAY
RET
SECOND1EQU30H;东西路口计时寄存器
SECOND2EQU31H;南北路口计时寄存器
DBUFEQU40H;显示码缓冲区1
TEMPEQU44H;显示码缓冲区2
LED_G1BITP2.1;东西路口绿灯
LED_Y1BITP2.2;东西路口黄灯
LED_R1BITP2.3;东西路口红灯
LED_G2BITP2.4;南北路口绿灯
LED_Y2BITP2.5;南北路口黄灯
LED_R2BITP2.6;南北路口红灯
ORG0000H
LJMPSTART
ORG0100H
START:
MOVTMOD,#01H;置T0为工作方式1
MOVTH0,#3CH;置T0定时初值50ms
MOVTL0,#0B0H
CLRTF0
SETBTR0;启动T0
CLRA
MOVP1,A;关闭不相关的LED
;***************************************************
LOOP:
MOVR2,#20;置1s计数初值,50ms*20=1s
MOVR3,#20;红灯亮20s
MOVSECOND1,#25;东西路口计时显示初值25s
MOVSECOND2,#25;南北路口计时显示初值25s
LCALLDISPLAY
LCALLSTATE1;调用状态1
WAIT1:
JNBTF0,WAIT1;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR2,WAIT1;判断1s到否?
未到继续状态1
MOVR2,#20;置50ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT1;状态1维持20s
;*******************************************
MOVR2,#5;置50ms计数初值5*4=20
MOVR3,#3;绿灯闪3s
MOVR4,#4;闪烁间隔200ms
MOVSECOND1,#5;东西路口计时显示初值5s
MOVSECOND2,#5;南北路口计时显示初值5s
LCALLDISPLAY
WAIT2:
LCALLSTATE2;调用状态2
JNBTF0,WAIT2;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR4,WAIT2;判断200ms到否?
未到继续状态2
CPLLED_G1;东西绿灯闪
MOVR4,#4;闪烁间隔200ms
DJNZR2,WAIT2;判1s到否?
未到继续状态2
MOVR2,#5;置50ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT2;状态2维持3s
;****************************************
MOVR2,#20;置50ms计数初值
MOVR3,#2;黄灯闪2s
MOVSECOND1,#2;东西路口计时显示初值2s
MOVSECOND2,#2;南北路口计时显示初值2s
LCALLDISPLAY
WAIT3:
LCALLSTATE3;调用状态3
JNBTF0,WAIT3;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR2,WAIT3;判断1s到否?
未到继续状态3
MOVR2,#20;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT3;状态3维持2s
;*******************************************
MOVR2,#20;置50ms计数初值
MOVR3,#20;红灯闪20s
MOVSECOND1,#25;东西路口计时显示初值25s
MOVSECOND2,#25;南北路口计时显示初值25s
LCALLDISPLAY
WAIT4:
LCALLSTATE4;调用状态4
JNBTF0,WAIT4;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR2,WAIT4;判断1s到否?
未到继续状态4
MOVR2,#20;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT4;状态4维持20s
;*******************************************
MOVR2,#5;置50ms计数初值
MOVR4,#4;红灯闪20ms
MOVR3,#3;绿灯闪3s
MOVSECOND1,#5;东西路口计时显示初值5s
MOVSECOND2,#5;南北路口计时显示初值5s
LCALLDISPLAY
WAIT5:
LCALLSTATE5;调用状态5
JNBTF0,WAIT5;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR4,WAIT5;判断200ms到否?
未到继续状态5
CPLLED_G2;南北绿灯闪
MOVR4,#4;闪烁200ms
DJNZR2,WAIT5;判断1s到否?
未到继续状态5
MOVR2,#5;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT5;状态5维持3s
;****************************************
MOVR2,#20;置50ms计数初值
MOVR3,#2;红灯闪2s
MOVSECOND1,#2;东西路口计时显示初值2s
MOVSECOND2,#2;南北路口计时显示初值2s
LCALLDISPLAY
WAIT6:
LCALLSTATE6;调用状态6
JNBTF0,WAIT6;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR2,WAIT6;判断1s到否?
未到继续状态6
MOVR2,#20;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT6;状态6维持2s
LJMPLOOP;大循环
;**********************************************
STATE1:
;状态1
SETBLED_G1;东西路口绿灯亮
CLRLED_Y1
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
RET
STATE2:
;状态2
CLRLED_Y1
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
RET
STATE3:
;状态3
CLRLED_G1
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
SETBLED_Y1;东西路口绿灯亮
RET
STATE4:
;状态4
CLRLED_G1
CLRLED_Y1
SETBLED_R1;东西路口红灯亮
SETBLED_G2;南北路口绿灯亮
CLRLED_Y2
CLRLED_R2
RET
STATE5:
;状态5
CLRLED_G1
CLRLED_Y1
SETBLED_R1;东西路口红灯亮
CLRLED_Y2
CLRLED_R2
RET
STATE6:
;状态6
CLRLED_G1
CLRLED_Y1
SETBLED_R1;东西路口红灯亮
CLRLED_G2
CLRLED_R2
SETBLED_Y2;南北路口红灯亮
RET
DISPLAY:
;数码显示
MOVA,SECOND1;东西路口计时寄存器
MOVB,#10;16进制数拆成两个10进制数
DIVAB
MOVDBUF+3,A
MOVA,B
MOVDBUF+2,A
MOVA,SECOND2;南北路口计时寄存器
MOVB,#10;16进制数拆成两个10进制数
DIVAB
MOVDBUF+1,A
MOVA,B
MOVDBUF,A
MOVR0,#DBUF
MOVR1,#TEMP
MOVR7,#4
DP10:
MOVDPTR,#LEDMAP
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCR0
INCR1
DJNZR7,DP10
MOVR0,#TEMP
MOVR1,#4
DP12:
MOVR7,#8
MOVA,@R0
DP13:
RLCA
MOVP3.0,C
CLRP3.1
SETBP3.1
DJNZR7,DP13
INCR0
DJNZR1,DP12
RET
LEDMAP:
DB3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5
DB7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,B
DB58H,5EH,7BH,71H,0,40H;C,D,E,F,,-
END
STATUS1:
;南北绿灯,东西红灯
;MOVDPTR,#08300H
;MOVA,#5AH;南北绿灯,东西红灯
;MOVX@DPTR,A
movp2,#0deh
movr7,#10
next:
MOVR2,#10;延时10秒
LCALLDELAY
jnbp2.7,ash0
jnbp2.6,ash1
djnzr7,next
RET
STATUS2:
;南北绿灯闪转黄灯,东西红灯
MOVDPTR,#8300H
MOVR3,#03H;绿灯闪3次
FLASH:
MOVA,#5FH
MOVX@DPTR,A
movp2,#0efh
MOVR2,#03H
LCALLDELAY
MOVA,#5AH
MOVX@DPTR,A
movp2,#0efh
MOVR2,#03H
LCALLDELAY
DJNZR3,FLASH
MOVA,#0AH;南北黄灯,东西红灯
MOVX@DPTR,A
movp2,#0eeh
MOVR2,#10;延时1秒
LCALLDELAY
RET
STATUS3:
;南北红灯,东西绿灯
MOVDPTR,#8300H
MOVA,#0A5H
MOVX@DPTR,A
movp2,#0f3h
MOVR7,#5
Next:
MOVR2,#10;延时5秒
LCALLDELAY
Jnbp2.7,ash0
Jnbp2.6,ash1
Djnzr7,next
RET
STATUS4:
;南北红灯,东西绿灯闪转黄灯
MOVDPTR,#8300H
MOVR3,#03H;绿灯闪3次
FLASH1:
MOVA,#0AFH
MOVX@DPTR,A
movp2,#0f3h
MOVR2,#03H
LCALLDELAY
MOVA,#0A5H
MOVX@DPTR,A
movp2,#0f3h
MOVR2,#03H
LCALLDELAY
DJNZR3,FLASH1
MOVA,#05H;南北红灯,东西黄灯
MOVX@DPTR,A
movp2,#0f5h
MOVR2,#10;延时1秒
LCALLDELAY
NOP
RET
ash0:
movdptr,#8300h
mova,#0a5h;南北红灯,东西绿灯
movx@dptr,a
movp2,#0f3h
lcalldelay
jnbp2.7,ash0
ret
ash1:
MOVDPTR,#08300H
MOVA,#5AH;南北绿灯,东西红灯
MOVX@DPTR,A
movp2,#0deh
lcalldelay
jnbp2.6,ash1
ret
DELAY:
;延时子程序
PUSH2
PUSH1
PUSH0
DELAY1:
MOV1,#00H
DELAY2:
MOV0,#0B2H
DJNZ0,$
DJNZ1,DELAY2;延时100mS
DJNZ2,DELAY1
POP0
POP1
POP2
RET
END
程序2:
ORG0000H;
LJMPMAIN;
ORG0003H;
LJMPZD0;
ORG0013H;
LJMPZD1;
MAIN:
MOVSP,#70H;
MOVIE,#85H;
LOOP:
CLRP1.0;
SETBP1.1;
SETBP1.2;
SETBP1.3;
SETBP1.4;
CLRP1.5;
ACALLDEL90S;
ACALLYELL;
ACALLDEL2S;
SETBP1.0;
SETBP1.1;
CLRP1.2;
CLRP1.3;
SETBP1.4;
SETBP1.5;
ACALLDEL90S;
ACALLYELL;
ACALLDEL2S;
SJMPLOOP;
YELL:
SETBP1.0;
CLRP1.1;
SETBP1.2;
SETBP1.3;
CLRP1.4;
SETBP1.5;
RET;
ZD0:
CLRP1.0;
SETBP1.1;
SETBP1.2;
SETBP1.3;
SETBP1.4;
CLRP1.5;
JNBP3.2,ZDO;
RETI;
ZD1:
SETBP1.0;
SETBP1.1;
CLRP1.2;
CLRP1.3;
SETBP1.4;
SETBP1.5;
JNBP3.3,ZD1;
RETI;
DEL2S:
MOVR5,#10H;
F3:
MOVR6,#0FFH;
F2:
MOVR7,#0E1H;
F1:
DJNZR7,F1;
DJNZR6,F2;
DJNZR5,F3;
RET;
DEL90S:
MOVR5,#03H;
F6:
MOVR6,#0F0H;
F5:
MOVR7,#0F0H;
F4:
MOVR0,#0F0H;
DJNZR0,$;
DJNZR7,F4;
DJNZR6,F5;
DJNZR5,F6;
RET;
END;
程序4:
数码管为2位7段共阴数码管,其段码经驱动芯片后接P0口,位码接P2^0位与P2^1位。
不当地方,敬请批评指正!
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=113;y>0;y--);
}
voidmain()
{
ucharn,i,j;
i=0;
j=4;
while
(1)
{
n=100;
while(n)
{
n--;
P2=0xfe;
P0=table[i];
delay(5);
P2=0xff;
P2=0xfd;
P0=table[j];
delay(5);
P2=0xff;
}
if(i==0x00)
{
i=0x0a;
j=j-1;
}
if(j==0x00)
{
while
(1);
}
i=i-1;
}
}
程序5:
;------------------------------------
;程序实现功能
;西南北路口直行与转弯交替通行,数码管显示直行通行倒计时,红绿黄灯显示包括人行道在内的道路交通状态。
;某一方向道路拥挤时,可以人工控制调节东西南北方向通行时间。
;紧急情况时,各路口交通灯显示红灯,数码管保持数据不变。
;工作寄存器及存储单元分配
;1.工作寄存器
;R2设置为定时器定时中断次数,R6、R7用于延时程序中的寄存器
;2.片内存储单元
;30H、31H作为两组数码管显示数据存储单元;32H、33H作为交通灯初始状态存储单元;40H、41H作为交通灯显示数据存储单元
;3.标志位
;00H:
南北通行标志位;01H:
东西通行标志位;02H:
紧急事件标志位
;-----------------------------------
SNFEQU00H;;;南北通行标志位
EWFEQU01H;;;东西通行标志位
URFEQU02H;;;紧急事件标志位
ORG0000H
LJMPMAIN;;;上电转主程序
ORG000BH;;;定时中断入口
LJMPDSZD
ORG0003H;;;紧急中断入口
LJMPURZD
ORG0030H
MAIN:
LCALLINIT;;;调用初始化子程序
LOOP:
LCALLDIS;;;循环执行显示子程序
AJMPLOOP
;///////////初始化程序
INIT:
SETBSNF
SETBEWF
SETBURF
MOVR2,#20;;;定时器中断20次为1s
MOVTMOD,#01H;;;初始化定时器
MOVTL0,#0B0H
MOVTH0,#3CH
SETBEA;;;开定时中断与紧急中断
SETBET0
SETBTR0
SETBEX0
SETBIT0;;;设置中断程控方式
MOVDPTR,#TAB;;;数值首地址放入DPTR中
MOV40H,#40;;;东南西北通行时间设置
MOV41H,#40
MOV30H,#40;;;通行时间初始化
MOV31H,#60
MOVP0,#4CH;;;初始化时南北通行并把交通灯状态分别放在32H和33H中
MOV32H,#4CH
MOVP2,#15H
MOV33H,#15H
RET
;////////////显示子程序
DIS:
MOVP3,#0DFH;;;选中南北方向的十位数码管
MOVA,30H;;;把显示数据送人数码管显示
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP1,A;;;
LCALLD1MS
MOVP3,#0EFH;;;选中南北方向的个位数码管
MOVA,B;;;送入数码管显示
MOVCA,@A+DPTR
MOVP1,A
LCALLD1MS
MOVP3,#7FH;;;选中第东西方向的十位数码管
MOVA,31H;;;送入数码管显示
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP1,A
LCALLD1MS
MOVP3,#0BFH;;;选中第东西方向的个位数码管
MOVA,B
MOVCA,@A+DPTR
MOVP1,A
LCALLD1MS
SETBP3.0
SETBP3.1
JNBP3.0,DIS_S;;;查询是否第一个按键按下
JNBP3.1,DIS_E;;;查询是否第二个按键按下
AJMPDIS_R;;;没有键按下则返回
DIS_S:
LCALLD5MS;;;按键去抖
JNBP3.0,DIS_SN
AJMPDIS_R
DIS_SN:
MOV40H,#50;;;对通行时间从新分配,南北通行时间加长
MOV41H,#30
AJMPDIS_R
DIS_E:
LCALLD5MS;;;按键去抖
JNBP3.1,DIS_EW
AJMPDIS_R
DIS_EW:
MOV40H,#30;;;东西通行时间加长
MOV41H,#50
DIS_R:
RET
;///////定时中断处理程序
DS_C:
LJMPDS_R;;;接力跳转
DSZD:
PUSHACC;;;保护现场
PUSHPSW
CLRTR0;;;关定时器及中断标志位并重新赋值
CLRTF0
MOVTL0,#0B0H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 程序 大全