基于51单片机的数码管的显示方法

本文介绍了数码管动态显示的原理,通过定时器实现连续扫描,利用人眼余晖效应达到稳定显示效果。重点讲解了Nixie_Loop函数和Nixie_SetBuf/Nixie_Buf数组的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预备知识

1.数码管的显示共有两种方法---静态的与动态的

动态的显示方法是需要不断刷新的

本文主要阐述的是动态显示的方法

代码

#include <REGX52.H>
#include "Delay.h"

unsigned char Nixie_Buf[9]={10,10,10,10,10,10,10,10,10};//此函数调用NixieTable()函数Nixie_Loop中调用
//第十位即为不显示为0x00

unsigned char NixieTable[13]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x40,0x08};
//点才是第一个然后往后推
//.,g,f,e,d,c,b,a,//0到9,不显示,显示中间一段,显示底下一段

void Nixie_SetBuf(unsigned char Location,Number)//配置数码数组
{
	Nixie_Buf[Location]=Number;//制位Nixie_Buf
}

void Nixie_Scan(unsigned char Location,Number)  //数码管需要循环扫描才能正常显示
{
	P0=0x00;//清零 消影 单片机运行速度过快防止数据串到下一个数据位
	switch(Location)位选
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;//7
		case 2:P2_4=1;P2_3=1;P2_2=0;break;//6
		case 3:P2_4=1;P2_3=0;P2_2=1;break;//5
		case 4:P2_4=1;P2_3=0;P2_2=0;break;//4
		case 5:P2_4=0;P2_3=1;P2_2=1;break;//3
		case 6:P2_4=0;P2_3=1;P2_2=0;break;//2
		case 7:P2_4=0;P2_3=0;P2_2=1;break;//1
		case 8:P2_4=0;P2_3=0;P2_2=0;break;//0
	}
	P0=NixieTable[Number];//段选
}

void Nixie_Loop(void)           //2ms调用
{
	static unsigned char i=1;	//定时器充当Delay的角色 充分显示
	Nixie_Scan(i,Nixie_Buf[i]); //NixieScan才为真正的显示
	i++;						//刷新值显示放入Nixie_Scan
	if(i>=9){i=1;}
}

代码的阐述

方法:

前面说过数码管的动态显示是需要不断地扫描,此代码使用的是定时器的扫描方法,Nixie_Loop函数是放在一个定时器中断中的,因此可以不断的进行扫描,利用了人眼的余晖效应,扫描完整个数码管也才16ms,人眼看来是一直在亮的,但实际上是一次次扫描的结果

上述代码中

先要明白数码管的显示都是在Nixie_Scan函数中进行的

我们调用了Nixie_SetBuf数组
Nixie_SetBuf数组又调用了Nixie_Buf数组

Nixie_Buf有9个成员的原因是数组从零开始 , 有九个就可以让一就是一而不是零
Nixie_Buf函数整个又被Nixie_Scan数组调用

Nixie_Scan就真正的显示了


看不懂可以多看几次
确实比较难理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值