找回密码
 立即注册
首页 业界区 安全 数码管代码部分

数码管代码部分

炳裘垦 2025-7-26 09:32:30
数码管真值表
  1. #include <reg52.h>
  2. sbit ADDR0 = P1 ^ 0;
  3. sbit ADDR1 = P1 ^ 1;
  4. sbit ADDR2 = P1 ^ 2;
  5. sbit ADDR3 = P1 ^ 3;
  6. sbit ENLED = P1 ^ 4;
  7. void main(void)
  8. {
  9.     ENLED = 0;
  10.     ADDR3 = 1; // U3 74HC138芯片使能
  11.     ADDR2 = 0;
  12.     ADDR1 = 0;
  13.     ADDR0 = 0; // 三极管导通
  14.     P0 = 0xf9;        //数字1
  15.     while (1);
  16. }
复制代码
单个数码管倒计时
  1. #include <reg52.h>
  2. sbit ADDR0 = P1 ^ 0;
  3. sbit ADDR1 = P1 ^ 1;
  4. sbit ADDR2 = P1 ^ 2;
  5. sbit ADDR3 = P1 ^ 3;
  6. sbit ENLED = P1 ^ 4;
  7. unsigned char code LedChar[] =
  8. {
  9.     0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
  10.      0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
  11. };//真值表
  12. void main(void)
  13. {
  14.     char i = 15; // 真值表下标
  15.     char cnt = 0;  // 定时器溢出次数
  16.     ENLED = 0;
  17.     ADDR3 = 1; // U3 74HC138芯片使能
  18.     ADDR2 = 0;
  19.     ADDR1 = 0;
  20.     ADDR0 = 0; // 三极管导通
  21.     TMOD = 1; // 设置定时器0为模式1
  22.     TH0 = 0xB8;
  23.     TL0 = 0x00; // 设置定时器0的初始值
  24.     TR0 = 1; // 定时器0开始工作
  25.     P0  = LedChar[i];
  26.     while (1) {
  27.         if (1 == TF0) // 定时器溢出
  28.         {
  29.             TF0 = 0;//将溢出标志恢复初值,再次定时
  30.             TH0 = 0xB8;
  31.             TL0 = 0x00; // 设置定时器0的初始值
  32.             cnt++;
  33.             if (cnt >= 50)
  34.             {
  35.                 cnt = 0;
  36.                 if (i < 0)
  37.                     i = 15;
  38.                 P0 = LedChar[i--];
  39.             }
  40.         }
  41.     }
  42. }
复制代码
6段数码管动态显示
  1. #include <reg52.h>
  2. sbit ADDR0 = P1 ^ 0;
  3. sbit ADDR1 = P1 ^ 1;
  4. sbit ADDR2 = P1 ^ 2;
  5. sbit ADDR3 = P1 ^ 3;
  6. sbit ENLED = P1 ^ 4;
  7. unsigned char code LedChar[] =
  8. {
  9.     0xC0, 0xF9, 0xA4, 0xB0, 0x99,
  10.     0x92, 0x82, 0xF8, 0x80, 0x90
  11. };
  12. unsigned char LedBuff[] =
  13. {
  14.     0xFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF
  15. };
  16. void main(void)
  17. {
  18.     unsigned char i = 0;//当前工作的数码管下标
  19.     unsigned int cnt = 0;//溢出次数
  20.     unsigned long sec = 0; // 秒
  21.     ENLED = 0;
  22.     ADDR3 = 1; // U3 74HC138芯片使能
  23.     ADDR2 = 0;
  24.     ADDR1 = 0;
  25.     ADDR0 = 0; // 三极管导通
  26.     TMOD = 1; // 设置定时器0为模式1
  27.     TH0 = 0xFC;
  28.     TL0 = 0x67; // 设置定时器0的初始值
  29.     TR0 = 1; // 定时器0开始工作
  30.     while (1)
  31.     {
  32.         if (1 == TF0) // 定时器溢出
  33.         {
  34.             TF0 = 0; // 将溢出标志恢复初值,再次定时
  35.             TH0 = 0xFC;
  36.             TL0 = 0x67; // 设置定时器0的初始值
  37.             cnt++;
  38.             if (cnt >= 1000) //1s
  39.             {
  40.                 cnt = 0;
  41.                 sec++;
  42.                 if (sec >= 999999)
  43.                     sec = 0;
  44.                                 LedBuff[0] = LedChar[sec % 10];
  45.                     LedBuff[1] = LedChar[(sec / 10) % 10];
  46.                     LedBuff[2] = LedChar[(sec / 100) % 10];
  47.                     LedBuff[3] = LedChar[(sec / 1000) % 10];
  48.                     LedBuff[4] = LedChar[(sec / 10000) % 10];
  49.                     LedBuff[5] = LedChar[(sec / 100000) % 10];
  50.             }
  51.             switch (i)
  52.             {
  53.                 case 0:
  54.                     ADDR2 = 0;
  55.                     ADDR1 = 0;
  56.                     ADDR0 = 0; // 三极管导通
  57.                     P0 = LedBuff[0];
  58.                     i++;
  59.                     break;
  60.                 case 1:
  61.                     ADDR2 = 0;
  62.                     ADDR1 = 0;
  63.                     ADDR0 = 1; // 三极管导通
  64.                     P0 = LedBuff[1];
  65.                     i++;
  66.                     break;
  67.                 case 2:
  68.                     ADDR2 = 0;
  69.                     ADDR1 = 1;
  70.                     ADDR0 = 0; // 三极管导通
  71.                     P0 = LedBuff[2];
  72.                     i++;
  73.                     break;
  74.                 case 3:
  75.                     ADDR2 = 0;
  76.                     ADDR1 = 1;
  77.                     ADDR0 = 1; // 三极管导通
  78.                     P0 = LedBuff[3];
  79.                     i++;
  80.                     break;
  81.                 case 4:
  82.                     ADDR2 = 1;
  83.                     ADDR1 = 0;
  84.                     ADDR0 = 0; // 三极管导通
  85.                     P0 = LedBuff[4];
  86.                     i++;
  87.                     break;
  88.                 case 5:
  89.                     ADDR2 = 1;
  90.                     ADDR1 = 0;
  91.                     ADDR0 = 1; // 三极管导通
  92.                     P0 = LedBuff[5];
  93.                     i = 0;
  94.                     break;
  95.             }
  96.         }
  97.     }
  98. }
