控制芯片的基本了解
相比于不用控制芯片的电路:这里带2根电源线和3个信号线,共使用了5根线,但可以控制4个8段数码管显示。若是电路直接控制4个8段数码管需要8+4+1=13个接口,这对于MCU的珍贵引脚简直是浪费。
这里不会出现余晖效应也不用频繁置位和复位接口电路,是因为驱动芯片的锁存器和寄存器配合使用。
使用中遇到的问题
1,数码管的段和位的认知
2,共阳极和共阴极的接线方式不同
3,14位地址表示的意义
4,固定地址显示和自动地址显示
可能出现的现象和解决办法
1,第一个问题中段和位的设置可能导致:接线就微亮
这是因为段和位设置的问题或电路问题可参考
电路硬件设计中的问题,所以手册中的4位8段指的是共阴极数码管,共阳极的话最多是7段。
程序设计中的位和段的命令
从电路中可以看出,7段GRID做为LED阴极连接,5位SEG做为阳极接入。所以需要选7位5段的显示模式。而共阴极数码管的电路连接恰好相反。所以这里的位和段指的是芯片引脚,而不是数码管的位和段,只是刚好对应共阴极数码管的位和段
驱动芯片手册中的数据传输
下图中显示的是一个字节数据传输过程,在数据读取中,手册也给出了参考程序
芯片的地址含义
从下图中可以看出,对每个地址写入的都是对SEG引脚的控制,GRID可以默认就是连接到了0电位。而共阳极的数码管控制使用不到奇数地址位。因为SEG12-14被使用为GRID的引脚。
使用共阳极数码管在这种驱动方式下有一个很大的数据传送的麻烦。由于控制到SEG的值,但共阳极中的显示编码是通过GRID控制显示字符。也就是说,一个字符的编码对应不同地址的某个位,参考下面数据和地址分布。
固定地址和自动地址显示的含义
根据上面的情况,地址增加模式适合共阴极数码管使用;固定地址模式适合共阳极数码管使用。
共阳极数码管数据传输程序实现
这是一个将字符对应编码传入后重新修改为可用于发送的字节数据
功能原理图:
实现方式就是把对应的4个编码每个第一位取出和另外几个编码字节位相结合。具体实现算法理解参考另一个
uchar* seg_to_send(uchar *en_val){
static uchar sent_byte[7]={0}; //这里必须使用静态定义,否者后面返回数组会出现问题
uchar i,j;
for(i=0;i<7;i++){ //取成7个字节
for(j=0;j<4;j++){ //每个字节每一位来自于不同的字节
sent_byte[i] += ((en_val[j]>>i)& 0x01)<<j; //
}
}
return sent_byte;
}