1、单片机交通灯汇编代码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 ST
2、AR0: 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 MO
3、V 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
4、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 ;显示子程序 D
5、ISPLAY: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 0FF
6、H; ;中断服务子程序 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子程序
7、 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
8、 状态/命令口地址 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
9、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
10、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 常数
11、 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,#9
12、6H 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
13、 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
14、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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1