📄 keyscan_3.asm
字号:
;///////////////////////////////////////////
;本程序源代码由单片机培训网提供.
;单片机培训网,让更多人学习单片机更容易.
;第一网址----www.mcuedu.com
;第二网址----http://51_train.nease.net
;创办人------刘永忠
;热线电话----(0755)27529998
;email-------aa815@163.com
;本程序实现铵键的移位显示并每按下"A"键一次闪烁位按个,十,百,千的顺序循环改变功能
;按键行列值表示如下:
;----P1.7---P1.6---P1.5---P1.4-------
;----03H----02H----01H----00H----P1.0
;----07H----06H----05H----04H----P1.1
;----0BH----0AH----09H----08H----P1.2
;----0FH----0EH----0DH----0CH----P1.3
;///////////////////////////////////////////
org 0000h
ajmp main
org 0030h
main:
clr p2.4
mov dptr,#tab ;将表头位置送入DPT
mov 30h,#00h ;将30显示单元清零
mov 31h,#00h ;将31显示单元清零
mov 32h,#00h ;将32显示单元清零
mov 33h,#00h ;将33显示单元清零
mov 35h,#00h ;软件计数器,决定闪烁的频率
mov 36h,#00h ;移位计数器,决定闪烁的位置(个十百千).
loop:
jb f0,kk1 ;f0若等于一则跳到KK1处
mov 35h,#00h ;将35H清零
kk2:
lcall display ;调用显示程序
lcall key ;调用键盘描程序
cpl a ;将A的值取反
jz loop ;无键按下则返回
mov a,34h ;有键按下将键值送入ACC
cjne a,#0ah,norp ;若A键未按下则返回到NORP处
setb f0 ;若A键按下则将F0值1
inc 36h ;将36H加一
ljmp loop ;返回主程序循环
kk1:
inc 35h ;将35H加一
mov a,35h ;送35H送入ACC
cjne a,#10,kk2 ;ACC中的值与10不相等跳转到KK2处
mov 35h,#00H ;相等则将35H清零
cpl 00h ;同时将标置位00H取反
ajmp kk2 ;返回到KK2处继续循环
norp:
mov 33h,32h ;将32H显示单元的内容送入33H
mov 32h,31h ;将31H显示单元的内容送入32H
mov 31h,30h ;将30H单元的内容送入31H
mov a,34h ;将键值送入ACC
mov 30h,a ;将ACC的值送入30H
ljmp loop ;返回主程序循环
display:
mov p2,#0fh ;将P2口置高电平
mov r7,#100 ;软件计数器赋值
dd1:
jnb 00h,dd1d ;00H若等于跳至dd1d处
mov a,36h ;将36H中的数送入ACC中
mov b,#04h ;将立即数4送入B中
div ab ;A 与了相除
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -