您好,欢迎来到客趣旅游网。
搜索
您的当前位置:首页单片机交通灯汇编代码

单片机交通灯汇编代码

来源:客趣旅游网


1、倒计时交通灯

源程序:

CMD_8279 EQU 0BF01

DA TA_8279 EQU 0BF00

ORG OOOOH

LJMP MAIN

ORG 000BH

LJMP INT_T0

ORG 0040H

MAIN: MOV SP,#50H

LCALL INIT8279

MOV 30H,#16

MOV 31H,#16

MOV 20H,#0

MOV TMOD,#01H

MOV TH0,#3CH

MOV TL0,#0B0H

MOV IE,#82H

CLR TR0

MOV 40H,#00H

;主循环用于检测有没有键按下,并取键值

STAR: LCALL DISPLAY

STAR0: LCALL SCAN_KEY

JNC STAR0

STAR1: LCALL KEY_NUM

CJNE A,#0AH,NEQ

MOV A,30H

SW AP A

ADD A,31H

MOV 50H,A

LCALL JIAOTONG

NEQ: JNC KEY_B

SJMP DA TAKEY

KEY_B: CJNE A,#0BH,STAR0

SETB 20H.1

LJMP STAR

DA TAKEY:

MOV 30H,31H

MOV 31H,A

LJMP STAR

;交通灯控制程序

JIAOTONG:MOV P1,#7EH

LCALL DISPLAY30S

JB 20H.1,MAIN

MOV P1,#0BDH

LCALL DISPLAY2S

JB 20H.1,MAIN

MOV P1,#0DBH

LCALL DISPLAY30S

JB 20H.1,MAIN

MOV P1,#0BDH

LCALL DISPLAY2S

JB 20H.1,MAIN

SJMP JIAOTONG

;8279初始化程序

INIT8279:MOV DPTR,#CMD_8279 MOV A,#34H

MOVX @DPTR,A

MOV A,#90H

MOVX @DPTR,A

INIT8279_1:LCALL CLEAR

MOV A,#90H

MOVX @DPTR,A

RET

CLEAR: MOV A,#0DEH

MOV DPTR,#CMD_8279

MOVX @DPTR,A

WAIT1: MOVX A,@DPTR

JB ACC.7,W AIT1

RET

;扫描键盘并取键值子程序

;键值存放在A中

SCAN_KEY:MOV DPTR,#CMD_8279

MOVX A,@DPTR

READ_FIFO:ANL A,#7

JZ NO_KEY

READ: MOV A,#40H

MOVX @DPTR,A

MOV DPTR,#DA TA_8279

MOVX A,@DPTR

SETB C

SCAN_KEY1:RET

NO_KEY: CLR C

SJMP SCAN_KEY1

KEY_NUM:ANL A,#3FH

RET

;显示子程序

DISPLAY:PUSH 07H

MOV R0,#30H

MOV DPTR,#LED_TAB

MOV P2,#0BFH

MOV R1,#01H

MOV A,#90H

MOVX @R1,A

MOV R1,#00H

MOV R7,#2

DISPLAY1:MOV A,@R0

MOVC A,@A+DPTR

MOVX @R1,A

INC R0

DJNZ R7,DISPLA Y1

POP 07H

RET

;共阳极LED字形码表

LED_TAB: DB 0C0H,0F9H,0A4H,0b0h,99h,92h,82h,0f8h;

DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EH;

DB 0FFH;

;中断服务子程序

INT_T0: PUSH ACC

MOV TH0,#3CH

MOV TL0,#0B0H

INC 40H

MOV A,40H

CJNE A,#20,INT_T01 MOV 40H,#00H

CLR C

CLR A

MOV A,#9AH

SUBB A,#01H

ADD A,60H

DA A

MOV 60H,A

INT_T01: POP ACC

RETI

;延时30S并显示子程序

DISPLAY30S:MOV 60H,50H LCALL DECSEC

RET

;延时2S并显示子程序

DISPLAY2S:MOV 60H,#02H LCALL DECSEC

RET

;自减1子程序

DECSEC: SETB TR0 MOV A,60H

MOV R0,#31H

LCALL P_BCD LCALL DISPLAY LCALL SCAN_KEY JC XIUGAI

CONTINUE:MOV A,60H CJNE A,#00H,DECSEC MOV R0,#31H

LCALL P_BCD LCALL DISPLAY SJMP OUT

OUT: RET

;拆字子程序

P-BCD: MOV @R0,A ANL A,#0FH

XCH A,@R0

DEC R0

SW AP A

ANL A,#0FH

MOV @R0,A

DEC R0

RET

END

Z8279 EQU 0FF82H ;8279 状态/命令口地址

D8279 EQU 0FF80H ;8279 数据口地址

LEDMOD EQU 00H ;左边输入八位字符显示

;外部译码键扫描方式,双键互锁

LEDFEQ EQU 33H ;扫描速率

LEDCLS EQU 0C1H ;清除显示RAM

LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址

ORG 0000H

LJMP START

ORG 0003H ;INT 0 中断入口地址

LJMP INT_0

ORG 001BH ;T1中断入口地址

LJMP INT_T1

