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

📄 51+Ҧ

📁 AT89C51汇编语言例子大全
💻
字号:
/***************************************************************************
标题:	键盘程序+数码管显示
效果:	按下按键,加(或减)数码管显示内容
本店网站      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 + -