1 先来看一下一个七段显示姨妈管
它的译码图为:
这是共阴极的译码,如果共阳极,就取反
共阳极时
0 = 1100 0000
1 = 1111 1001
好,有这个概念之后,当我们通过串转并的74HC595将一窜二进制流转化成对应编码可以直接的让其显示对应的字符
这就是七段显示译码管的工作原理
而对应的二进制转化成16进制之后:
结果为:
unsigned char Processer::LED_f[] =
{//0 1 2 3 4 5 6 7 8 9 A B C D E F -
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80,
0x90, 0x8c, 0xbf, 0xc6, 0xa1, 0x8e, 0xbf, 0xff, 0x7f, 0xbf
};
而,想要通过串行方式点亮这个姨妈管,需要小心控制写入时序:
比如我要写入一个0
第一次,我们需要写入的数据是1,写入过程如下:
DIO置为高电平(DIO = 高电平时,表明写入1,否则写入0)
SCLK写入一个上跳信号(隔一个时钟置低电平,隔一个时钟置高电平)
然后依次写入1 0 0 0 0 0 0
写完之后干嘛呢
我们看到:
这个是不是有4个姨妈管?每个姨妈管都有一个地址,写完之后,你得写地址
从左到右的编址为:
0x08 0x04 0x02 0x01
好了,显示数据和地址都写完之后写啥?
通知他写完了,给一个CRLK的上跳信号就可以了
2 16进制转二进制的算法:
int* Ox2binary(int value) {
int a = value;
int b = 0x80;
int* vi = new int[8];
for (int i = 0; i < 8; i++) {
vi[7 - i] = ((a) % 2);
a = a >> 1;
}
return vi;
}
int main()
{
int* vi = Ox2binary(0xc0);
for (int i = 0; i < 8; i++) {
cout << "index = " << i << ": " << vi[i]<<"\n";
}
}
处理起来就很容易了