单片机之动态数码管篇

思来想去还是决定要出这期教程,因为我看很多同学在这个数码管的问题上都还是有点迷惑,特别是这个动态数码管的工作原理,以及这个相应代码该如何编写,那么教程来了~

首先看一下一位数码管内部原理,以及各个引脚的标识
使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。实验板用共阴LED显示器,根据电路连接图显示16进制数的编码见下方:

共阳数码管显示数组=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86, 0x8e};//显示0~F的值

共阴数码管显示数组={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

多位数码管的工作原理与一位相同,不同的是多为数码管相较于一位数码管多了位选,连接时只需要把各个位选连接不同的单片机引脚,再写好程序加以控制就行,下面是四位数码管的引脚标识
在这里插入图片描述
这次主要是想给大家分享一个关于动态数码管的教程,所以咱们需要8位数码管,实际焊接中可以选用两个四位数码管组成,阴极阳极都可以,编程时代码显示不要出错就好了,我这里仿真用的是八位阴极数码管,仿真电路如下:
在这里插入图片描述
动态数码管显示程序代码如下:

#include"reg52.h"  //头文件
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned char z;  //定义无符号字符型变量z
unsigned char code duan_xuan[10]=    //数码管段选
	{
	0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
	0x7f,0x6f
	};	
unsigned char code wei_xuan[8]=    //数码管位选
	{
	0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F
	};
unsigned char dat[8]={8,7,6,5,4,3,2,1};    //数码管显示字符12345678

void delay(unsigned int x)   //调用延时函数delay
{
	unsigned char i;
	while(x--)
	{
		for(i=0;i<120;i++);
	}
}
void main()        //主函数
{
	P2=0x00;      //初始化数码管
	while(1)
	{
		for(z=0;z<8;z++)  //利用for循环一次让数码管显示数字1~8
		{
			P2=duan_xuan[dat[z]];
			P1=wei_xuan[z];
			P1=0XFF;
			delay(5);
		}
	}
}

希望对大家有所帮助,能帮到大家那就非常开心了,喜欢的话可以关注我,记得帮忙点个赞哦 !o( ̄▽ ̄)ブ 非常非常感谢❤❤❤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章