复制代码
动态显示的数码管显示消隐
  1. #include <reg52.h>
  2. sbit ADDR0 = P1 ^ 0;
  3. sbit ADDR1 = P1 ^ 1;
  4. sbit ADDR2 = P1 ^ 2;
  5. sbit ADDR3 = P1 ^ 3;
  6. sbit ENLED = P1 ^ 4;
  7. unsigned char code LedChar[] =
  8. {
  9.     0xC0, 0xF9, 0xA4, 0xB0, 0x99,
  10.     0x92, 0x82, 0xF8, 0x80, 0x90
  11. };
  12. unsigned char LedBuff[] =
  13. {
  14.     0xFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF
  15. };
  16. void main(void)
  17. {
  18.     unsigned char i = 0;//当前工作的数码管下标
  19.     unsigned int cnt = 0;//溢出次数
  20.     unsigned long sec = 0; // 秒
  21.     ENLED = 0;
  22.     ADDR3 = 1; // U3 74HC138芯片使能
  23.     ADDR2 = 0;
  24.     ADDR1 = 0;
  25.     ADDR0 = 0; // 三极管导通
  26.     TMOD = 1; // 设置定时器0为模式1
  27.     TH0 = 0xFC;
  28.     TL0 = 0x67; // 设置定时器0的初始值
  29.     TR0 = 1; // 定时器0开始工作
  30.     while (1)
  31.     {
  32.         if (1 == TF0) // 定时器溢出
  33.         {
  34.             TF0 = 0; // 将溢出标志恢复初值,再次定时
  35.             TH0 = 0xFC;
  36.             TL0 = 0x67; // 设置定时器0的初始值
  37.             cnt++;
  38.             if (cnt >= 1000) //1s
  39.             {
  40.                 cnt = 0;
  41.                 sec++;
  42.                 if (sec >= 999999)
  43.                     sec = 0;
  44.                                 LedBuff[0] = LedChar[sec % 10];
  45.                     LedBuff[1] = LedChar[(sec / 10) % 10];
  46.                     LedBuff[2] = LedChar[(sec / 100) % 10];
  47.                     LedBuff[3] = LedChar[(sec / 1000) % 10];
  48.                     LedBuff[4] = LedChar[(sec / 10000) % 10];
  49.                     LedBuff[5] = LedChar[(sec / 100000) % 10];
  50.             }
  51.             
  52.                         P0 = 0xFF;//显示消隐处理
  53.             switch (i)
  54.             {
  55.                 case 0:
  56.                     ADDR2 = 0;
  57.                     ADDR1 = 0;
  58.                     ADDR0 = 0; // 三极管导通
  59.                     P0 = LedBuff[0];
  60.                     i++;
  61.                     break;
  62.                 case 1:
  63.                     ADDR2 = 0;
  64.                     ADDR1 = 0;
  65.                     ADDR0 = 1; // 三极管导通
  66.                     P0 = LedBuff[1];
  67.                     i++;
  68.                     break;
  69.                 case 2:
  70.                     ADDR2 = 0;
  71.                     ADDR1 = 1;
  72.                     ADDR0 = 0; // 三极管导通
  73.                     P0 = LedBuff[2];
  74.                     i++;
  75.                     break;
  76.                 case 3:
  77.                     ADDR2 = 0;
  78.                     ADDR1 = 1;
  79.                     ADDR0 = 1; // 三极管导通
  80.                     P0 = LedBuff[3];
  81.                     i++;
  82.                     break;
  83.                 case 4:
  84.                     ADDR2 = 1;
  85.                     ADDR1 = 0;
  86.                     ADDR0 = 0; // 三极管导通
  87.                     P0 = LedBuff[4];
  88.                     i++;
  89.                     break;
  90.                 case 5:
  91.                     ADDR2 = 1;
  92.                     ADDR1 = 0;
  93.                     ADDR0 = 1; // 三极管导通
  94.                     P0 = LedBuff[5];
  95.                     i = 0;
  96.                     break;
  97.             }
  98.         }
  99.     }
  100. }
