标题: 单片机+74HC138 74HC245 9999倒数程序与Proteus仿真图 [打印本页]

作者: sami522    时间: 2022-5-17 15:15
标题: 单片机+74HC138 74HC245 9999倒数程序与Proteus仿真图
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  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.         0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
  9.         0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
  10.   };

  11.   unsigned char LedBuff[6] = {
  12.         
  13.         0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
  14.         };
  15.          unsigned char i = 0;
  16.          unsigned int cnt = 0;
  17.          unsigned char flagls = 0;
  18.         void main ()
  19.         {
  20.         
  21.          unsigned long sec = 999999;
  22.                 EA = 1;
  23.                 ENLED =0;
  24.                 ADDR3 =1;
  25.                 TMOD = 0x10;
  26.                 TH1 = 0xFC;
  27.                 TL1 = 0x67;
  28.                 TR1 = 1;
  29.                 ET1 = 1;
  30.                 while (1)
  31.                 {
  32.                  if (flagls == 1)
  33.                  {
  34.                    flagls = 0;
  35.                                 sec--;
  36.                                  LedBuff[0] = LedChar[sec%10];
  37.                         
  38.                                  LedBuff[1] = LedChar[sec/10%10];
  39.                           
  40.                                  LedBuff[2] = LedChar[sec/100%10];
  41.                           
  42.                                  LedBuff[3] = LedChar[sec/1000%10];
  43.                         
  44.                                  LedBuff[4] = LedChar[sec/10000%10];
  45.                         
  46.                                  LedBuff[5] = LedChar[sec/100000%10];
  47.                            if(sec <= 9)
  48.                 {
  49.                         LedBuff[1] = 0xff;LedBuff[2] = 0xff;LedBuff[3] = 0xff;LedBuff[4] = 0xff;LedBuff[5] = 0xff;
  50.                 }
  51.                 else if(sec <= 99)
  52.                 {
  53.                         LedBuff[2] = 0xff;LedBuff[3] = 0xff;LedBuff[4] = 0xff;LedBuff[5] = 0xff;
  54.                 }
  55.                 else if(sec <= 999)
  56.                 {
  57.                         LedBuff[3] = 0xff;LedBuff[4] = 0xff;LedBuff[5] = 0xff;
  58.                 }
  59.                 else if(sec <= 9999)
  60.                 {
  61.                         LedBuff[4] = 0xff;LedBuff[5] = 0xff;
  62.                 }
  63.                 else if(sec <= 99999)
  64.                 {
  65.                         LedBuff[5] = 0xff;
  66.                 }
  67.         }}}
  68.         void InterruptTimer1( )interrupt 3
  69.                          {
  70.                    TH1=0xFC;
  71.                          TL1=0x67;
  72.                          cnt++;
  73.                          if (cnt >= 1000)
  74.                          {
  75.                           cnt = 0;
  76.                                  flagls =1;
  77.                          }
  78.                          P0 = 0xFF;
  79.                          switch (i)
  80.                          {
  81.                            case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; i++; P0 = LedBuff[0]; break;
  82.                                  case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; i++; P0 = LedBuff[1]; break;
  83.                                  case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; i++; P0 = LedBuff[2]; break;
  84.                                  case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1; i++; P0 = LedBuff[3]; break;
  85.                                  case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0; i++; P0 = LedBuff[4]; break;
  86.                                  case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1; i = 0; P0 = LedBuff[5]; break;
  87.                                  default: break;
  88.                          }
  89.                  }
  90.                
  91.         
复制代码

Keil5代码与Proteus8.8仿真下载:
NEW7.zip (83.51 KB, 下载次数: 13)







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1