0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)碼管的靜態(tài)、動態(tài)顯示原理及編程方法(1)

CHANBAEK ? 來源:狂錘硬件 ? 作者:顧 ? 2023-06-28 11:40 ? 次閱讀

“掌握數(shù)碼管的靜態(tài)、動態(tài)顯示原理及編程方法。--不是綜合案例”

實現(xiàn)數(shù)碼管的靜態(tài)及動態(tài)顯示:

效果1(靜態(tài)顯示):6位數(shù)碼管循環(huán)顯示數(shù)字0~F;

效果2(動態(tài)態(tài)顯示):6位數(shù)碼管同時顯示數(shù)字1~6;

效果3(按鍵檢測):用中斷或查詢方式進行按鍵檢測,實現(xiàn)數(shù)碼管顯示值的加減,最大值為65535;

01電路圖

我們的電路圖如下:

圖片

02效果

代碼如下:

/************
時間:2023/04/26
作者:顧
效果1(靜態(tài)顯示):6位數(shù)碼管循環(huán)顯示數(shù)字0~F;
**************/
#include < reg51.h >


//*****聲明函數(shù)和變量、引腳的定義
#define u8  unsigned char
#define u16 unsigned int



u8 Table_cc[]={
            0x3f,0x06,0x5b,0x4f,
            0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x77,0x7c,
            0x39,0x5e,0x79,0x71
};


/*****延時函數(shù)********************
時間:2023年4月26日
功能:延時110*10 = 1100μs = 1.1ms
**********************************/
void Delay(u16 k){
  u16 i,j;
  for(i=0;i< k;i++)
    for(j=0;j< 1100;j++);
}




/*****顯示函數(shù)****************
時間:2023年4月26日
功能:
      數(shù)碼管顯示函數(shù)
********************************/
void Display(u16 n){
  //顯示秒個位
  P1 = 0XC0;   //1100 0000
  P2 = Table_cc[n];
  Delay(100);  
}




/*****主函數(shù)****************
時間:2023年4月26日
********************************/
void main(){
  u8 i;
  while(1){
    for(i=0;i< 16;i++)
    {
      Display(i);
    }
  }
}

03效果2

代碼如下:

方法一

/************
時間:2023/04/26
作者:顧
效果2(動態(tài)態(tài)顯示):6位數(shù)碼管同時顯示數(shù)字1~6;(30分)
**************/
#include < reg51.h >


//*****聲明函數(shù)和變量、引腳的定義
#define u8  unsigned char
#define u16 unsigned int

u8 t[6]= {17,17,17,17,17,17};


u8 Table_cc[]={
            0x3f,0x06,0x5b,0x4f,
            0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x77,0x7c,
            0x39,0x5e,0x79,0x71,
            0x00
};


/*****延時函數(shù)********************
時間:2023年4月26日
功能:延時110*10 = 1100μs = 1.1ms
**********************************/
void Delay(u16 k){
  u16 i,j;
  for(i=0;i< k;i++)
    for(j=0;j< 110;j++);
}




/*****顯示函數(shù)****************
時間:2023年4月26日
功能:
      數(shù)碼管顯示函數(shù)
********************************/
void Display(u8 h,u8 m,u8 s){

  P1 = 0Xff;
  P2 = Table_cc[s%10];
  P1 = 0Xdf;       // 1101 1111
  Delay(10);  



  P1 = 0Xff;
  P2 = Table_cc[s/10];
  P1 = 0Xef;       // 1110 1111
  Delay(10);  



  P1 = 0Xff;
  P2 = Table_cc[m%10];
  P1 = 0Xf7;       // 1111 0111
  Delay(10); 



  P1 = 0Xff;
  P2 = Table_cc[m/10];
  P1 = 0Xfb;       // 1111 1011
  Delay(10);




  P1 = 0Xff;
  P2 = Table_cc[h%10];
  P1 = 0Xfd;       // 1111 1101
  Delay(10);   



  P1 = 0Xff;
  P2 = Table_cc[h/10];
  P1 = 0Xfe;       // 1111 1110
  Delay(10);
}




/*****主函數(shù)****************
時間:2023年4月26日
********************************/
void main(){


  while(1){
      Display(12,34,56);
  }
}

方法二:

/************
時間:2023/04/26
作者:顧
效果2(動態(tài)態(tài)顯示):6位數(shù)碼管同時顯示數(shù)字1~6;(30分)
**************/
#include < reg51.h >