复制代码
采用中断的动态显示
  1. #include <reg52.h>
  2. sbit ADDR0 = P1 ^ 0;
  3. sbit ADDR1 = P1 ^ 1;
  4. sbit ADDR2 = P1 ^ 2;
  5. sbit ADDR3 = P1 ^ 3;
  6. sbit ENLED = P1 ^ 4;
  7. unsigned char code LedChar[] =
  8. {
  9.     0xC0, 0xF9, 0xA4, 0xB0, 0x99,
  10.     0x92, 0x82, 0xF8, 0x80, 0x90
  11. };//数码管真值表
  12. unsigned char LedBuff[] =
  13. {
  14.     0xff, 0xff, 0xff, 0xff, 0xff, 0xff
  15. };//数码管显示缓冲区
  16. unsigned char i = 0;//动态扫描的索引
  17. unsigned int cnt = 0;//记录T0中断次数
  18. unsigned char flag1s = 0;//1s定时标志
  19. void main(void)
  20. {
  21.     unsigned long sec = 0;//记录经过的秒数
  22.     EA = 1;//使能总中断
  23.     ENLED = 0;
  24.     ADDR3 = 1;//U3 74HC138芯片使能
  25.     TMOD = 0x01;//设置定时器T0模式1
  26.     TH0 = 0xFC;
  27.     TL0 = 0x67;//设置定时器T0的初值
  28.     ET0 = 1;//使能定时器T0中断
  29.     TR0 = 1;//启动定时器T0
  30.     while (1)
  31.     {
  32.         if (1 == flag1s)//判断1s定时标志
  33.         {
  34.             flag1s = 0;//1s定时标志清零
  35.             sec++;//秒数加1
  36.             //设置数码管的值
  37.             LedBuff[0] = LedChar[sec % 10];
  38.             LedBuff[1] = LedChar[(sec / 10) % 10];
  39.             LedBuff[2] = LedChar[(sec / 100) % 10];
  40.             LedBuff[3] = LedChar[(sec / 1000) % 10];
  41.             LedBuff[4] = LedChar[(sec / 10000) % 10];
  42.             LedBuff[5] = LedChar[(sec / 100000) % 10];
  43.         }
  44.     }
  45. }
  46. void InterruptTimer0() interrupt 1
  47. {
  48.     TH0 = 0xFC;
  49.     TL0 = 0x67;//设置定时器T0的初值
  50.     cnt++;//中断次数+1
  51.     if (cnt >= 1000)//中断1000次即1秒
  52.     {
  53.         cnt = 0;//中断次数清零
  54.         flag1s = 1;//设置1s定时标志为1
  55.     }
  56.     P0 = 0xff;//显示消隐
  57.      switch (i)
  58.     {
  59.         case 0:
  60.             ADDR2 = 0;
  61.             ADDR1 = 0;
  62.             ADDR0 = 0; // 三极管导通
  63.             P0 = LedBuff[0];
  64.             i++;
  65.             break;
  66.         case 1:
  67.             ADDR2 = 0;
  68.             ADDR1 = 0;
  69.             ADDR0 = 1; // 三极管导通
  70.             P0 = LedBuff[1];
  71.             i++;
  72.             break;
  73.         case 2:
  74.             ADDR2 = 0;
  75.             ADDR1 = 1;
  76.             ADDR0 = 0; // 三极管导通
  77.             P0 = LedBuff[2];
  78.             i++;
  79.             break;
  80.         case 3:
  81.             ADDR2 = 0;
  82.             ADDR1 = 1;
  83.             ADDR0 = 1; // 三极管导通
  84.             P0 = LedBuff[3];
  85.             i++;
  86.             break;
  87.         case 4:
  88.             ADDR2 = 1;
  89.             ADDR1 = 0;
  90.             ADDR0 = 0; // 三极管导通
  91.             P0 = LedBuff[4];
  92.             i++;
  93.             break;
  94.         case 5:
  95.             ADDR2 = 1;
  96.             ADDR1 = 0;
  97.             ADDR0 = 1; // 三极管导通
  98.             P0 = LedBuff[5];
  99.             i = 0;
  100.             break;
  101.         default:
  102.             break;
  103.     }
  104. }