ORG 0040H

START:

MOV SP,#60H

MOV TMOD,#10H ;置T1为方式1

SETB EX0 ;INT 0 中断有效

SETB IT0

SETB EA

MOV TL1,#00H ;延时50mS 常数

MOV TH1,#4cH

MOV R0,#2 ;延时100mS 常数

SETB TR1 ;启动T1

SETB ET1

setb pt1 ;必须设置定时器1的中断优先级高于外部中断0

LCALL INIT8279 ;初始化8279

LCALL STA TUS0 ;初始状态(都是红灯)

CIRCLE:

LCALL STA TUS1 ;南北绿灯,东西红灯

LCALL STA TUS2 ;南北绿灯闪转黄灯,东西红灯

LCALL STA TUS3 ;南北红灯,东西绿灯

LCALL STA TUS4 ;南北红灯,东西绿灯闪转黄灯

LJMP CIRCLE

INT_0:

PUSH PSW ;保护现场

PUSH 2

PUSH 90H

clr ex0

MOV P1,#0FH ;南北,东西都亮红灯

MOV R2,#100 ;延时10秒

LCALL DELAY_DISPLAY

setb ex0

POP 90H ;恢复现场

POP 2

POP PSW

RETI

INT_T1:

PUSH ACC

PUSH PSW

CLR TR1

MOV TL1,#00H ;延时50mS 常数

MOV TH1,#4CH

SETB TR1

DJNZ R0,EXIT

MOV R0,#2 ;延时100ms 常数

DEC R2

EXIT:

POP PSW

POP ACC

RETI

STA TUS0: ;南北红灯,东西红灯

MOV P1,#0FH

MOV R2,#10 ;延时1秒

LCALL DELAY_DISPLAY

RET

STA TUS1: ;南北绿灯,东西红灯

MOV P1,#96H ;南北绿灯,东西红灯

MOV R2,#200 ;延时20秒

LCALL DELAY_DISPLAY

RET

STA TUS2: ;南北绿灯闪转黄灯,东西红灯

MOV R3,#03H ;绿灯闪3次

FLASH:

MOV P1,#9FH

MOV R2,#03H

LCALL DELAY_DISPLAY

MOV P1,#96H

MOV R2,#03H

LCALL DELAY_DISPLAY

DJNZ R3,FLASH

MOV P1,#06H ;南北黄灯,东西红灯

MOV R2,#10 ;延时1秒

LCALL DELAY_DISPLAY

RET

STA TUS3: ;南北红灯,东西绿灯

MOV P1,#69H

MOV R2,#200 ;延时20秒

LCALL DELAY_DISPLAY

RET

STA TUS4: ;南北红灯,东西绿灯闪转黄灯

MOV R3,#03H ;绿灯闪3次

FLASH1:

MOV P1,#6FH

MOV R2,#03H

LCALL DELAY_DISPLAY

MOV P1,#69H

MOV R2,#03H

LCALL DELAY_DISPLAY

DJNZ R3,FLASH1

MOV P1,#09H ;南北红灯,东西黄灯

MOV R2,#10 ;延时1秒

LCALL DELAY_DISPLAY

NOP

RET

INIT8279: ;8279初始化子程序

PUSH DPH ;保存现场

PUSH DPL

PUSH ACC

LCALL DELAY;延时

MOV DPTR ,#Z8279

MOV A,#LEDMOD ;置8279工作方式

MOVX @DPTR,A

MOV A,#LEDFEQ ;置键盘扫描速率

MOVX @DPTR,A

MOV A,#LEDCLS ;清除LED 显示

MOVX @DPTR,A

LCALL DELAY;延时

POP ACC ;恢复现场

POP DPL

POP DPH

RET

;显示字符子程序

;输入: R4,位置R5,值

DISLED:

PUSH DPH ;保存现场

PUSH DPL

PUSH ACC

MOV A,#LEDWR0 ;置显示起始地址

ADD A,R4 ;加位置偏移量

MOV DPTR,#Z8279

MOVX @DPTR,A;设定显示位置

MOV DPTR,#LEDSEG ;置显示常数表起始位置

MOV A,R5

MOVC A,@A+DPTR ;查表

MOV DPTR,#D8279

MOVX @DPTR,A;显示数据

POP ACC ;恢复现场

POP DPL

POP DPH

RET

DELAY: ;延时子程序

PUSH 0 ;保存现场

PUSH 1

MOV 0,#0H

DELAY1:

MOV 1,#0H

DJNZ 1,$

DJNZ 0,DELAY1

POP 1 ;恢复现场

POP0

RET

DELAY_DISPLAY: ;延时和显示时间子程序

PUSH 1

PUSH 0

push acc

loopwait: MOV b,#10

MOV a,2

div ab

MOV b,#10

div ab

MOV r4,#1

MOV r5,a

LCALL DISLED ;显示秒高位

MOV r4,#0

MOV r5,b

LCALL DISLED ;显示秒低位

MOV a,2

jnz loopwait ;延时等待

pop acc

POP 0

POP 1

RET

LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'

DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'

END

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- kqyc.cn 版权所有 赣ICP备2024042808号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务