//*****聲明函數(shù)和變量、引腳的定義
#define u8  unsigned char
#define u16 unsigned int
#define u32 unsigned long


u8 t[6]= {0,0,0,0,0,0};
u32 num = 123456;


u8 Table_cc[]={
            0x3f,0x06,0x5b,0x4f,
            0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x77,0x7c,
            0x39,0x5e,0x79,0x71,
};


/*****延時函數(shù)********************
時間:2023年4月26日
功能:延時110*10 = 1100μs = 1.1ms
**********************************/
void Delay(u16 k){
  u16 i,j;
  for(i=0;i< k;i++)
    for(j=0;j< 110;j++);
}




/*****顯示函數(shù)****************
時間:2023年4月26日
功能:
      數(shù)碼管顯示函數(shù)
********************************/
void Display(u32 n){

  t[0] = n/100000;
  t[1] = n%100000/10000;
  t[2] = n%10000/1000;
  t[3] = n%1000/100;
  t[4] = n%100/10;
  t[5] = n%10;

  P1 = 0Xff;
  P2 = Table_cc[t[0]];
  P1 = 0Xfe;       // 1111 1110
  Delay(10);

  P1 = 0Xff;
  P2 = Table_cc[t[1]];
  P1 = 0Xfd;       // 1111 1101
  Delay(10);  

  P1 = 0Xff;
  P2 = Table_cc[t[2]];
  P1 = 0Xfb;       // 1111 1011
  Delay(10);

  P1 = 0Xff;
  P2 = Table_cc[t[3]];
  P1 = 0Xf7;       // 1111 0111
  Delay(10); 

  P1 = 0Xff;
  P2 = Table_cc[t[4]];
  P1 = 0Xef;       // 1110 1111
  Delay(10);  

  P1 = 0Xff;
  P2 = Table_cc[t[5]];
  P1 = 0Xdf;       // 1101 1111
  Delay(10);  


}




/*****主函數(shù)****************
時間:2023年4月26日
********************************/
void main(){


  while(1){
      Display(num);
  }
}

04效果3

/************
時間:2023/04/26
作者:顧
效果2(動態(tài)態(tài)顯示):6位數(shù)碼管同時顯示數(shù)字1~6;(30分)
**************/


#include < reg51.h >


//*****聲明函數(shù)和變量、引腳的定義
#define u8  unsigned char
#define u16 unsigned int

#define Key1Press 1
#define Key2Press 2

sbit ADD = P3^0;
sbit SUB = P3^1;


bit sec;  //秒標志
bit key_mark=0; //鍵標志


u8 cnt,state;
u8 t[6]= {0,0,0,0,0,0};
u16 num=65534;


u8 Table_cc[]={
            0x3f,0x06,0x5b,0x4f,
            0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x77,0x7c,
            0x39,0x5e,0x79,0x71
};


/*****延時函數(shù)********************
時間:2023年4月26日
功能:延時110*10 = 1100μs = 1.1ms
**********************************/
void Delay(u16 k){
  u16 i,j;
  for(i=0;i< k;i++)
    for(j=0;j< 110;j++);
}




/*****按鍵函數(shù)****************
時間:2023年4月26日
功能:
    Key1Press 1 SET 設置鍵 ********
    Key2Press 2 ADD 數(shù)字加 ********
    Key3Press 3 SUB 數(shù)字減 ********
********************************/
void Key(u8 K)
{  
  static u8  KeyPress;
  KeyPress = K;
  if(KeyPress == 1 )
  {
     num = num+10;
     if(num > 65535)
        num=0;                   
   }
   else if(KeyPress == 2)
   {
      if(num  == 0)
          num=65535;
         //num--;
         num = num-10;
     }
}
/*****按鍵掃描函數(shù)****************
時間:2023年4月26日
功能:函數(shù)返回鍵值
【判斷按鍵是否按下,如果按下
則key_mark置1,說明按鍵已經(jīng)按下】 
********************************/
u8 Key_read(){
  if(!ADD)
  {
    Delay(10);
    if(!ADD && key_mark == 0 )
    {
      key_mark = 1;
      return Key1Press;
    }
  }
  else if(!SUB)
  {
    Delay(10);
    if(!SUB && key_mark == 0 )
    {
      key_mark = 1;
      return Key2Press;
    }
  }
   else if(ADD && SUB )
     {
         key_mark = 0;
     }
    return 0;
}


