51单片机数码管显示函数分享(8051汇编)

目录

电路图

源代码

代码直接显示效果

变量解释

函数使用

函数主要框架

其余函数介绍


电路图

标号相同的位置是相连的,也可以直接用线相连接,数码管为共阳极

源代码

cpp 复制代码
ORG 00H
	SMGPTR DATA 30H
	DISDATA DATA 31H
		//DISDATA: 31H - 36H (DATA Arr)
	SMGBIN DATA 40H
	TEMP1 DATA 41H
	TEMP2 DATA 42H
	TEMP3 DATA 43H
	LOOP:
	MOV DISDATA+0,#2
	MOV DISDATA+1,#3
	MOV DISDATA+2,#4
	MOV DISDATA+3,#5
	MOV DISDATA+4,#6
	MOV DISDATA+5,#7
	
	LCALL DISPLAY
			
	SJMP LOOP
	/////////////////////////
	DISPLAY:
		MOV SMGBIN,#01111111B
		MOV SMGPTR,#0
		
		DIS1:
			MOV A,SMGBIN
			RL A
			MOV SMGBIN,A
			MOV P2,SMGBIN	//BIT CHOICE
			
			MOV A,SMGPTR
			ADD A,#DISDATA
			MOV R0, A
			MOV TEMP1,@R0  //DATA CHOICE
			
			MOV DPTR,#TAB
			MOV A,TEMP1
			MOVC A,@A+DPTR
			MOV P0,A
			
			LCALL DELAY
			
			INC SMGPTR
			MOV A,SMGPTR
			CJNE A,#6,DIS1
	RET
	/////////////////////////
	TESTDISPLAY:
		MOV P2,#11111101B
		MOV A,#5
		MOV DPTR,#TAB
		MOVC A,@A+DPTR
		MOV P0,A
	RET
	
	/////////////////////////
	TESTDISPLAY1:
	MOV SMGBIN,#01111111B
		MOV SMGPTR,#0
		
		MOV A,SMGBIN
		RL A
		MOV SMGBIN,A
		MOV P2,A		//BIT CHOICE
		
		MOV A,SMGPTR
		ADD A,#DISDATA
		MOV R0, A
		MOV TEMP1, @R0  //DATA CHOICE
		
		MOV DPTR,#TAB
		MOV A,TEMP1
		MOVC A,@A+DPTR
		MOV P0,A
	RET
	/////////////////////////
	DELAY:MOV R5,#1   //1->10ms  
	   X3:MOV R6,#20
	   X2:MOV R7,#248
	   X1:DJNZ R7,X1
		  DJNZ R6,X2
		  DJNZ R5,X3
	RET	 
	////////////////////////
	TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
	
END
	
	
	

代码直接显示效果

变量解释

DISDATA->数组,从31H到36H六位分别存放数码管六位各个位的显示数字

SMGPTR->存放数组指针,用于在循环里作为DISDATA数组的索引,通过SMGPTR从0变到5,找到DISDATA[0]到DISDATA[5]并且分别显示到数码管上

SMGBIN->数码管位选,通过赋初始值0111 1111B,将其通过RL操作符向左循环移位,获得1111 1110B显示第一位,1111 1101B显示第二位,一直到显示完成六位数码管

TEMP1~3作为临时变量,在函数中作为中转的中间变量

TAB->存放数码管0~9的显示,TAB[0]对应0,TAB[1]对应1...一直到TAB[9]对应9,这里还有一位TAB[10]对应的是空,即什么都不显示

函数使用

使用比较简单,如上:只要MOV DISDATA+2,#4,就可以访问并且赋值DISDATA[2](即DISDATA数组以及数码管的第三位)。使用时就按照这种格式写就行。

**如果要让某位什么都不显示,直接赋值10就行,**对应码表里面就是空

然后在赋值完成之后就LCALL DISPLAY调用DISPLAY函数就行

函数主要框架

主要框架就是用SMGPTR作为计数器循环六次,然后每次都进行数码管的位选+段选+延时10ms显示,完成六个数码管的分别显示,显示完成六个数码管就退出函数

其余函数介绍

DISPLAY:数码管六位循环显示的函数

TESTDISPLAY:数码管显示第一位,并且显示5的最简单代码

TESTDISPLAY1:运用DISPLAY函数框架写的一次函数显示DISDATA第0位,数码管第一位的代码

DELAY:10ms的延时函数

相关推荐
花阴偷移2 小时前
逆向基础--汇编基础(DOS安装与介绍) (06)
汇编
LaoZhangGong1239 小时前
STM32 F103外部晶振8MHz改为12MHz,如何配置?
c语言·stm32·单片机·嵌入式硬件·晶振
GilgameshJSS10 小时前
STM32H743-ARM例程41-FMC_INDEP
arm开发·stm32·单片机·嵌入式硬件
某林21212 小时前
如何使用ROS 2与STM32进行串口通信,并实现通过键盘按键‘1’来控制LED灯开关
stm32·嵌入式硬件·计算机外设
花阴偷移12 小时前
逆向基础--汇编源程序认识(08)
汇编
hazy1k12 小时前
51单片机基础-PWM、频率与占空比
stm32·单片机·嵌入式硬件·51单片机
逆小舟12 小时前
【STM32】智能排队控制系统
stm32·单片机·嵌入式硬件
GilgameshJSS13 小时前
STM32H743-ARM例程38-UART-IAP
c语言·arm开发·stm32·单片机·嵌入式硬件
清风66666614 小时前
基于单片机的交流功率测量仪设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业