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的延时函数

相关推荐
鸽芷咕7 小时前
DOSBox 汇编环境搭建完整教程:安装配置 + MASM/LINK/DEBUG 工具链配置详解
汇编
Wave84510 小时前
基于 STM32 + ESP8266 + W25Q64 的双核 OTA 底层架构总结
stm32·嵌入式硬件·架构
xiangw@GZ11 小时前
WiFi 全世代(WiFi1~WiFi7)技术规范与核心参数总结
嵌入式硬件
振南的单片机世界11 小时前
CPU时钟:频率越高跑越快,但物理极限在“拖后腿”
stm32·单片机·嵌入式硬件
普中科技12 小时前
【普中 51-Ai8051 开发攻略】-- 第 20 章 输入捕获实验
单片机·嵌入式硬件·输入捕获·pca·普中科技·ai8051u·aicube
d111111111d12 小时前
直流电机位置式 PID 控制 和 舵机的区别
笔记·stm32·单片机·嵌入式硬件·学习
d111111111d15 小时前
了解Modbus
网络·笔记·stm32·单片机·嵌入式硬件·学习
三佛科技-1341638421215 小时前
主控FT32F031便携式吸尘器方案,迷你手持吸尘器MCU控制方案开发
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
踏着七彩祥云的小丑17 小时前
嵌入式——认识电子元器件——微动开关系列
单片机·嵌入式硬件