/*****定時器函數(shù)****************
時間:2023年4月26日
功能:實現(xiàn)1s定時
********************************/
void InitT0(){
  TMOD = 0x01;
  IE = 0x82;
  TH0 = -50000 > > 8;
  TL0 = -50000;
  TR0 = 1;

}


void T0ser() interrupt 1{
  TH0 = -50000 >> 8;
  TL0 = -50000 ;
  if(++cnt == 20)
  {
     sec = 1;
     cnt = 0;
  }  
}


/*****走時函數(shù)****************
時間:2023年4月26日
功能:
      時間正常走時
********************************/
u16 TimeGo(){
    if(sec)
    {
        sec = 0;
        if(++num > 65535)
      {
          num = 0;
        }
      }
    return num;
}


/*****顯示函數(shù)****************
時間:2023年4月26日
功能:
      數(shù)碼管顯示函數(shù)
********************************/
void Display(u16 n){

  t[0] = n/100000;
  t[1] = n%100000/10000 ;
  t[2] = n%10000/1000;
  t[3] = n%1000/100;
  t[4] = n%100/10;
  t[5] = n%10;

  P1 = 0Xff;
  P2 = Table_cc[t[0]];
  P1 = 0Xfe;       // 1111 1110
  Delay(10);

  P1 = 0Xff;
  P2 = Table_cc[t[1]];
  P1 = 0Xfd;       // 1111 1101
  Delay(10);  

  P1 = 0Xff;
  P2 = Table_cc[t[2]];
  P1 = 0Xfb;       // 1111 1011
  Delay(10);

  P1 = 0Xff;
  P2 = Table_cc[t[3]];
  P1 = 0Xf7;       // 1111 0111
  Delay(10); 

  P1 = 0Xff;
  P2 = Table_cc[t[4]];
  P1 = 0Xef;       // 1110 1111
  Delay(10);  

  P1 = 0Xff;
  P2 = Table_cc[t[5]];
  P1 = 0Xdf;       // 1101 1111
  Delay(10);  


}






