找回密码
 立即注册
首页 业界区 安全 定时器与数码管之代码

定时器与数码管之代码

眸胝 2025-6-9 11:01:19
小灯以1s间隔闪烁
  1. #include <reg52.h>
  2. sbit LED = P0 ^ 0;
  3. sbit ADDR0 = P1 ^ 0;
  4. sbit ADDR1 = P1 ^ 1;
  5. sbit ADDR2 = P1 ^ 2;
  6. sbit ADDR3 = P1 ^ 3;
  7. sbit ENLED = P1 ^ 4;
  8. void main(void)
  9. {
  10.         unsigned char cnt;//溢出次数
  11.         //74HC138使能
  12.         ENLED = 0;
  13.         ADDR3 = 1;
  14.        
  15.         //Q16导通
  16.         ADDR2 = 1;
  17.         ADDR1 = 1;
  18.         ADDR0 = 0;
  19.         LED = 0;//点亮小灯
  20.         TMOD = 1;//设置T0为模式1
  21.         //设置T0初始值
  22.         TH0 = 0x4C;
  23.         TL0 = 0x00;
  24.         TR0 = 1;//启动T0
  25.         cnt = 0;//设置溢出次数为0
  26.         while (1)
  27.         {
  28.                 //溢出
  29.                 if (1 == TF0)
  30.                 {
  31.                         cnt++;
  32.                         //T0初始化
  33.                         TF0 = 0;
  34.                         TH0 = 0x4C;
  35.                         TL0 = 0x00;
  36.                         //溢出1s
  37.                         if (cnt >= 20)
  38.                         {
  39.                                 LED = ~LED;//小灯状态相反
  40.                                 cnt = 0;
  41.                         }
  42.                 }
  43.         }
  44. }
复制代码
流水灯左跑,间隔1s[写法1]
  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. int POW(int m)
  8. {
  9.         int i;
  10.         int iRet;
  11.         iRet = 1;
  12.         for (i = 0; i < m; i++)
  13.         iRet = iRet * 2;
  14.         return iRet;               
  15. }
  16. void main(void)
  17. {
  18.         unsigned char cnt;//溢出次数
  19.         int count;
  20.         //74HC138使能
  21.         ENLED = 0;
  22.         ADDR3 = 1;
  23.        
  24.         //Q16导通
  25.         ADDR2 = 1;
  26.         ADDR1 = 1;
  27.         ADDR0 = 0;
  28.         TMOD = 1;//设置T0为模式1
  29.         //设置T0初始值
  30.         TH0 = 0x4C;
  31.         TL0 = 0x00;
  32.         TR0 = 1;//启动T0
  33.         cnt = 0;//设置溢出次数为0
  34.         count = 0;
  35.         while (1)
  36.         {
  37.                 //溢出
  38.                 if (1 == TF0)
  39.                 {
  40.                         cnt++;
  41.                         //T0初始化
  42.                         TF0 = 0;
  43.                         TH0 = 0x4C;
  44.                         TL0 = 0x00;
  45.                         //溢出1s
  46.                         if (cnt >= 20)
  47.                         {
  48.                                 if (8 == count)
  49.                                         count = 0;
  50.                                 P0 = 0xFF ^ POW(count);
  51.                                 count++;
  52.                                 cnt = 0;
  53.                         }
  54.                 }
  55.         }
  56. }
复制代码
流水灯左跑,间隔1s[写法2]

