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

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

3天內不再提示

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

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

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

前言

圖片

我們繼續(xù)來寫一個代碼,來綜合這些效果

01電路圖

圖片

02代碼如下

#include < reg51.h >
#define u8  unsigned char
#define u16 unsigned  int
#define u32 unsigned long


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


bit key_mark = 0;
bit break_out = 0;
//共陰極
u8 Table_cc[]={
            0x3f,0x06,0x5b,0x4f,
            0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x77,0x7c,
            0x39,0x5e,0x79,0x71
};


u8 state = 0;
u32 num2=0;
u32 num1 = 123456;


u8 d0,d1,d2,d3,d4,d5;


//函數的聲明
void Delay(u16 k);
void KeyScan();
void Key();
void DigDisplay1();
void DigDisplay2();


/*****外部中斷函數****************
時間:2023年4月29日
********************************/
void InitI0(){
  IE = 0x81;
  IT0 = 1;  //邊沿檢測
}


//外部中斷0的作用:1.讓效果的狀態(tài)改變 2.break_out可以讓效果1執(zhí)行后,可以跳出效果1的循環(huán)
void InT0() interrupt 0{
  if(state++ > 2 )  {
       state == 0;
    break_out = 1;
  }  
}


//主函數
void main(){
  InitI0();
  while(1){


      if(state == 0)
      {
          DigDisplay1();
      }


      if(state == 1)
      {
        d0 = num1/100000;
        d1 = num1%100000/10000;
        d2 = num1%10000/1000;
        d3 = num1%1000/100;
        d4 = num1%100/10;
        d5 = num1%10;
        DigDisplay2();
      }
      else if(state == 2)
      {
        Key();
        d0 = num2/100000;
        d1 = num2%100000/10000;
        d2 = num2%10000/1000;
        d3 = num2%1000/100;
        d4 = num2%100/10;
        d5 = num2%10;
        DigDisplay2();
      }
      else 
        break_out = 0;
  }
}


//延時函數
void Delay(u16 k){
  u16 i,j;
  for(i=0;i< k;i++)
    for(j=0;j< 110;j++);
}


//按鍵掃描函數:用于判斷是哪一個按鍵按下了
void KeyScan()
{
  if((!ADD || !SUB)&& key_mark == 0)
  {
    Delay(10);
    if(!ADD || !SUB)
    {
      key_mark = 1;
      Key();
    }
  }
  else if(ADD && SUB)
  {
     key_mark =0;
  }
}


//按鍵函數:用于數字的加減 
void Key()
{
  if(state == 2)
  {
    if(!ADD)
    {
        if(++num2 >65535)
          num2 = 0; 


    }
    else if(!SUB)
    {
      if(num2 == 0 )
        num2 == 65536;  
            num2--;
    }
  }
}


/*****靜態(tài)顯示函數****************
時間:2023年4月29日
功能:6位數碼管循環(huán)顯示數字0~F;
********************************/
void DigDisplay1()
{
  u8 i;
  for(i=0; i< 16; i++)
    {
      P1 = 0XC0;   //1100 0000  
      P2 = Table_cc[i];
      Delay(1000);  
      P1 = 0Xff;
      if(break_out)
        break;
    }
}


/*****動態(tài)顯示函數****************
時間:2023年4月29日
功能:動態(tài)顯示數字--用于效果2和效果3
********************************/
void DigDisplay2(){


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


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


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


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


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


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


}

實驗結果:

當我們打開電源時,效果1就開始執(zhí)行了,我們按下SET鍵,等效果1完全執(zhí)行完畢后,會自動跳入效果2。如果我們再次按下SET鍵,會進入到效果3,在這時,如果我們按下ADD鍵,可以執(zhí)行數字的加;如果我們按下SUB鍵,可以執(zhí)行數字的減。

一些未解決的問題:

首先 ,數字的加減,數字加和減,都不能準確的加1或者減1,都是加3或者減3,不符合我們代碼寫的效果,只是實現了加減而已;

其次 ,數字的減到0后,不能從65535開始,而是一個其他數;

然后 ,我們實現題目的方法,其實是可以直接使用按鍵去改變狀態(tài)的,但是由于我自身的不足,我無法直接使用按鍵去修改狀態(tài),還需要借助外部中斷0,去輔助我修改state。

最后 ,在不使用其他芯片的情況下,代碼不夠整潔,不是很美觀。還有就是,在狀態(tài)2下,數字偶爾還會有閃爍的情況,在狀態(tài)3下,數字閃爍更嚴重了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 電路圖
    +關注

    關注

    10344

    文章

    10721

    瀏覽量

    530641
  • 數碼管
    +關注

    關注

    32

    文章

    1882

    瀏覽量

    91124
  • 編程
    +關注

    關注

    88

    文章

    3616

    瀏覽量

    93738
  • 動態(tài)顯示

    關注

    0

    文章

    40

    瀏覽量

    11674
  • 靜態(tài)顯示

    關注

    0

    文章

    19

    瀏覽量

    6001
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    8個數碼管靜態(tài)顯示_數碼管動態(tài)顯示

    本文主要介紹了幾個數碼管靜態(tài)顯示以及數碼管動態(tài)顯示程序,數碼管由多個發(fā)光二極
    發(fā)表于 01-16 16:37 ?2w次閱讀
    8個<b class='flag-5'>數碼管</b><b class='flag-5'>靜態(tài)</b><b class='flag-5'>顯示</b>_<b class='flag-5'>數碼管</b>的<b class='flag-5'>動態(tài)顯示</b>

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

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

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

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

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

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

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

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

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

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

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

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

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

    “掌握數碼管靜態(tài)動態(tài)顯示原理及編程方法。--不是綜合案例”
    的頭像 發(fā)表于 06-28 11:40 ?2841次閱讀
    <b class='flag-5'>數碼管</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>(1)