<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      數(shù)碼管代碼部分

      源碼倉庫

      倉庫地址:https://gitee.com/EricsT/51_microcontrollers/tree/master/DigitalTube

      數(shù)碼管真值表

      #include <reg52.h>
      
      sbit ADDR0 = P1 ^ 0;
      sbit ADDR1 = P1 ^ 1;
      sbit ADDR2 = P1 ^ 2;
      sbit ADDR3 = P1 ^ 3;
      sbit ENLED = P1 ^ 4;
      
      void main(void)
      {
          ENLED = 0;
          ADDR3 = 1; // U3 74HC138芯片使能
          ADDR2 = 0;
          ADDR1 = 0;
          ADDR0 = 0; // 三極管導(dǎo)通
      
          P0 = 0xf9;	//數(shù)字1
          while (1);
      }
      

      單個數(shù)碼管倒計(jì)時

      #include <reg52.h>
      
      sbit ADDR0 = P1 ^ 0;
      sbit ADDR1 = P1 ^ 1;
      sbit ADDR2 = P1 ^ 2;
      sbit ADDR3 = P1 ^ 3;
      sbit ENLED = P1 ^ 4;
      
      unsigned char code LedChar[] =
      {
          0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
           0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
      };//真值表
      
      void main(void)
      {
          char i = 15; // 真值表下標(biāo)
          char cnt = 0;  // 定時器溢出次數(shù)
          ENLED = 0;
          ADDR3 = 1; // U3 74HC138芯片使能
          ADDR2 = 0;
          ADDR1 = 0;
          ADDR0 = 0; // 三極管導(dǎo)通
      
          TMOD = 1; // 設(shè)置定時器0為模式1
      
          TH0 = 0xB8;
          TL0 = 0x00; // 設(shè)置定時器0的初始值
      
          TR0 = 1; // 定時器0開始工作
          P0  = LedChar[i];
      
          while (1) {
      
              if (1 == TF0) // 定時器溢出
              {
                  TF0 = 0;//將溢出標(biāo)志恢復(fù)初值,再次定時
      
                  TH0 = 0xB8;
                  TL0 = 0x00; // 設(shè)置定時器0的初始值
      
                  cnt++;
      
                  if (cnt >= 50)
                  {
                      cnt = 0;
                      if (i < 0)
                          i = 15;
                      P0 = LedChar[i--];
                  }
              }
          }
      }
      

      6段數(shù)碼管動態(tài)顯示

      #include <reg52.h>
      
      sbit ADDR0 = P1 ^ 0;
      sbit ADDR1 = P1 ^ 1;
      sbit ADDR2 = P1 ^ 2;
      sbit ADDR3 = P1 ^ 3;
      sbit ENLED = P1 ^ 4;
      
      unsigned char code LedChar[] =
      {
          0xC0, 0xF9, 0xA4, 0xB0, 0x99,
          0x92, 0x82, 0xF8, 0x80, 0x90
      };
      
      unsigned char LedBuff[] =
      {
          0xFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF
      };
      
      void main(void)
      {
          unsigned char i = 0;//當(dāng)前工作的數(shù)碼管下標(biāo)
          unsigned int cnt = 0;//溢出次數(shù)
          unsigned long sec = 0; // 秒
          ENLED = 0;
          ADDR3 = 1; // U3 74HC138芯片使能
          ADDR2 = 0;
          ADDR1 = 0;
          ADDR0 = 0; // 三極管導(dǎo)通
      
          TMOD = 1; // 設(shè)置定時器0為模式1
      
          TH0 = 0xFC;
          TL0 = 0x67; // 設(shè)置定時器0的初始值
      
          TR0 = 1; // 定時器0開始工作
      
          while (1) 
          {
      
              if (1 == TF0) // 定時器溢出
              {
                  TF0 = 0; // 將溢出標(biāo)志恢復(fù)初值,再次定時
      
                  TH0 = 0xFC;
                  TL0 = 0x67; // 設(shè)置定時器0的初始值
      
                  cnt++;
      
                  if (cnt >= 1000) //1s
                  {
                      cnt = 0;
                      sec++;
                      if (sec >= 999999)
                          sec = 0;
      
      				LedBuff[0] = LedChar[sec % 10];
                  	LedBuff[1] = LedChar[(sec / 10) % 10];
                  	LedBuff[2] = LedChar[(sec / 100) % 10];
                  	LedBuff[3] = LedChar[(sec / 1000) % 10];
                  	LedBuff[4] = LedChar[(sec / 10000) % 10];
                  	LedBuff[5] = LedChar[(sec / 100000) % 10];
                  }
      
                  switch (i) 
                  {
                      case 0:
                          ADDR2 = 0;
                          ADDR1 = 0;
                          ADDR0 = 0; // 三極管導(dǎo)通
                          P0 = LedBuff[0];
                          i++;
                          break;
                      case 1:
                          ADDR2 = 0;
                          ADDR1 = 0;
                          ADDR0 = 1; // 三極管導(dǎo)通
                          P0 = LedBuff[1];
                          i++;
                          break;
                      case 2:
                          ADDR2 = 0;
                          ADDR1 = 1;
                          ADDR0 = 0; // 三極管導(dǎo)通
                          P0 = LedBuff[2];
                          i++;
                          break;
                      case 3:
                          ADDR2 = 0;
                          ADDR1 = 1;
                          ADDR0 = 1; // 三極管導(dǎo)通
                          P0 = LedBuff[3];
                          i++;
                          break;
                      case 4:
                          ADDR2 = 1;
                          ADDR1 = 0;
                          ADDR0 = 0; // 三極管導(dǎo)通
                          P0 = LedBuff[4];
                          i++;
                          break;
                      case 5:
                          ADDR2 = 1;
                          ADDR1 = 0;
                          ADDR0 = 1; // 三極管導(dǎo)通
                          P0 = LedBuff[5];
                          i = 0;
                          break;
                  }
              }
          }
      }
      

      動態(tài)顯示的數(shù)碼管顯示消隱

      #include <reg52.h>
      
      sbit ADDR0 = P1 ^ 0;
      sbit ADDR1 = P1 ^ 1;
      sbit ADDR2 = P1 ^ 2;
      sbit ADDR3 = P1 ^ 3;
      sbit ENLED = P1 ^ 4;
      
      unsigned char code LedChar[] =
      {
          0xC0, 0xF9, 0xA4, 0xB0, 0x99,
          0x92, 0x82, 0xF8, 0x80, 0x90
      };
      
      unsigned char LedBuff[] =
      {
          0xFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF
      };
      
      void main(void)
      {
          unsigned char i = 0;//當(dāng)前工作的數(shù)碼管下標(biāo)
          unsigned int cnt = 0;//溢出次數(shù)
          unsigned long sec = 0; // 秒
          ENLED = 0;
          ADDR3 = 1; // U3 74HC138芯片使能
          ADDR2 = 0;
          ADDR1 = 0;
          ADDR0 = 0; // 三極管導(dǎo)通
      
          TMOD = 1; // 設(shè)置定時器0為模式1
      
          TH0 = 0xFC;
          TL0 = 0x67; // 設(shè)置定時器0的初始值
      
          TR0 = 1; // 定時器0開始工作
      
          while (1) 
          {
      
              if (1 == TF0) // 定時器溢出
              {
                  TF0 = 0; // 將溢出標(biāo)志恢復(fù)初值,再次定時
      
                  TH0 = 0xFC;
                  TL0 = 0x67; // 設(shè)置定時器0的初始值
      
                  cnt++;
      
                  if (cnt >= 1000) //1s
                  {
                      cnt = 0;
                      sec++;
                      if (sec >= 999999)
                          sec = 0;
      
      				LedBuff[0] = LedChar[sec % 10];
                  	LedBuff[1] = LedChar[(sec / 10) % 10];
                  	LedBuff[2] = LedChar[(sec / 100) % 10];
                  	LedBuff[3] = LedChar[(sec / 1000) % 10];
                  	LedBuff[4] = LedChar[(sec / 10000) % 10];
                  	LedBuff[5] = LedChar[(sec / 100000) % 10];
                  }
      
                  
      			P0 = 0xFF;//顯示消隱處理
                  switch (i) 
                  {
                      case 0:
                          ADDR2 = 0;
                          ADDR1 = 0;
                          ADDR0 = 0; // 三極管導(dǎo)通
                          P0 = LedBuff[0];
                          i++;
                          break;
                      case 1:
                          ADDR2 = 0;
                          ADDR1 = 0;
                          ADDR0 = 1; // 三極管導(dǎo)通
                          P0 = LedBuff[1];
                          i++;
                          break;
                      case 2:
                          ADDR2 = 0;
                          ADDR1 = 1;
                          ADDR0 = 0; // 三極管導(dǎo)通
                          P0 = LedBuff[2];
                          i++;
                          break;
                      case 3:
                          ADDR2 = 0;
                          ADDR1 = 1;
                          ADDR0 = 1; // 三極管導(dǎo)通
                          P0 = LedBuff[3];
                          i++;
                          break;
                      case 4:
                          ADDR2 = 1;
                          ADDR1 = 0;
                          ADDR0 = 0; // 三極管導(dǎo)通
                          P0 = LedBuff[4];
                          i++;
                          break;
                      case 5:
                          ADDR2 = 1;
                          ADDR1 = 0;
                          ADDR0 = 1; // 三極管導(dǎo)通
                          P0 = LedBuff[5];
                          i = 0;
                          break;
                  }
              }
          }
      }
      
      

      采用中斷的動態(tài)顯示

      #include <reg52.h>
      
      sbit ADDR0 = P1 ^ 0;
      sbit ADDR1 = P1 ^ 1;
      sbit ADDR2 = P1 ^ 2;
      sbit ADDR3 = P1 ^ 3;
      sbit ENLED = P1 ^ 4;
      
      unsigned char code LedChar[] =
      {
          0xC0, 0xF9, 0xA4, 0xB0, 0x99,
          0x92, 0x82, 0xF8, 0x80, 0x90
      };//數(shù)碼管真值表
      
      unsigned char LedBuff[] = 
      {
          0xff, 0xff, 0xff, 0xff, 0xff, 0xff
      };//數(shù)碼管顯示緩沖區(qū)
      
      unsigned char i = 0;//動態(tài)掃描的索引
      unsigned int cnt = 0;//記錄T0中斷次數(shù)
      unsigned char flag1s = 0;//1s定時標(biāo)志
      
      void main(void)
      {
          unsigned long sec = 0;//記錄經(jīng)過的秒數(shù)
          EA = 1;//使能總中斷
          ENLED = 0;
          ADDR3 = 1;//U3 74HC138芯片使能
          TMOD = 0x01;//設(shè)置定時器T0模式1
          TH0 = 0xFC;
          TL0 = 0x67;//設(shè)置定時器T0的初值
          ET0 = 1;//使能定時器T0中斷
          TR0 = 1;//啟動定時器T0
      
          while (1)
          {
              if (1 == flag1s)//判斷1s定時標(biāo)志
              {
                  flag1s = 0;//1s定時標(biāo)志清零
                  sec++;//秒數(shù)加1
      
                  //設(shè)置數(shù)碼管的值
                  LedBuff[0] = LedChar[sec % 10];
                  LedBuff[1] = LedChar[(sec / 10) % 10];
                  LedBuff[2] = LedChar[(sec / 100) % 10];
                  LedBuff[3] = LedChar[(sec / 1000) % 10];
                  LedBuff[4] = LedChar[(sec / 10000) % 10];
                  LedBuff[5] = LedChar[(sec / 100000) % 10];
      
              }
          }
      }
      
      void InterruptTimer0() interrupt 1
      {
          TH0 = 0xFC;
          TL0 = 0x67;//設(shè)置定時器T0的初值
          cnt++;//中斷次數(shù)+1
      
          if (cnt >= 1000)//中斷1000次即1秒
          {
              cnt = 0;//中斷次數(shù)清零
              flag1s = 1;//設(shè)置1s定時標(biāo)志為1
          }
      
          P0 = 0xff;//顯示消隱
      
           switch (i) 
          {
              case 0:
                  ADDR2 = 0;
                  ADDR1 = 0;
                  ADDR0 = 0; // 三極管導(dǎo)通
                  P0 = LedBuff[0];
                  i++;
                  break;
              case 1:
                  ADDR2 = 0;
                  ADDR1 = 0;
                  ADDR0 = 1; // 三極管導(dǎo)通
                  P0 = LedBuff[1];
                  i++;
                  break;
              case 2:
                  ADDR2 = 0;
                  ADDR1 = 1;
                  ADDR0 = 0; // 三極管導(dǎo)通
                  P0 = LedBuff[2];
                  i++;
                  break;
              case 3:
                  ADDR2 = 0;
                  ADDR1 = 1;
                  ADDR0 = 1; // 三極管導(dǎo)通
                  P0 = LedBuff[3];
                  i++;
                  break;
              case 4:
                  ADDR2 = 1;
                  ADDR1 = 0;
                  ADDR0 = 0; // 三極管導(dǎo)通
                  P0 = LedBuff[4];
                  i++;
                  break;
              case 5:
                  ADDR2 = 1;
                  ADDR1 = 0;
                  ADDR0 = 1; // 三極管導(dǎo)通
                  P0 = LedBuff[5];
                  i = 0;
                  break;
              default:
                  break;
          }
      }
      

      動態(tài)顯示時不顯示高位0-采用中斷

      #include <reg52.h>
      
      sbit ADDR0 = P1 ^ 0;
      sbit ADDR1 = P1 ^ 1;
      sbit ADDR2 = P1 ^ 2;
      sbit ADDR3 = P1 ^ 3;
      sbit ENLED = P1 ^ 4;
      
      unsigned char code LedChar[] =
      {
          0xC0, 0xF9, 0xA4, 0xB0, 0x99,
          0x92, 0x82, 0xF8, 0x80, 0x90
      };//數(shù)碼管真值表
      
      unsigned char LedBuff[] = 
      {
          0xff, 0xff, 0xff, 0xff, 0xff, 0xff
      };//數(shù)碼管顯示緩沖區(qū)
      
      unsigned char i = 0;//動態(tài)掃描的索引
      unsigned int cnt = 0;//記錄T0中斷次數(shù)
      unsigned char flag1s = 0;//1s定時標(biāo)志
      unsigned long sec = 0;//記錄經(jīng)過的秒數(shù)
      
      void main(void)
      {
          //unsigned long sec = 0;//記錄經(jīng)過的秒數(shù)
          EA = 1;//使能總中斷
          ENLED = 0;
          ADDR3 = 1;//U3 74HC138芯片使能
          TMOD = 0x01;//設(shè)置定時器T0模式1
          TH0 = 0xFC;
          TL0 = 0x67;//設(shè)置定時器T0的初值
          ET0 = 1;//使能定時器T0中斷
          TR0 = 1;//啟動定時器T0
      
          while (1)
          {
              if (1 == flag1s)//判斷1s定時標(biāo)志
              {
                  flag1s = 0;//1s定時標(biāo)志清零
                  sec++;//秒數(shù)加1
      
                  //設(shè)置數(shù)碼管的值
                  LedBuff[0] = LedChar[sec % 10];
                  LedBuff[1] = LedChar[(sec / 10) % 10];
                  LedBuff[2] = LedChar[(sec / 100) % 10];
                  LedBuff[3] = LedChar[(sec / 1000) % 10];
                  LedBuff[4] = LedChar[(sec / 10000) % 10];
                  LedBuff[5] = LedChar[(sec / 100000) % 10];
              }
          }
      }
      
      void InterruptTimer0() interrupt 1
      {
          TH0 = 0xFC;
          TL0 = 0x67;//設(shè)置定時器T0的初值
          cnt++;//中斷次數(shù)+1
      
          if (cnt >= 1000)//中斷1000次即1秒
          {
              cnt = 0;//中斷次數(shù)清零
              flag1s = 1;//設(shè)置1s定時標(biāo)志為1
          }
      
          P0 = 0xff;//顯示消隱
      
           switch (i) 
          {
              case 0:
                  ADDR2 = 0;
                  ADDR1 = 0;
                  ADDR0 = 0; // 三極管導(dǎo)通
                  P0 = LedBuff[0];
                  i++;
                  break;
              case 1:
                  i++;
                  if (sec < 10)
                      break;
                  ADDR2 = 0;
                  ADDR1 = 0;
                  ADDR0 = 1; // 三極管導(dǎo)通
                  P0 = LedBuff[1];
                  break;
              case 2:
                  i++;
                  if (sec < 100)
                      break;
                  ADDR2 = 0;
                  ADDR1 = 1;
                  ADDR0 = 0; // 三極管導(dǎo)通
                  P0 = LedBuff[2];
                  break;
              case 3:
                  i++;
                  if (sec < 1000)
                      break;
                  ADDR2 = 0;
                  ADDR1 = 1;
                  ADDR0 = 1; // 三極管導(dǎo)通
                  P0 = LedBuff[3];
                  break;
              case 4:
                  i++;
                  if (sec < 10000)
                      break;
                  ADDR2 = 1;
                  ADDR1 = 0;
                  ADDR0 = 0; // 三極管導(dǎo)通
                  P0 = LedBuff[4];
                  break;
              case 5:
                  i = 0;
                  if (sec < 100000)
                      break;
                  ADDR2 = 1;
                  ADDR1 = 0;
                  ADDR0 = 1; // 三極管導(dǎo)通
                  P0 = LedBuff[5];
                  break;
              default:
                  break;
          }
      }
      

      采用中斷且調(diào)用函數(shù)顯示

      #include <reg52.h>
      
      sbit ADDR0 = P1 ^ 0;
      sbit ADDR1 = P1 ^ 1;
      sbit ADDR2 = P1 ^ 2;
      sbit ADDR3 = P1 ^ 3;
      sbit ENLED = P1 ^ 4;
      
      unsigned char code LedChar[] =
      {
          0xC0, 0xF9, 0xA4, 0xB0, 0x99,
          0x92, 0x82, 0xF8, 0x80, 0x90
      };//數(shù)碼管真值表
      
      unsigned char LedBuff[] = 
      {
          0xff, 0xff, 0xff, 0xff, 0xff, 0xff
      };//數(shù)碼管顯示緩沖區(qū)
      
      unsigned char flag1s = 0;//1s定時標(biāo)志
      
      void setLedValue()
      {
      	static unsigned long sec = 0;//記錄經(jīng)過的秒數(shù)
      	flag1s = 0;//1s定時標(biāo)志清零
          sec++;//秒數(shù)加1
      
                  //設(shè)置數(shù)碼管的值
          LedBuff[0] = LedChar[sec % 10];
          LedBuff[1] = LedChar[(sec / 10) % 10];
          LedBuff[2] = LedChar[(sec / 100) % 10];
          LedBuff[3] = LedChar[(sec / 1000) % 10];
          LedBuff[4] = LedChar[(sec / 10000) % 10];
          LedBuff[5] = LedChar[(sec / 100000) % 10];
      }
      
      void FlashLed()
      {
      	static unsigned char i = 0;//動態(tài)掃描的索引
      	switch (i) 
          {
      		case 0:
      			ADDR2 = 0;
                  ADDR1 = 0;
                  ADDR0 = 0; // 三極管導(dǎo)通
                  P0 = LedBuff[0];
                  i++;
                  break;
              case 1:
                  ADDR2 = 0;
                  ADDR1 = 0;
                  ADDR0 = 1; // 三極管導(dǎo)通
                  P0 = LedBuff[1];
                  i++;
                  break;
              case 2:
                  ADDR2 = 0;
                  ADDR1 = 1;
                  ADDR0 = 0; // 三極管導(dǎo)通
                  P0 = LedBuff[2];
                  i++;
                  break;
              case 3:
                  ADDR2 = 0;
                  ADDR1 = 1;
                  ADDR0 = 1; // 三極管導(dǎo)通
                  P0 = LedBuff[3];
                  i++;
                  break;
              case 4:
                  ADDR2 = 1;
                  ADDR1 = 0;
                  ADDR0 = 0; // 三極管導(dǎo)通
                  P0 = LedBuff[4];
                  i++;
                  break;
              case 5:
                  ADDR2 = 1;
                  ADDR1 = 0;
                  ADDR0 = 1; // 三極管導(dǎo)通
                  P0 = LedBuff[5];
                  i = 0;
                  break;
              default:
                  break;
          }
      }
      
      void main(void)
      {
          EA = 1;//使能總中斷
          ENLED = 0;
          ADDR3 = 1;//U3 74HC138芯片使能
          TMOD = 0x01;//設(shè)置定時器T0模式1
          TH0 = 0xFC;
          TL0 = 0x67;//設(shè)置定時器T0的初值
          ET0 = 1;//使能定時器T0中斷
          TR0 = 1;//啟動定時器T0
      
          while (1)
          {
              if (1 == flag1s)//判斷1s定時標(biāo)志
      			setLedValue();
          }
      }
      
      void InterruptTimer0() interrupt 1
      {
      	static unsigned int cnt = 0;//記錄T0中斷次數(shù)
          TH0 = 0xFC;
          TL0 = 0x67;//設(shè)置定時器T0的初值
          cnt++;//中斷次數(shù)+1
      
          if (cnt >= 1000)//中斷1000次即1秒
          {
              cnt = 0;//中斷次數(shù)清零
              flag1s = 1;//設(shè)置1s定時標(biāo)志為1
          }
      
          P0 = 0xff;//顯示消隱
      	FlashLed();    
      }
      
      posted @ 2025-07-26 11:32  EricsT  閱讀(277)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品性视频一区二区| 亚洲精品成人久久久| 99久久婷婷国产综合精品青草漫画| 久久精品人人做人人爽电影蜜月| 伊人久久大香线蕉综合网| 日韩精品一区二区都可以| 国产精品久久久久鬼色| 久久精品国产91精品亚洲| 夜夜添无码试看一区二区三区| 国产亚洲欧洲AⅤ综合一区| 亚洲v欧美v日韩v国产v| 国产极品尤物粉嫩在线观看| 中文字幕日韩人妻一区| 巨爆乳中文字幕爆乳区| 久久精品蜜芽亚洲国产AV| 亚洲AV成人一区国产精品| 国产精品国产三级国产专业| 性视频一区| 欧美做受视频播放| 丹寨县| 国产一区二区三区精品综合| 国产福利社区一区二区| 亚洲色最新高清AV网站| 日韩精品人妻黄色一级片| 久久精品日日躁夜夜躁| 亚洲精品综合网在线8050影院| 砚山县| 中文有无人妻vs无码人妻激烈 | 夜夜躁日日躁狠狠久久av| 蒙山县| 国产精品中文字幕自拍| 九九热精品在线观看| 亚洲人成网站18禁止无码| 亚洲熟女乱一区二区三区| 欧美牲交a免费| 国内精品自产拍在线播放| 丁香五月婷激情综合第九色 | 亚洲国产一区二区三区| 99视频精品全部免费 在线| 成年无码av片在线蜜芽| 亚洲最大av资源站无码av网址|