CT107D开发板的定时器中断刷新数码管的消隐
名词
位选:选择第几个数码管亮
段暄:选择数码管亮什么内容
原理
(定时器中断刷新数码管原理基于金沙滩51单片机的教程,不做过多解释 )
数码管在动态刷新过程中,可能存在本应不亮的地方发生微微的弱光,这种情况该怎么办呐?
造成这种情况的原因是,程序每执行一次位选片选的刷新,下一次刷新P0原本的数据就会干扰位选段选。
所以我们需要在刷新前进入段选,写入P0=0xff,提前先使数码管阴极的锁存器变成全暗状态,这样P0残留的数据就难以干扰位选段选
代码
void SMG_Scan() //中断进入数码管扫描刷新
{
static int8 index = 0; //刷管位选计数
Sel_HC138(7); //三八译码器进入段选模式
P0 = 0xff; //消隐,消除上次段选或者其它情况下P0的数据
Sel_HC138(0); //三八译码器关闭段选模式
Sel_HC138(6); //三八译码器进入位选模式
P0 = (0x80>>index); //位选
Sel_HC138(0); //三八译码器关闭位选模式
Sel_HC138(7); //三八译码器进入段选模式
P0 = SMG_SHOW[index]; //段选
Sel_HC138(0); //三八译码器关闭段选模式
index++; //位选计数
index = (index&0x07);
}
后记
因为把段选位选搞混,导致自己弄了好久才成功消影,属实five
QWQ