由于此板子上的P1口的默认值是0xFF,即每一位的默认值都是高电平
也就是说, 给板子重新上电时,P1的每一位都是高电平
故此时ADDR3、ADDR2以及ADDR1默认为高电平
故只需设置ENLED以及ADDR0为低电平即可
  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. int POW(int m)
  8. {
  9.         int i;
  10.         int iRet;
  11.         iRet = 1;
  12.         for (i = 0; i < m; i++)
  13.         iRet = iRet * 2;
  14.         return iRet;               
  15. }
  16. void main(void)
  17. {
  18.         unsigned char cnt;//溢出次数
  19.         int count;
  20.         //74HC138使能
  21.         ENLED = 0;
  22. //        ADDR3 = 1;
  23.        
  24.         //Q16导通
  25. //        ADDR2 = 1;
  26. //        ADDR1 = 1;
  27.         ADDR0 = 0;
  28.         TMOD = 1;//设置T0为模式1
  29.         //设置T0初始值
  30.         TH0 = 0x4C;
  31.         TL0 = 0x00;
  32.         TR0 = 1;//启动T0
  33.         cnt = 0;//设置溢出次数为0
  34.         count = 0;
  35.         while (1)
  36.         {
  37.                 //溢出
  38.                 if (1 == TF0)
  39.                 {
  40.                         cnt++;
  41.                         //T0初始化
  42.                         TF0 = 0;
  43.                         TH0 = 0x4C;
  44.                         TL0 = 0x00;
  45.                         //溢出1s
  46.                         if (cnt >= 20)
  47.                         {
  48.                                 if (8 == count)
  49.                                         count = 0;
  50.                                 P0 = 0xFF ^ POW(count);
  51.                                 count++;
  52.                                 cnt = 0;
  53.                         }
  54.                 }
  55.         }
  56. }
复制代码
流水灯左跑,间隔1s[写法3][不采用位寻址]

P1口有8位,每一位都是默认1,故P1初始值为0x11111111即0xFF
设置P1的第0位和第4位为0,则此时P1的值为0x11101110即0xEE
  1. #include <reg52.h>
  2. int POW(int m)
  3. {
  4.         int i;
  5.         int iRet;
  6.         iRet = 1;
  7.         for (i = 0; i < m; i++)
  8.         iRet = iRet * 2;
  9.         return iRet;               
  10. }
  11. void main(void)
  12. {
  13.         unsigned char cnt;//溢出次数
  14.         int count;
  15.         //Q16导通
  16.         P1 = 0xEE;
  17.         TMOD = 1;//设置T0为模式1
  18.         //设置T0初始值
  19.         TH0 = 0x4C;
  20.         TL0 = 0x00;
  21.         TR0 = 1;//启动T0
  22.         cnt = 0;//设置溢出次数为0
  23.         count = 0;
  24.         while (1)
  25.         {
  26.                 //溢出
  27.                 if (1 == TF0)
  28.                 {
  29.                         cnt++;
  30.                         //T0初始化
  31.                         TF0 = 0;
  32.                         TH0 = 0x4C;
  33.                         TL0 = 0x00;
  34.                         //溢出1s
  35.                         if (cnt >= 20)
  36.                         {
  37.                                 if (8 == count)
  38.                                         count = 0;
  39.                                 P0 = 0xFF ^ POW(count);
  40.                                 count++;
  41.                                 cnt = 0;
  42.                         }
  43.                 }
  44.         }
  45. }
复制代码
以下流水灯相关代码都有3种写法,同流水灯左跑一致,均采用第一种写法
流水灯右跑,间隔1s
  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. int POW(int m)
  8. {
  9.         int i;
  10.         int iRet;
  11.         iRet = 1;
  12.         for (i = 0; i < m; i++)
  13.         iRet = iRet * 2;
  14.         return iRet;               
  15. }
  16. void main(void)
  17. {
  18.         unsigned char cnt;//溢出次数
  19.         int count;
  20.         //74HC138使能
  21.         ENLED = 0;
  22.         ADDR3 = 1;
  23.        
  24.         //Q16导通
  25.         ADDR2 = 1;
  26.         ADDR1 = 1;
  27.         ADDR0 = 0;
  28.         TMOD = 1;//设置T0为模式1
  29.         //设置T0初始值
  30.         TH0 = 0x4C;
  31.         TL0 = 0x00;
  32.         TR0 = 1;//启动T0
  33.         cnt = 0;//设置溢出次数为0
  34.         count = 7;
  35.         while (1)
  36.         {
  37.                 //溢出
  38.                 if (1 == TF0)
  39.                 {
  40.                         cnt++;
  41.                         //T0初始化
  42.                         TF0 = 0;
  43.                         TH0 = 0x4C;
  44.                         TL0 = 0x00;
  45.                         //溢出1s
  46.                         if (cnt >= 20)
  47.                         {
  48.                                 P0 = 0xFF ^ POW(count);
  49.                                 if (0 == count)
  50.                                         count = 8;
  51.        
  52.                                 count--;
  53.                                 cnt = 0;
  54.                         }
  55.                 }
  56.         }
  57. }