复制代码
动态显示时不显示高位0-采用中断
  1. #include <reg52.h>
  2. sbit ADDR0 = P1 ^ 0;
  3. sbit ADDR1 = P1 ^ 1;
  4. sbit ADDR2 = P1 ^ 2;
  5. sbit ADDR3 = P1 ^ 3;
  6. sbit ENLED = P1 ^ 4;
  7. unsigned char code LedChar[] =
  8. {
  9.     0xC0, 0xF9, 0xA4, 0xB0, 0x99,
  10.     0x92, 0x82, 0xF8, 0x80, 0x90
  11. };//数码管真值表
  12. unsigned char LedBuff[] =
  13. {
  14.     0xff, 0xff, 0xff, 0xff, 0xff, 0xff
  15. };//数码管显示缓冲区
  16. unsigned char i = 0;//动态扫描的索引
  17. unsigned int cnt = 0;//记录T0中断次数
  18. unsigned char flag1s = 0;//1s定时标志
  19. unsigned long sec = 0;//记录经过的秒数
  20. void main(void)
  21. {
  22.     //unsigned long sec = 0;//记录经过的秒数
  23.     EA = 1;//使能总中断
  24.     ENLED = 0;
  25.     ADDR3 = 1;//U3 74HC138芯片使能
  26.     TMOD = 0x01;//设置定时器T0模式1
  27.     TH0 = 0xFC;
  28.     TL0 = 0x67;//设置定时器T0的初值
  29.     ET0 = 1;//使能定时器T0中断
  30.     TR0 = 1;//启动定时器T0
  31.     while (1)
  32.     {
  33.         if (1 == flag1s)//判断1s定时标志
  34.         {
  35.             flag1s = 0;//1s定时标志清零
  36.             sec++;//秒数加1
  37.             //设置数码管的值
  38.             LedBuff[0] = LedChar[sec % 10];
  39.             LedBuff[1] = LedChar[(sec / 10) % 10];
  40.             LedBuff[2] = LedChar[(sec / 100) % 10];
  41.             LedBuff[3] = LedChar[(sec / 1000) % 10];
  42.             LedBuff[4] = LedChar[(sec / 10000) % 10];
  43.             LedBuff[5] = LedChar[(sec / 100000) % 10];
  44.         }
  45.     }
  46. }
  47. void InterruptTimer0() interrupt 1
  48. {
  49.     TH0 = 0xFC;
  50.     TL0 = 0x67;//设置定时器T0的初值
  51.     cnt++;//中断次数+1
  52.     if (cnt >= 1000)//中断1000次即1秒
  53.     {
  54.         cnt = 0;//中断次数清零
  55.         flag1s = 1;//设置1s定时标志为1
  56.     }
  57.     P0 = 0xff;//显示消隐
  58.      switch (i)
  59.     {
  60.         case 0:
  61.             ADDR2 = 0;
  62.             ADDR1 = 0;
  63.             ADDR0 = 0; // 三极管导通
  64.             P0 = LedBuff[0];
  65.             i++;
  66.             break;
  67.         case 1:
  68.             i++;
  69.             if (sec < 10)
  70.                 break;
  71.             ADDR2 = 0;
  72.             ADDR1 = 0;
  73.             ADDR0 = 1; // 三极管导通
  74.             P0 = LedBuff[1];
  75.             break;
  76.         case 2:
  77.             i++;
  78.             if (sec < 100)
  79.                 break;
  80.             ADDR2 = 0;
  81.             ADDR1 = 1;
  82.             ADDR0 = 0; // 三极管导通
  83.             P0 = LedBuff[2];
  84.             break;
  85.         case 3:
  86.             i++;
  87.             if (sec < 1000)
  88.                 break;
  89.             ADDR2 = 0;
  90.             ADDR1 = 1;
  91.             ADDR0 = 1; // 三极管导通
  92.             P0 = LedBuff[3];
  93.             break;
  94.         case 4:
  95.             i++;
  96.             if (sec < 10000)
  97.                 break;
  98.             ADDR2 = 1;
  99.             ADDR1 = 0;
  100.             ADDR0 = 0; // 三极管导通
  101.             P0 = LedBuff[4];
  102.             break;
  103.         case 5:
  104.             i = 0;
  105.             if (sec < 100000)
  106.                 break;
  107.             ADDR2 = 1;
  108.             ADDR1 = 0;
  109.             ADDR0 = 1; // 三极管导通
  110.             P0 = LedBuff[5];
  111.             break;
  112.         default:
  113.             break;
  114.     }
  115. }
复制代码
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册