7.asm
来自「我的大学单片机课程案例和ppt」· 汇编 代码 · 共 95 行
ASM
95 行
ORG 0h
AJMP START
ORG 30h
START: MOV P0,#0FFH
MOV P2,#01H;选中第1个数码管进行显示
CLR 20H.0 ;标志位初始为0,K1键标志位
CLR 20H.1 ;K2标志位
CLR 20H.2 ;K3标志位
MOV DPTR,#TABLE;将数据表TABLE的首地址赋给DPTR
MOV TMOD,#01H ;定时器0方式1
MOV R6,#200 ;计溢出次数
SCANK: MOV P1,#0FFH
CLR P1.4 ;P1.4清0,扫描第1行
MOV A,P1 ;读键盘至A
ANL A,#00001111B
XRL A,#00001111B;判断A的低四位是否为1
JZ DISPLAY ;如果低四位为1,则无按键,转DISPLAY
LCALL DELAY10MS;延时10ms(去抖延时)
MOV A,P1 ;读键盘至A
ANL A,#00001111B
XRL A,#00001111B;判断A的低四位是否为1
JZ DISPLAY ;如果低四位为1,则无按键,转DISPLAY
MOV A,P1 ;读键盘至A
ANL A,#00001111B;保留低四位的结果
CJNE A,#00001101B,NOK1;不是K1键,转NOK1
SETB 20H.0 ;是K1键将标志位置1,0-9
CLR 20H.1 ;其他标志位清0
CLR 20H.2 ;
MOV R2,#0
MOV A,R2
MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
MOV P0,A ;送到P0口数码管显示
LJMP DISPLAY ;转显示子程序
NOK1: CJNE A,#00001011B,NOK2;不是K2键,转NOK2
SETB 20H.1 ;是K2键将标志位置1
CLR 20H.0 ;其他标志位清0
CLR 20H.2 ;
LJMP DISPLAY ;转显示子程序
NOK2: CJNE A,#00000111B,DISPLAY;不是K3键,转DISPLAY
SETB 20H.2 ;是K3键将标志位置1,9-0
CLR 20H.0 ;其他标志位清0
CLR 20H.1 ;
MOV R2,#9
MOV A,R2
MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
MOV P0,A ;送到P0口数码管显示
LJMP DISPLAY ;转显示子程序
DELAY10MS:
MOV R6,#10
D1: MOV R7,#250
D2: DJNZ R7,D2
DJNZ R6,D1
RET
DISPLAY:JB 20H.1,KEY2
JB 20H.0,KEY1
JB 20H.2,KEY3
KEY2: LJMP SCANK ;跳到SCANK,重新开始扫描
KEY1:
MOV TH0,#0ECH ;高八位,5ms
MOV TL0,#78H ;低八位
SETB TR0 ;启动定时器
WAIT1: JBC TF0,WAIT2
JMP WAIT1
WAIT2: DJNZ R6,SCANK ;溢出次数减1
MOV R6,#200 ;重新赋溢出次数
CLR TR0
INC R2
CJNE R2,#10,GOKEY1 ;判断是否显示数字加到10
MOV R2,0 ;如加到10,重新赋0
GOKEY1: MOV A,R2
MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
MOV P0,A ;送到P0口数码管显示
LJMP SCANK ;跳到SCANK,重新开始扫描
KEY3:
MOV TH0,#0ECH ;高八位,5ms
MOV TL0,#78H ;低八位
SETB TR0 ;启动定时器
WAIT3: JBC TF0,WAIT4
JMP WAIT3
WAIT4: DJNZ R6,KEY2
MOV R6,#200
CLR TR0
DEC R2
CJNE R2,#0FFH,GOKEY3 ;判断是否显示数字减到FF
MOV R2,#9 ;重新赋9
GOKEY3:
MOV A,R2
MOVC A,@A+DPTR ;将(A+DPTR)地址中的值赋给A
MOV P0,A ;送到P0口数码管显示
LJMP SCANK ;跳到SCANK,重新开始扫描
TABLE: DB 0C0H,0F9H,0A4H,0B0H
DB 99H,92H,82H,0F8H,80H,90H
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?