《《《《《正文》》》》》
《显示原理》
数码管是由多段发光二极管排布而成的,而其中的发光二极管显示原理与常规的LED点亮熄灭没有区别,一般的一个数码管由7段发光二极管构成,而8段数码管也只是多了一段小数点,其他基本一样,如下图;所以一个数码管,其实就是7段或者8段独立的LED组成的,通过软件控制每段LED来组合显示数据。
《SEG口的共阳/阴极》
说到LED的控制,软件会根据LED硬件的设计在点亮LED的电平上有所不同,比如下图LED电路:LED的阳极上拉VDD电压,则点亮LED,芯片IO口输出就需要输出低电平;同样的,当LED阴极下拉接地,则点亮LED,就需要输出高电平;
基于此,数码管分为共阴极和共阳极;共阳极就是把所有LED的阳极连接在一起并接电源,这样给如任何一个LED另一端低电平就点亮;共阴极就是把所有LED的阴极连接在一起并接地,这样给任何一个LED另一端高电平就点亮;
因此,软件在控制LED亮灭就会有所不同;
《COM口的作用》
再则我们还在数码管上还会看到COM这个控制口,他其实类似于片选的功能,它叫位选线,而上图中seg的的a、b。。。g、dp叫段选线;
那它是如何进行片选的?以共阴极为例,它的COM口是和共阴极公共端相连,这样当COM输出高时,所有LED都是不可能点亮的,因为阴极为高电平,全部熄灭,换句话说就是不可控制了;当COM输出低时,则LED可根据段选线的电压点亮熄灭LED实现数据的显示;根据上面的原理,每次都只选一个COM且seg口输入相应的数据,这样就实现片选的功能;
《显示方式》
静态显示:他并不是指显示数据只能静止不变的意思,而是指COM口无需扫描,也就是COM口无需电平的变化,也就是不需片选的时候;这种方式往往应用在只有一个数码管的时候,因为只有一个数码管,COM口设置完之后,显示数据只受a、b。。。。g、dp段选线电压控制,只需改变段选线数据即可显示相应的数据;因此称为静态显示;
动态显示:当我们有多个数码管参与显示同一数据时,因为所有数码管的相同段选线都是连在一起的,那为什么要连在一起?你想啊,你每个数码管都单独分配7个段选线控制IO口,就问你,你芯片IO口资源够吗?!所以人家就利用COM口的片选功能,所有数码管共用段选线,再利用COM实现对数码管的片选,这样每增加一个数码管,只需增加一个COM口的资源;
软件则只需每次只选择一个COM有效(一个数码管有效),并且根据数据改变seg口输出数码管,其他数码管无效,只要数码管的刷新频率够快,在人眼里就是点亮的,这个就是常说的COM扫描频率,这样子,大家轮着利用COM的片选功能使用seg口输出数据,轮着显示,只要显示频率够快,表现出来的就是多段数码管一起点亮;这就是动态显示,也就是扫描模式显示;知道这个原理,其实很多LCD都是差不多的,只不过别人是用驱动芯片驱动的,我们只是用IO模拟驱动的;
《跟LCD液晶的关系》
LCD液晶的扫描显示方式仅在模式方面跟上面的扫描模式是一样的,只不过LCD液晶太多像素,比如128*64像素,就有64个com,128个seg,所以使用驱动芯片驱动,而数码管直接用IO口模拟驱动;
《伪代码》
完整代码会在后续文章解析
//com口周期扫描函数
void Scan_Com(void)
{
//设置所有COM口(数码管)无效电平
//轮着选择一个COM口(数码管)有效电平
//设置有效COM相对应的SEG数据IO电平
}
《《《《《END》》》》》