⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 new.asm

📁 实现交通灯功能的汇编程序.
💻 ASM
字号:
;说明,复位是数码管将显示68的计时初值,此时可按下启动键或设置键(后两键同时按下)
;而此时后两键是分别被屏蔽的,只有进入了设置状态才有效。进入设置状态后,当前正置数的
;数位相应数码管的小数点会亮。右边的键是增值键,每按一次相应的位会加一,中间的是跳位键
;设值时在个位和十位中跳转。
        BITF BIT 00H
	SETF BIT 01H
        WORKF BIT 03H
	ORG 0000H
	LJMP 0100H
	ORG 001BH
	LJMP 0350H

	ORG 0100H
	MOV TMOD,#11H
        MOV IE,#88H
	CLR BITF
	CLR SETF
        CLR WORKF
	MOV R2,#08H		;RESET THE SYSTEM,INITIAL THE VALUE 68S
	MOV R3,#06H
        MOV DPTR,#TAB
MAIN:	MOV A,R2
	MOVC A,@A+DPTR
	JNB SETF,CONTI
	JB BITF,CONTI
	ORL A,#20H
CONTI:  MOV P0,A
	MOV P2,#0AFH
	ORL P2,#0FH
	ACALL DELAY
	MOV A,R3
	MOVC A,@A+DPTR
	JNB SETF,CONTI2
	JNB BITF,CONTI2
	ORL A,#20H
CONTI2: MOV P0,A
	MOV P2,#5FH
	ORL P2,#0FH
	ACALL DELAY
        JB WORKF,MAIN
	MOV A,P2		;TEST THE KEY
	ORL A,#0F8H
	CPL A
	JZ MAIN
EASY:   MOV R0,#14H		;20MS DELAY
SUBEA:	ACALL DELAY
	DJNZ R0,SUBEA		;20MS DELAY
	MOV A,P2		;TEST THE KEY AGAIN
	ORL A,#0F8H
	CPL A
	JZ MAIN
	MOV 40H,A		;SAVE THE VALUE OF KEY
TEST:   CJNE A,#01H,TEST1
        CALL ADDP		;IF THE KEY "ADD" WAS PUSHED
	JMP FINISH
TEST1:  CJNE A,#02H,TEST2
	CALL SHIFT		;IF THE HDY "SHIFT" WAS PUSHED
	JMP FINISH
TEST2:  CJNE A,#03H,TEST3
	SETB SETF		;IF BOTH THE "ADD" AND "SHIFT" WERE BUSHED
	JMP FINISH		;IT MEANS ENTER THE SETTING MODE
TEST3:  CJNE A,#04H,FINISH
	CALL START
FINISH: JMP MAIN
;////////////////////////////////////////////////////////
DELAY:  MOV R6,#0AH             ;1MS DELAY
DL2:    MOV R7,#18H
DL1:    NOP
        NOP
	DJNZ R7,DL1
        DJNZ R6,DL2
        RET                     ;1MS DELAY
;////////////////////////////////////////////////////
        ORG 0250H
ADDP:   JB SETF,NEXT		;MASK THE KEY,WHEN IT IS NOW IN THE NORMAL MODE
        RET
NEXT:   MOV A,P2		;等待松键
	ORL A,#0F8H
	CPL A
	JNZ NEXT
	JB BITF,TWO            ;结果不为0说明当前的是十位
        CJNE R2,#09H,SMALL     ;检测个位是否已等于9
        MOV R2,#00H            ;等于9重置为0
        RET
SMALL:  INC R2                 ;不等于9自增
        RET
TWO:    CJNE R3,#09H,SMALL2    ;按键表示要置十位
        MOV R3,#00H
        RET
SMALL2: INC R3
        RET
;/////////////////////////////////////////////////////////
        ORG 0300H               ;位选择程序
SHIFT:  JB SETF,NEXT2
        RET
NEXT2:  MOV A,P2		;等待松键
	ORL A,#0F8H
	CPL A
	JNZ NEXT2
	JB BITF,SW              ;标心位为一则说明当前在十位
	SETB BITF               ;否则在个位则要变为十位
        RET
SW:     CLR BITF                ;否则选中个位
        RET
;////////////////////////////////////////////////////////
        ORG 0320H              ;确定按键响应程序
START:  CLR SETF
        SETB WORKF
NEXT3:  MOV A,P2		;等待松键
	ORL A,#0F8H
	CPL A
	JNZ NEXT3
	MOV R5,#32H        ;1000MS为一秒
        MOV 43H,R3
	MOV 42H,R2
	MOV TH1,#0B1H           ;20ms的初值
	MOV TL1,#0E0H
	SETB TR1
	MOV P1,#0EEH            ;亮红绿灯
	RET
;///////////////////////////////////////////////////////////
	ORG 0350H              ;倒计时程序
	DJNZ R5,GOON
	MOV A,R2
	ORL A,R3
 	JNZ NOEND		;1s到,计时没完成就跳转
	MOV R2,42H
	MOV R3,43H
        MOV A,P1
	RL A
        MOV P1,A               ;改变灯色
	ORL P1,#20H            ;灭黄灯
	MOV R5,#32H            ;重置20ms初值
	MOV TH1,#0B1H
	MOV TL1,#0E0H
	SETB TR1
        RETI
GOON:   MOV TH1,#0B1H          ;1s未到
	MOV TL1,#0E0H
	SETB TR1
	RETI
NOEND:  MOV A,R2
	ADD A,#0
	JNZ NOOVER
	MOV R2,#09H
	DEC R3
	JMP MOVEON
NOOVER: DEC R2
	JMP MOVEON
MOVEON:	CJNE R3,#00H,NOYL      ;判断是否还有五秒钟
	CJNE R2,#05H,NOYL
	ANL P1,#0DBH           ;是则亮黄灯11111100B
NOYL:	MOV R5,#32H
	MOV TH1,#0B1H		;重装1S计时初值
	MOV TL1,#0E0H
	SETB TR1
        RETI                    ;否则不变
;/////////////////////////////////////////////////////////////
   TAB: DB 0CFH
	DB 0CH
	DB 5BH
	DB 5DH
	DB 9CH
	DB 0D5H
	DB 0D7H
	DB 4CH
	DB 0DFH
	DB 0DDH

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -