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,找到DISDATA0到DISDATA5并且分别显示到数码管上

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

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

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

函数使用

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

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

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

函数主要框架

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

其余函数介绍

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

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

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

DELAY:10ms的延时函数

相关推荐
u1521096484914 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150014 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼14 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi14 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
科芯创展14 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司14 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑14 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习
望眼欲穿的程序猿14 天前
读取芯片内部温度传感器
嵌入式硬件·rust
望眼欲穿的程序猿14 天前
ADC 模拟电压采集
嵌入式硬件·rust
IT方大同14 天前
(嵌入式操作系统)信号量
嵌入式硬件·c#