/*****主函數(shù)****************
時間:2023年4月25日
********************************/
void main(){
  InitT0();
  while(1){
      Key(Key_read()) ;
//      TimeGo(num);
      Display(TimeGo());
  }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 電路圖
    +關(guān)注

    關(guān)注

    10344

    文章

    10721

    瀏覽量

    530641
  • 數(shù)碼管
    +關(guān)注

    關(guān)注

    32

    文章

    1882

    瀏覽量

    91124
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    898

    瀏覽量

    41502
  • 動態(tài)顯示
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    11674
  • 靜態(tài)顯示
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    6001
收藏 人收藏

    評論

    相關(guān)推薦

    #51單片機#數(shù)碼管靜態(tài)動態(tài)顯示 精選資料分享

    數(shù)碼管靜態(tài)顯示動態(tài)顯示學習數(shù)碼管靜態(tài)動態(tài)顯示
    發(fā)表于 07-14 08:13

    完成數(shù)碼管動態(tài)顯示方法

    開拓者FPGA開發(fā)板上有六個共陽極八段數(shù)碼管,本實驗將完成數(shù)碼管動態(tài)顯示。數(shù)碼管動態(tài)/靜態(tài)
    發(fā)表于 01-18 10:25

    數(shù)碼管靜態(tài)顯示動態(tài)顯示的實現(xiàn)方法

    數(shù)碼管靜態(tài)顯示動態(tài)顯示數(shù)碼管共陽和共陰段選和位選數(shù)碼管靜態(tài)
    發(fā)表于 03-01 07:34

    數(shù)碼管動態(tài)顯示實驗

    數(shù)碼管動態(tài)顯示實驗一、實驗目的在實際的單片機系統(tǒng)中,往往需要多位顯示。動態(tài)顯示是一種最常見的多位顯示方法
    發(fā)表于 03-23 10:45 ?1w次閱讀

    數(shù)碼管動態(tài)顯示)【C語言版】

    數(shù)碼管動態(tài)顯示)【C語言版】數(shù)碼管動態(tài)顯示)【C語言版】數(shù)碼管動態(tài)顯示)【C語言版】
    發(fā)表于 12-29 15:51 ?0次下載

    數(shù)碼管動態(tài)顯示)【匯編+C語言版】

    數(shù)碼管動態(tài)顯示)【匯編+C語言版】,與前面的靜態(tài)顯示相呼應,多種集合,符合C語言和匯編愛好者學習。
    發(fā)表于 12-31 10:16 ?0次下載

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

    數(shù)碼管動態(tài)顯示,MIN數(shù)碼管動態(tài)顯示,MIN。
    發(fā)表于 05-03 10:48 ?9次下載

    數(shù)碼管靜態(tài)動態(tài)顯示和74HC138及點陣的動態(tài)顯示詳細資料說明

    本文檔的主要內(nèi)容詳細介紹的是數(shù)碼管靜態(tài)動態(tài)顯示和74HC138及點陣的動態(tài)顯示詳細資料說明。
    發(fā)表于 04-12 18:27 ?5次下載
    <b class='flag-5'>數(shù)碼管</b>的<b class='flag-5'>靜態(tài)</b>與<b class='flag-5'>動態(tài)顯示</b>和74HC138及點陣的<b class='flag-5'>動態(tài)顯示</b>詳細資料說明

    使用數(shù)碼管動態(tài)顯示123456的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用數(shù)碼管動態(tài)顯示123456的程序免費下載。解釋:數(shù)碼管動態(tài)顯示,其實就是一個快速的靜態(tài)
    發(fā)表于 08-07 17:33 ?13次下載
    使用<b class='flag-5'>數(shù)碼管</b><b class='flag-5'>動態(tài)顯示</b>123456的程序免費下載

    數(shù)碼管動態(tài)顯示的原理概述

    作用,使人的感覺好像各位數(shù)碼管同時都在顯示。動態(tài)顯示的亮度比靜態(tài)顯示要差一些,所以在選擇限流電阻時應略小于
    發(fā)表于 11-04 08:00 ?0次下載

    C51單片機學習筆記(五)——數(shù)碼管靜態(tài)顯示動態(tài)顯示

    C51單片機學習筆記(五)——數(shù)碼管靜態(tài)顯示動態(tài)顯示文章目錄C51單片機學習筆記(五)——數(shù)碼管
    發(fā)表于 11-14 10:21 ?6次下載
    C51單片機學習筆記(五)——<b class='flag-5'>數(shù)碼管</b>的<b class='flag-5'>靜態(tài)</b><b class='flag-5'>顯示</b>和<b class='flag-5'>動態(tài)顯示</b>

    #51單片機#數(shù)碼管靜態(tài)動態(tài)顯示

    數(shù)碼管靜態(tài)顯示動態(tài)顯示學習數(shù)碼管靜態(tài)動態(tài)顯示
    發(fā)表于 11-14 19:51 ?20次下載
    #51單片機#<b class='flag-5'>數(shù)碼管</b><b class='flag-5'>靜態(tài)</b>與<b class='flag-5'>動態(tài)顯示</b>

    【51單片機】數(shù)碼管靜態(tài)顯示動態(tài)顯示

    【51單片機】數(shù)碼管靜態(tài)顯示動態(tài)顯示數(shù)碼管顯示原理此次以點亮共陰
    發(fā)表于 11-17 12:21 ?12次下載
    【51單片機】<b class='flag-5'>數(shù)碼管</b>的<b class='flag-5'>靜態(tài)</b><b class='flag-5'>顯示</b>和<b class='flag-5'>動態(tài)顯示</b>

    單片機AT89C51--6.數(shù)碼管顯示(含動態(tài)靜態(tài)

    單片機AT89C51--6.靜態(tài)數(shù)碼管顯示1. 數(shù)碼管顯示原理2.
    發(fā)表于 11-25 14:51 ?23次下載
    單片機AT89C51--6.<b class='flag-5'>數(shù)碼管</b><b class='flag-5'>顯示</b>(含<b class='flag-5'>動態(tài)</b>,<b class='flag-5'>靜態(tài)</b>)

    數(shù)碼管靜態(tài)、動態(tài)顯示原理及編程方法(2)

    “掌握數(shù)碼管靜態(tài)、動態(tài)顯示原理及編程方法。--綜合案例”
    的頭像 發(fā)表于 06-28 11:41 ?1751次閱讀
    <b class='flag-5'>數(shù)碼管</b>的<b class='flag-5'>靜態(tài)</b>、<b class='flag-5'>動態(tài)顯示</b>原理及<b class='flag-5'>編程</b><b class='flag-5'>方法</b>(2)