复制代码
流水灯左跑后右跑[间隔1s]
  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. int POW(int m)
  8. {
  9.         int i;
  10.         int iRet;
  11.         iRet = 1;
  12.         for (i = 0; i < m; i++)
  13.         iRet = iRet * 2;
  14.         return iRet;               
  15. }
  16. void main(void)
  17. {
  18.         unsigned char cnt;//溢出次数
  19.         int count;
  20.         int iflag;//iflag = 0时,左跑,iflag = 1时,右跑
  21.         //74HC138使能
  22.         ENLED = 0;
  23.         ADDR3 = 1;
  24.        
  25.         //Q16导通
  26.         ADDR2 = 1;
  27.         ADDR1 = 1;
  28.         ADDR0 = 0;
  29.         TMOD = 1;//设置T0为模式1
  30.         //设置T0初始值
  31.         TH0 = 0x4C;
  32.         TL0 = 0x00;
  33.         TR0 = 1;//启动T0
  34.         cnt = 0;//设置溢出次数为0
  35.         count = 0;
  36.         iflag = 0;
  37.         while (1)
  38.         {
  39.                 //溢出
  40.                 if (1 == TF0)
  41.                 {
  42.                         cnt++;
  43.                         //T0初始化
  44.                         TF0 = 0;
  45.                         TH0 = 0x4C;
  46.                         TL0 = 0x00;
  47.                         //溢出1s
  48.                         if (cnt >= 20)
  49.                         {
  50.                                 if(0 == iflag)
  51.                                 {
  52.                                         if (8 == count)
  53.                                         {
  54.                                                 count = 6;
  55.                                                 iflag = 1;
  56.                                         }
  57.                                 }
  58.                                 else
  59.                                 {
  60.                                         if (0 == count)
  61.                                                 iflag = 0;
  62.                                 }
  63.                                 P0 = 0xFF ^ POW(count);
  64.                                 if (0 == iflag)
  65.                                         count++;
  66.                                 else
  67.                                         count--;
  68.                                 cnt = 0;
  69.                         }
  70.                 }
  71.         }
  72. }
复制代码
流水灯右跑后左跑[间隔1s]
  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. int POW(int m)
  8. {
  9.         int i;
  10.         int iRet;
  11.         iRet = 1;
  12.         for (i = 0; i < m; i++)
  13.         iRet = iRet * 2;
  14.         return iRet;               
  15. }
  16. void main(void)
  17. {
  18.         unsigned char cnt;//溢出次数
  19.         int count;
  20.         int iflag;//iflag = 0时,左跑,iflag = 1时,右跑
  21.         //74HC138使能
  22.         ENLED = 0;
  23.         ADDR3 = 1;
  24.        
  25.         //Q16导通
  26.         ADDR2 = 1;
  27.         ADDR1 = 1;
  28.         ADDR0 = 0;
  29.         TMOD = 1;//设置T0为模式1
  30.         //设置T0初始值
  31.         TH0 = 0x4C;
  32.         TL0 = 0x00;
  33.         TR0 = 1;//启动T0
  34.         cnt = 0;//设置溢出次数为0
  35.         count = 7;
  36.         iflag = 1;
  37.         while (1)
  38.         {
  39.                 //溢出
  40.                 if (1 == TF0)
  41.                 {
  42.                         cnt++;
  43.                         //T0初始化
  44.                         TF0 = 0;
  45.                         TH0 = 0x4C;
  46.                         TL0 = 0x00;
  47.                         //溢出1s
  48.                         if (cnt >= 20)
  49.                         {
  50.                                 if(0 == iflag)
  51.                                 {
  52.                                         if (8 == count)
  53.                                         {
  54.                                                 count = 6;
  55.                                                 iflag = 1;
  56.                                         }
  57.                                 }
  58.                                 else
  59.                                 {
  60.                                         if (0 == count)
  61.                                                 iflag = 0;
  62.                                 }
  63.                                 P0 = 0xFF ^ POW(count);
  64.                                 if (0 == iflag)
  65.                                         count++;
  66.                                 else
  67.                                         count--;
  68.                                 cnt = 0;
  69.                         }
  70.                 }
  71.         }
  72. }
