单片机数码管动态显示原理

数码管静态显示时,4个数码管的显示是一样的,要使得4个数码管显示不同数值,需采用动态扫描显示方法,即在某一瞬间,只点亮一个数码管,快速变化,每一次点亮一个数码管时输入不同值,由于人眼的视觉暂留现象,感觉上4个数码管是同时亮的,而4个数码管的显示值则是各自不同的。

下面为扫描显示的关键代码,采用一个循环计数器,按照0111-1011-1101-1110-0111的顺序进行循环,这样做到依次点亮一个数码管,每次输入值不同,数码管显示亦不同。

 PROCESS(CT)

    BEGIN

  IF CT'EVENT AND CT='1' THEN

   CASE QQ IS

   WHEN 0111=>AN<=QQ; SW<=1;  QQ<=1011;  --点亮最左边数码管,输入值为1;计数器跳转,准备点亮左边第2个数码管

   WHEN 1011=> AN<=QQ;SW<=2;  QQ<=1101;

   WHEN 1101=> AN<=QQ;SW<=3;  QQ<=1110;

   WHEN OTHERS=> AN<=QQ;SW<=4;  QQ<=0111; --点亮最右边数码管,输入值为4;计数器跳转,准备点亮最左边数码管

  END CASE;

    END IF;

可在数码管静态显示的程序上进行修改,去掉Port中的SW输入,改为signal,同时增加QQ和CT作为signal,其中CT为扫描频率,建议取值在100-1000Hz之间,由50MHz时钟分频获得。

注意:开发板上数码管的位选顺序丝印是错的,反掉了。

参考上述代码和数码管静态显示程序,调通程序,正确显示1234,并进行以下扩展:

1)对8位拨位开关进行译码显示,显示数字范围为00-01-02-..-10-11-..-F0-F1-..-FF(16进制)

提示:拨位开关作为输入

2)按照0000-0001-0002-0003-....000F-1000-1001-....-F001-F002-....-FFFF(16进制)的顺序,以10Hz左右递增,显示变化的4位数

提示:要实现递增数字效果,需要增加一个计数器,由于每一位数码管对应一个4位2进制数,所以这个计数器应该是16位2进制

3)对8位拨位开关进行译码显示,显示数字范围为000-001-002-...009-100-101-...-200-...-255(10进制)

提示:之前数码管显示方式为16进制,要转换为10进制