RM新时代网站-首页

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

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

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

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

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

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

前言

圖片

我們繼續(xù)來(lái)寫(xiě)一個(gè)代碼,來(lái)綜合這些效果

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;


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


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


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


//主函數(shù)
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;
  }
}


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


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


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


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


/*****靜態(tài)顯示函數(shù)****************
時(shí)間:2023年4月29日
功能:6位數(shù)碼管循環(huán)顯示數(shù)字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;
    }
}


/*****動(dòng)態(tài)顯示函數(shù)****************
時(shí)間:2023年4月29日
功能:動(dòng)態(tài)顯示數(shù)字--用于效果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);  


}

實(shí)驗(yàn)結(jié)果:

當(dāng)我們打開(kāi)電源時(shí),效果1就開(kāi)始執(zhí)行了,我們按下SET鍵,等效果1完全執(zhí)行完畢后,會(huì)自動(dòng)跳入效果2。如果我們?cè)俅伟聪耂ET鍵,會(huì)進(jìn)入到效果3,在這時(shí),如果我們按下ADD鍵,可以執(zhí)行數(shù)字的加;如果我們按下SUB鍵,可以執(zhí)行數(shù)字的減。

一些未解決的問(wèn)題:

首先 ,數(shù)字的加減,數(shù)字加和減,都不能準(zhǔn)確的加1或者減1,都是加3或者減3,不符合我們代碼寫(xiě)的效果,只是實(shí)現(xiàn)了加減而已;

其次 ,數(shù)字的減到0后,不能從65535開(kāi)始,而是一個(gè)其他數(shù);

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 電路圖
    +關(guān)注

    關(guān)注

    10340

    文章

    10720

    瀏覽量

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

    關(guān)注

    32

    文章

    1882

    瀏覽量

    91060
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3614

    瀏覽量

    93685
  • 動(dòng)態(tài)顯示
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

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

    關(guān)注

    0

    文章

    19

    瀏覽量

    5989
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

    數(shù)碼管動(dòng)態(tài)顯示實(shí)驗(yàn)

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

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

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

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

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

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

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

    8個(gè)數(shù)碼管靜態(tài)顯示_數(shù)碼管動(dòng)態(tài)顯示

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

    數(shù)碼管靜態(tài)動(dòng)態(tài)顯示和74HC138及點(diǎn)陣的動(dòng)態(tài)顯示詳細(xì)資料說(shuō)明

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

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

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

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

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

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

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

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

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

    單片機(jī)AT89C51--6.數(shù)碼管顯示(含動(dòng)態(tài),靜態(tài)

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

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

    “掌握數(shù)碼管靜態(tài)、動(dòng)態(tài)顯示原理及編程方法。--不是綜合案例”
    的頭像 發(fā)表于 06-28 11:40 ?2776次閱讀
    <b class='flag-5'>數(shù)碼管</b>的<b class='flag-5'>靜態(tài)</b>、<b class='flag-5'>動(dòng)態(tài)顯示</b>原理及<b class='flag-5'>編程</b><b class='flag-5'>方法</b>(1)
    RM新时代网站-首页