找回密码
 立即注册
首页 业界区 安全 数码管动态显示

数码管动态显示

擒揭 2025-6-9 13:33:44
动态显示的基本原理

多个数码管显示数字的时候,实际上是轮流点亮数码管(一个时刻内只有一个数码管是亮的)利用人眼的视觉暂留现象(也叫余晖效应)就可以做到看起来是所有数码管都同时亮了,这就是动态显示,也叫作动态扫描
例如:有两个数码管,要显示“12”这个数字,先让高位的位选三极管导通,然后控制段选让其显示“1”,延时一定时间后再让低位的位选三极管导通,然后控制端选让其显示“2”把这个流程以一定的速度循环运行就可以让数码管显示出“12”由于交替速度非常快,人眼识别到的就是“12”这两位数字同时亮了。
6个数码管组合正计时[从0到999999再从0开始]
  1. #include <reg52.h>
  2. unsigned char code LedChar[] =
  3. {
  4.         0xC0, 0xF9, 0xA4, 0xB0, 0x99,
  5.         0x92, 0x82, 0xF8, 0x80, 0x90
  6. };
  7. unsigned char code LedIndex[] =
  8. {
  9.         0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED
  10. };
  11. void main(void)
  12. {
  13.         unsigned int cnt = 0;//设置循环次数为0
  14.         unsigned int sec = 0;//经过时间,单位为s
  15.         int i = 0;//数码管序号
  16.         int iP0 = 0, iP1 = 0, iP2 = 0, iP3 = 0, iP4 = 0, iP5 = 0;
  17.         TMOD = 1;//设置定时器0为模式1
  18.        
  19.         TH0 = 0xF7;       
  20.         TL0 = 0x00;//设置定时器0的初始值为0xF700,溢出一次0.0025s
  21.         TR0 = 1;//启动定时器0
  22.         P1 = LedIndex[0];
  23.         P0 = LedChar[sec];
  24.         while (1)
  25.         {
  26.                 if (1 == TF0)//溢出
  27.                 {
  28.                         TH0 = 0xF7;
  29.                         TL0 = 0x00;
  30.                         TF0 = 0;//初始化定时器0
  31.                         cnt++;//循环次数+1
  32.                         if (400 == cnt)//1s         
  33.                         {
  34.                                 sec++;
  35.                                 cnt = 0;
  36.                                 if (1000000 == sec)
  37.                                         sec = 0;
  38.                                
  39.                                 iP0 =  sec % 10;
  40.                                 iP1 =  sec / 10 % 10;
  41.                                 iP2 =  sec / 100 % 10;
  42.                                 iP3 =  sec / 1000 % 10;
  43.                                 iP4 =  sec / 10000 % 10;
  44.                                 iP5 =  sec / 100000 % 10;
  45.                         }
  46.                         switch (i)
  47.                         {
  48.                         case 0:
  49.                                 if (sec >= 0)
  50.                                 {
  51.                                         P1 = LedIndex[i];
  52.                                         P0 = LedChar[iP0];
  53.                                 }
  54.                                 i++;
  55.                                 break;
  56.                         case 1:
  57.                                 if (sec > 9)
  58.                                 {
  59.                                         P1 = LedIndex[i];
  60.                                         P0 = LedChar[iP1];
  61.                                 }
  62.                                 i++;
  63.                                 break;
  64.                         case 2:
  65.                                 if (sec > 99)
  66.                                 {
  67.                                         P1 = LedIndex[i];
  68.                                         P0 = LedChar[iP2];
  69.                                 }
  70.                                 i++;
  71.                                 break;
  72.                         case 3:
  73.                                 if (sec > 999)
  74.                                 {
  75.                                         P1 = LedIndex[i];
  76.                                         P0 = LedChar[iP3];
  77.                                 }
  78.                                 i++;
  79.                                 break;
  80.                         case 4:
  81.                                 if (sec > 9999)
  82.                                 {
  83.                                         P1 = LedIndex[i];
  84.                                         P0 = LedChar[iP4];
  85.                                 }
  86.                                 i++;
  87.                                 break;
  88.                         case 5:
  89.                                 if (sec > 99999)
  90.                                 {
  91.                                         P1 = LedIndex[i];
  92.                                         P0 = LedChar[iP5];
  93.                                 }
  94.                                 i = 0;
  95.                                 break;
  96.                         }
  97.                 }
  98.                
  99.         }
  100. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册