复制代码
数码管显示数字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. void main(void)
  8. {
  9.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0xC0;//数码管abcdef段亮,即显示0
  17.         while(1)
  18.                 ;
  19. }
复制代码
数码管显示数字1
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0xF9;//数码管bc段亮,即显示1
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示数字2
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0xA4;//数码管abged段亮,即显示2
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示数字3
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0xB0;//数码管abgcd段亮,即显示3
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示数字4
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0x99;//数码管fgbc段亮,即显示4
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示数字5
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0x92;//数码管afgcd段亮,即显示5
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示数字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. void main(void)
  8. {
  9.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0x82;//数码管afgcde段亮,即显示6
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示数字7
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0xF8;//数码管abc段亮,即显示7
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示数字8
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0x80;//数码管abcdefg段亮,即显示8
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示数字9
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0x90;//数码管abcdfg段亮,即显示9
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示字母A
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0x88;//数码管abcefg段亮,即显示A
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示字母b
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0x83;//数码管cdefg段亮,即显示b
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示字母C
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0xC6;//数码管afed段亮,即显示C
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示字母d
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0xA1;//数码管bcdef段亮,即显示d
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示字母E
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0x86;//数码管adefg段亮,即显示E
  17.         while(1)
  18.                 ;
  19. }
复制代码
 数码管显示字母F
  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.         //74HC138使能
  10.         ENLED = 0;
  11.         ADDR0 = 1;
  12.         //Q7导通
  13.         ADDR2 = 1;
  14.         ADDR1 = 0;
  15.         ADDR0 = 1;
  16.         P0 = 0x8E;//数码管aefg段亮,即显示F
  17.         while(1)
  18.                 ;
  19. }
复制代码
数码管正向计时[间隔1s][从0到9]
  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. void main(void)
  13. {
  14.         unsigned cnt;//溢出次数
  15.         int sec;//秒
  16.         //74HC138使能
  17.         ENLED = 0;
  18.         ADDR0 = 1;
  19.         //Q7导通
  20.         ADDR2 = 1;
  21.         ADDR1 = 0;
  22.         ADDR0 = 1;
  23.         TMOD = 1;//To设置为模式0
  24.         //设置T0初始值
  25.         TH0 = 0xB4;
  26.         TL0 = 0x00;
  27.         TR0 = 1;//启动T0
  28.         cnt = 0;
  29.         sec = 0;
  30.         while(1)
  31.         {
  32.                 if (1 == TF0)//溢出
  33.                 {
  34.                         //设置T0初始值
  35.                         TF0 = 0;
  36.                         TH0 = 0xB4;
  37.                         TL0 = 0x00;
  38.                         cnt++;
  39.                         //溢出1s
  40.                         if (cnt >= 20)
  41.                         {
  42.                                 cnt = 0;
  43.                                 if (10 == sec)
  44.                                         sec = 0;
  45.                                 P0 = LedChar[sec];
  46.                                 sec++;
  47.                         }
  48.                 }
  49.         }
  50. }
复制代码
数码管倒计时[间隔1s][从9到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. void main(void)
  13. {
  14.         unsigned cnt;//溢出次数
  15.         int sec;//秒
  16.         //74HC138使能
  17.         ENLED = 0;
  18.         ADDR0 = 1;
  19.         //Q7导通
  20.         ADDR2 = 1;
  21.         ADDR1 = 0;
  22.         ADDR0 = 1;
  23.         TMOD = 1;//To设置为模式0
  24.         //设置T0初始值
  25.         TH0 = 0xB4;
  26.         TL0 = 0x00;
  27.         TR0 = 1;//启动T0
  28.         cnt = 0;
  29.         sec = 9;
  30.         while(1)
  31.         {
  32.                 if (1 == TF0)//溢出
  33.                 {
  34.                         //设置T0初始值
  35.                         TF0 = 0;
  36.                         TH0 = 0xB4;
  37.                         TL0 = 0x00;
  38.                         cnt++;
  39.                         //溢出1s
  40.                         if (cnt >= 20)
  41.                         {
  42.                                 cnt = 0;
  43.                                 P0 = LedChar[sec];
  44.                                 if (0 == sec)
  45.                                         sec = 10;
  46.                                 sec--;
  47.                         }
  48.                 }
  49.         }
  50. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册