一、区分数码管的类别
共阴数码管:即所有数码管的阴极接在一起。要使某个数码管点亮,只需置上高电平,代码中该位置'1'
共阳数码管:即所有数码管的阳极接在一起。要使某个数码管点亮,只需置上低电平,代码中该位置'0'
二、单个数码管显示
a~h:表示单个数码管上面的8个LED。
根据共阴共阳的特性,点亮相应的LED,组成想要的数字(一般由取模软件得到)
如:共阴数码管显示数字'0,即代码中该数码管赋值0x3F (0011 1111)
三、多位数码管显示
1、区分段、位:段指的是单个数码管上的8段LED;位指的是数码管所在的位置
2、存在问题:
a)各个数码管轮流闪烁显示——原因:数码管逐个显示的间隔时间长
b)数码管显示存在乱码残影——原因:数码管显示存在“鬼影”,即没有做消隐处理
四、数码管消隐
对不需要显示的数码管进行关闭操作即可。
五、消除鬼影,残影
1、为什么存在“鬼影”
程序执行代码需要时间,存在瞬态,上一代码数据,会造成下一代码数据的干扰
2、如何消除鬼影
总的来说,就是对端口赋新值时,先清空上一次的数据。
法1)操作段前,先关闭段
//个位
DataPort = 0xff; //关闭段
DataPort = Data[curNum%10]; //设置段,两个段操作之间有其他运算代码,即有时间间隔
Location = 0x02; //设置位
delay(20); //延时
//十位
DataPort = 0xff;
DataPort = Data[curNum/10];
Location = 0x01;
delay(20);
法2)操作位前,先关闭位
/*ERROR
DataPort = Data[curNum%10]; //设置段
Location = 0x00; //关闭位
Location = 0x02; //设置位,两个位操作没有时间间隔,显示仍然会有残影
*/
//个位
DataPort = Data[curNum%10]; //设置段
Location = 0x02; //设置位
delay(20); //延时
//十位
Location = 0x00;
DataPort = Data[curNum/10];
Location = 0x01;
delay(20);
注意:对段/位的关闭、赋值的操作不能是上下语句关系,必须要有时间间隔
六、连接数码管
1、可以数码管引脚直接与单片机连接,但是对于共阴数码管,因为单片机引脚驱动能力不足,需要外加电源驱动
2、使用74HC573节省I/O口
代码中的位锁存,段锁存(LATCH),其实分别控制两个74HC573的使能端。
哪个使能有效,P0口的数据就往位或者段传送,达到对位和段的分别控制。