数码管显示

一、区分数码管的类别

共阴数码管:即所有数码管的阴极接在一起。要使某个数码管点亮,只需置上高电平,代码中该位置'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、可以数码管引脚直接与单片机连接,但是对于共阴数码管,因为单片机引脚驱动能力不足,需要外加电源驱动

数码管显示_第1张图片

2、使用74HC573节省I/O口

数码管显示_第2张图片

代码中的位锁存,段锁存(LATCH),其实分别控制两个74HC573的使能端。

哪个使能有效,P0口的数据就往位或者段传送,达到对位和段的分别控制。



你可能感兴趣的:(单片机)