找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3775|回復: 9
打印 上一主題 下一主題
收起左側

求助單片機數碼管的問題,需要實現當數字為一位數時不顯示前面的三個0

[復制鏈接]
跳轉到指定樓層
樓主
ID:399408 發(fā)表于 2018-9-19 11:30 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

請教各位大佬,這是顯示0·9999的代碼,如圖所示,請問怎么修改才能實現“當數字為一位數時不顯示前面的三個0,當數字為兩位數時不顯示前面的三個0”以此類推。!

單片機源程序如下:
  1. /***************************************************************************
  2. 標題:        數碼管的顯示
  3. 實驗板:LY51-L2B開發(fā)板
  4. 作者:        林洋電子-單片機
  5. 客服QQ:52927029
  6. 郵箱:        52927029@qq.com
  7. 說明:        顯示00-99,動態(tài)顯示+變化顯示
  8. ******************************************************************************/

  9. //頭文件:
  10. #include <reg52.h>

  11. //引腳定義:               
  12. sbit SMG_q = P0^0;        //定義數碼管陽級控制腳(千位)
  13. sbit SMG_b = P0^1;        //定義數碼管陽級控制腳(百位)
  14. sbit SMG_s = P0^2;        //定義數碼管陽級控制腳(十位)
  15. sbit SMG_g = P0^3;        //定義數碼管陽級控制腳(個位)

  16. //變量定義:
  17. unsigned char table[]=
  18.                         {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  19.                                         //表:共陽數碼管 0-9

  20. //函數聲明:
  21. void display(unsigned char da);//定義顯示函數,參數為顯示內容,只顯示兩位數
  22. void delay(void);

  23. //主函數,C語言的入口函數:                       
  24. void main(void)  
  25. {
  26.         unsigned char i=0;                //作為查表的索引號
  27.         unsigned char ldata;        //變量用作0~99計數
  28.         unsigned int j;                                //此變量作為計數跳變刷新時間
  29.         while(1)
  30.         {      
  31.                 j=500;                       
  32.                 while(j--){               
  33.                         display(ldata);        //刷新5000次,約1秒,注:在C語言里是沒有周期可計算的哦~~~
  34.                 }                                               
  35.                 if(ldata<99)
  36.                         ldata++;                                //刷新完成約1秒,變量做加計數
  37.                 else
  38.                         ldata=0;
  39.         }
  40. }

  41. //顯示函數,參數為顯示內容,只顯示兩位數
  42. void display(unsigned char da)
  43. {
  44.         SMG_q=0;                        //選擇千位數碼管
  45.         P2=table[da/1000%100];        //獲取個位值,查表輸出定義好的數碼管段值與P2口,顯示相應的0-9
  46.         delay();                        //延時
  47.         P2=0XFF;                        //清除數碼管顯示,因是共陽型,所以不是0
  48.         SMG_q=1;                        //關閉千位數碼管

  49.         SMG_b=0;                        //選擇百位數碼管
  50.         P2=table[da/100%10];        //獲取個位值,查表輸出定義好的數碼管段值與P2口,顯示相應的0-9
  51.         delay();                        //延時
  52.         P2=0XFF;                        //清除數碼管顯示,因是共陽型,所以不是0
  53.         SMG_b=1;                        //關閉百位數碼管

  54.         SMG_s=0;                        //選擇十位數碼管
  55.         P2=table[da/10];        //獲取十位值,查表輸出定義好的數碼管段值與P2口,顯示相應的0-9
  56.         delay();                        //延時
  57.         P2=0XFF;                        //清除數碼管顯示,因是共陽型,所以不是0
  58.         SMG_s=1;                        //關閉十位數碼管

  59.         SMG_g=0;                        //選擇個位數碼管
  60.         P2=table[da%10];        //獲取個位值,查表輸出定義好的數碼管段值與P2口,顯示相應的0-9
  61.         delay();                        //延時
  62.         P2=0XFF;                        //清除數碼管顯示,因是共陽型,所以不是0
  63.         SMG_g=1;                        //關閉個位數碼管
  64. }

  65. //延時子函數,短暫延時
  66. void delay(void){               
  67.         unsigned char i=10;
  68.         while(i--);
  69. }
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:84765 發(fā)表于 2018-9-19 16:05 | 只看該作者
加判斷語句就行了

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:7485 發(fā)表于 2018-9-19 16:12 | 只看該作者
可以將“p2=table[da/1000%100]; ”改為“x=table[da/1000%100]; ”,然后判斷是否x=0, 若=0,則“p2=0xff”,不等于0 則 p2=x,其余位同樣。

編程還是自己多鉆研,對提高有好處。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:135253 發(fā)表于 2018-9-19 16:46 | 只看該作者
拿去吧,顯示函數這樣改一下就行了!
//顯示函數,參數為顯示內容,只顯示兩位數
void display(unsigned char da)
{
        if(da<1000)
                SMG_q=1;
        else
        {
        SMG_q=0;                        //選擇千位數碼管
        P2=table[da/1000%100];        //獲取個位值,查表輸出定義好的數碼管段值與P2口,顯示相應的0-9
        delay();                        //延時
        P2=0XFF;                        //清除數碼管顯示,因是共陽型,所以不是0
        SMG_q=1;                                                 //關閉千位數碼管
        }                 

        if(da<100)
                SMG_b=1;
        else
        {
        SMG_b=0;                        //選擇百位數碼管
        P2=table[da/100%10];        //獲取個位值,查表輸出定義好的數碼管段值與P2口,顯示相應的0-9
        delay();                        //延時
        P2=0XFF;                        //清除數碼管顯示,因是共陽型,所以不是0
        SMG_b=1;                        //關閉百位數碼管
        }
       
        if(da<10)
                SMG_s=1;
        else
        {
        SMG_s=0;                        //選擇十位數碼管
        P2=table[da/10];        //獲取十位值,查表輸出定義好的數碼管段值與P2口,顯示相應的0-9
        delay();                        //延時
        P2=0XFF;                        //清除數碼管顯示,因是共陽型,所以不是0
        SMG_s=1;                        //關閉十位數碼管
        }
        SMG_g=0;                        //選擇個位數碼管
        P2=table[da%10];        //獲取個位值,查表輸出定義好的數碼管段值與P2口,顯示相應的0-9
        delay();                        //延時
        P2=0XFF;                        //清除數碼管顯示,因是共陽型,所以不是0
        SMG_g=1;                        //關閉個位數碼管
}

//延時子函數,短暫延時
void delay(void){               
        unsigned char i=10;
        while(i--);
}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:399408 發(fā)表于 2018-9-19 20:21 | 只看該作者
xzf586 發(fā)表于 2018-9-19 16:46
拿去吧,顯示函數這樣改一下就行了!
//顯示函數,參數為顯示內容,只顯示兩位數
void display(unsigned  ...

謝謝啊,如果我要顯示到9999該改哪兒啊[img][/img]
回復

使用道具 舉報

6#
ID:399408 發(fā)表于 2018-9-19 20:24 | 只看該作者
ahshmj 發(fā)表于 2018-9-19 16:12
可以將“p2=table[da/1000%100]; ”改為“x=table[da/1000%100]; ”,然后判斷是否x=0, 若=0,則“p2=0xff ...

謝謝回答,已經用二樓的方法解決了,請問我要顯示到9999怎么定義“unsigned char ldata;”這句
回復

使用道具 舉報

7#
ID:399408 發(fā)表于 2018-9-20 16:42 | 只看該作者

嗯,謝謝回復
回復

使用道具 舉報

8#
ID:409293 發(fā)表于 2018-10-14 23:29 來自手機 | 只看該作者
樓主幫我試試我的這個位與方法,P2=P2|0xff;我記得以前我做這個的時候就是沒有前面的0的

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表