在对蓝桥杯的IAP15F2K61S2单片机初步的了解后,现在要实现的是单片机的数码管模块。老规矩先放原理图
图片的最右端就是数码管的原理展示了,一共有8位数字所以我们是通过COM1~COM8来控制这8位数字,所以我们要想在哪位数字上进行操作就必须先由COM1~COM8来进行控制。那么其他的字母是什么含义呢?下面用一个放大图来进行说明
由图,我们将一个数字分为7个小段,这7个小段其实都会发光,我们通过这7个小段的亮灭来表示数字。那么如何控制这7个小段的亮灭呢?我们就如图所示通过A1~G1来对这7个小段进行标记进而通过一一对应的关系控制字母来控制小段。图一就是通过74HC573这个编码器来对A1~G1进行修改控制。现在又遇到新的问题,编码器对应数字是1时亮,还是0时亮呢?这个由数码管本身性质来决定。数码管分两种,一种是共阴极数码管一种是共阳极数码管。当数码管是共阴级时,数码管一端接低电平,那么编码器引脚P0对应高电平也就是数字1时数码管亮;数码管共阳极时,数码管一端接高电平,编码器引脚P0对应低电平也就是数字0时数码管亮。我们查我们使用的单片机数据手册,发现这个数码管是共阳极的,那么引脚对应0时就会亮。
知道了数码管最基础的原理那么我们就要实际操作了,首先我们从第一位开始(也就是COM1控制的位置) 如果我想要在第一位静态显示数字1该怎么做呢。第一步位选:我们由图一所示,COM1是通过左侧的74HC573来控制的,他的使能端是Y6C
Y6C对应由P2控制,即P25 P26 P27对应二进制为1 1 0时选中Y6开启对Y6的控制,110对应P2的十六进制是0xc0,图一P0对应二进制为0 0 0 0 0 0 0 1,十六进制为0x01 ;位选结束了第二步段选:通过图一中间的编码器来控制第一位的数字,这个编码器的使能端是Y7C,同样的P2来选中Y7的对应值是P27 P26 P25 1 1 1,16进制为0xe0,如果我想要第一位显示的数字为6,那么74HC573编码器P0对应的引脚二进制为1 0 0 0 0 0 1 0对应十六进制为0x82 ok现在了解了这些,代码应该也知道怎么写了,这里就直接放代码
#include <STC15F2K60S2.H>
void class_buzz()
{
P0 = 0x00;
P2 = (P2 & 0x1F | 0xA0 );
P2 &= 0x1F;
}
void class_led()
{
P0 = 0xFF;
P2 = (P2 & 0x1F | 0x80);
P2 &= 0x1F;
}
void smg()
{
P0 = 0x01;
P2 = (P2 & 0x1F | 0xC0 );
P2 &= 0x1F;
P0 = 0x82;
P2 = (P2 & 0x1F | 0xE0 );
P2 &= 0x1F;
}
void main()
{
class_buzz();
class_led();
while(1)
{
smg();
}
}
最后给板子上电验证
看的出来确实在第一位显示了数字6
小结:
这次只是数码管模块的最简单应用,下期来实现复杂点的动态数码管显示
(每周一期蓝桥杯模块实现文章)