文章目录
【蓝桥杯-单片机】基础模块:数码管
01 数码管原理图
从图2可知,位选和段选最终都接到了D0.7口;从图1可知,对应D0.7的是P0口。因此P0口是数据口,数据应该往P0口写。
但是位选和段选都是写入P0口。P0=0xA4,如何设置为段选?利用锁存器实现。
令P2.6=1,写入段选数据;令P2.6=0,关闭,数据存进去了。
令P2.7=1,写入位选数据;令P2.7=0,关闭,数据存进去了。
//数码管显示函数
void Seg_Disp(unsigned char wela,dula)
{
P0 = 0x00; //消影
P2_6 = 1;
P2_6 = 0;
P0 = Seg_Wela[wela];
P2_7 = 1;
P2_7 = 0;
P0 = Seg_Dula[dula];
P2_6 = 1;
P2_6 = 0;
}
什么是位选和段选
-
位选(Digit Select):
位选是指在多位数码管中选择哪一位进行显示。例如,4位数码管就有4个位选引脚,通过控制这些引脚的电平状态,可以选择显示哪一位的数字。位选的常见方式是通过一个计时器或者控制芯片,轮流地激活每一位,以达到依次显示多个数字的效果。
位选引脚一般用W0、W1、W2等表示,其中W0对应最低位,W1对应次低位,以此类推。 -
段选(Segment Select):
段选是指选择数码管的哪一段(LED)亮起来,以显示对应数字的哪一部分。例如,7段数码管的每一段可以表示数字0-9中的一部分。段选通常使用BCD码(二进制编码十进制)或其他编码方式,将要显示的数字转化为对应的段选信号。
段选引脚一般用a、b、c、d、e、f、g等表示,对应数码管的7个LED段。 -
DP是数码管中的一种特殊段,它代表小数点(Decimal Point)。在一些数码管中,除了表示数字0到9的七个段(a到g),还包括一个用于显示小数点的额外段,即DP段。
这里的h即DP。
共阳极数码管和共阴极数码管的区分
共阳极数码管和共阴极数码管是两种常见的数码管类型,它们在工作原理和控制方式上有一些区别:
(1)共阳极数码管(Common Anode):
在共阳极数码管中,所有的LED段的阳极(正极)都是连接在一起的,而每个LED段的阴极(负极)则分别连接到不同的引脚。
控制时,通过给某一段的阴极引脚接通电流,同时将共阳极引脚设置为高电平,该段就会被激活,显示相应的数字或字符。
(2)共阴极数码管(Common Cathode):
在共阴极数码管中,所有的LED段的阴极(负极)都是连接在一起的,而每个LED段的阳极(正极)则分别连接到不同的引脚。
控制时,通过给某一段的阳极引脚接通电流,同时将共阴极引脚设置为低电平,该段就会被激活,显示相应的数字或字符。
主要区别在于共阳极数码管是通过通电阴极(负极)来激活LED段,而共阴极数码管是通过通电阳极(正极)来激活LED段。
例如:假设以下是一个共阴极数码管(共阴极引脚设置为低电平激活),如果我要显示数字2,对8个段选线的电平设置(从h->a)为10100100
,转换为16进制为0xA4
。即设置段选为0xA4就可以让数码管显示数字2
。
02 代码
(1)数码管静态显示
普通代码(直接在while循环里写)
P0 = 0x00; //消影
P2_6 = 1;
P2_6 = 0;
P0 = 0xfe;//访客(数据)来了
P2_7 = 1;//位码门打开
P2_7 = 0;//位码门关闭,防止别人进来
P0 = 0x5b;//访客(数据)来了
P2_6 = 1;//段码门打开
P2_6 = 0;//段码门关闭,防止别人进来(这是用锁存器实现的)
模块化编程:
/* 变量声明区 */
unsigned char Seg_Wela[6] =