📄 51+Ҧ
字号:
/***************************************************************************
标题: 键盘程序+数码管显示
效果: 按下按键,加(或减)数码管显示内容
本店网站 http://xxdpj.taobao.com/
以芯换心 竭诚为您服务 您学习单片机的好帮手
近期本店有很多优惠活动 有空就进来看看吧
http://xxdpj.taobao.com/
技术支持QQ:412150384
说明: 本程序直接采用分时扫描法,本板设计了6个按键,分别接于P37-P21引脚,
按键都以接0方式触发(即按键另一脚接GND
******************************************************************************/
;脚功能定义
KEY1 EQU P3.7 ;定义按键1
KEY2 EQU P3.6 ;定义按键2
KEY3 EQU P3.5 ;定义按键3
KEY4 EQU P3.4 ;定义按键4
KEY5 EQU P3.3 ;定义按键5
KEY6 EQU P3.2 ;定义按键5
SMG_q EQU P1.0 ;定义数码管阳级控制脚,千位
SMG_b EQU P1.1 ;定义数码管阳级控制脚,百位
SMG_s EQU P1.2 ;定义数码管阳级控制脚,十位
SMG_g EQU P1.3 ;定义数码管阳级控制脚,个位
;定义数据RAM空间
LDB EQU 30H ;定义一个变量存放显示值
OLDKEY EQU 31H ;保存按键接口状态
;数据存放
ORG 0100
TABLE: DB 0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H ;表:共阳数码管 0-9
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV LDB,#0 ;变量复值0
M0: LCALL READKEY ;
JZ M10
DEC A ;
JNZ M1 ;按下1键
INC LDB ;显示数据加1处理
SJMP M10 ;处理后转入显示
M1: DEC A ;处理按键2按下,与上类同
JNZ M2
DEC LDB ;减1处理
SJMP M10
M2: DEC A ;处理键3按下
JNZ M3
MOV A,LDB ;将变量加10处理
ADD A,#10
MOV LDB,A
SJMP M10
M3: DEC A ;按键4按下
JNZ M4
MOV A,LDB ;将变量减10处理
SUBB A,#10
MOV LDB,A
SJMP M10
M4: DEC A ;按键5按下
JNZ M5
MOV LDB,A ;将变量清0
SJMP M10
M5: DEC A ;按键6按下
JNZ M10
MOV A,#0XFF ;
MOV LDB,A ;将变量赋值为最大
M10: MOV A,LDB ;用A做参数传递到显示子程序进行显示
LCALL DISPLAY ;调用显示子程序
LJMP M0 ;循环扫描按键
;读键值---------------------------------------------
READKEY:
MOV A,P3 ;
ANL A,#0XFC ;
CJNE A,OLDKEY,K01;
CLR A ;
SJMP K10 ;
K01: MOV R7,#10 ;延时约10MS,消抖动
CALL DELAYM ;
MOV A,P3 ;
ANL A,#0XFC ;
CJNE A,#0XFC,K02 ;
SJMP K09 ;
K02: MOV OLDKEY,A ;
JB KEY1,K1 ;
MOV A,#1 ;
SJMP K10 ;
K1: JB KEY2,K2 ;
MOV A,#2 ;
SJMP K10 ;
K2: JB KEY3,K3 ;
MOV A,#3 ;
SJMP K10 ;
K3: JB KEY4,K4 ;
MOV A,#4 ;
SJMP K10 ;
K4: JB KEY5,K5 ;
MOV A,#5 ;
SJMP K10 ;
K5: JB KEY6,K10 ;
MOV A,#6 ;
SJMP K10 ;
K09: CLR A ;
MOV OLDKEY,#0XFC;
K10: RET;
;延时子程序,可由R7控制时间量--------------------------
DELAYM: MOV R6,#200
DJNZ R6,$
DJNZ R7,DELAYM
RET
;数码管显示子程序-------------------------------------
DISPLAY:MOV DPTR,#TABLE
MOV B,#100
DIV AB
CLR SMG_b ;选择百位数码管
MOVC A,@A+DPTR ;查表输出定义好的数码管段值到P0口,显示相应的内容
MOV P0,A
LCALL DELAY ;延时,停留一会,让人眼感触到它的亮度
MOV P0,#0FFH ;清除数码管显示,因是共阳型,所以不是0
SETB SMG_b ;关闭百位数码管
MOV A,B
MOV B,#10
DIV AB
CLR SMG_s ;选择十位数码管
MOVC A,@A+DPTR ;查表输出定义好的数码管段值到P0口,显示相应的内容
MOV P0,A
LCALL DELAY ;延时,停留一会,让人眼感触到它的亮度
MOV P0,#0FFH ;清除数码管显示,因是共阳型,所以不是0
SETB SMG_s ;关闭十位数码管
CLR SMG_g ;选择个位数码管
MOV A,B ;个位显示
MOVC A,@A+DPTR ;查表输出定义好的数码管段值到P0口,显示相应的内容
MOV P0,A
LCALL DELAY ;延时,停留一会
MOV P0,#0FFH ;清除数码管显示
SETB SMG_g ;关闭个位数码管
RET
;短延时子程序,-----------------------------------------
DELAY: MOV R7,#10 ;延时子程序
DJNZ R7,$
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -