久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

數碼管如何顯示負數

  [復制鏈接]
跳轉到指定樓層
樓主
ID:393625 發表于 2018-10-11 14:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
附上數碼管顯示代碼,請問如何修改代碼。另數碼管可以顯示負數。謝謝
void Displaycountupnum(unsigned int num)
{
  signed int units,tens,hundreds;
  
  units = num%10;
  tens = (num/10)%10;
  hundreds = num/100;
  
  Send3byte_595_2(countupseg[hundreds],countupseg[tens],countupseg[units]);
  Out_595_2();
}


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

使用道具 舉報

來自 10#
ID:408226 發表于 2018-10-11 18:46 | 只看該作者
這里面,只有顯示兩位數的程序,要想顯示“-”,必須再加一位。
如果是四位顯示器,可以先考慮把最左邊的當做符號位。
用兩個數字相減,Cy=0時,把符號位顯示空白。
Cy=1時,把符號位顯示“-”,再把數字反減,再去顯示即可。

評分

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

查看全部評分

回復

使用道具 舉報

沙發
ID:386381 發表于 2018-10-11 14:48 來自手機 | 只看該作者
建議說的再詳細一點,把全部代碼上傳上來,只看到局部

評分

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

查看全部評分

回復

使用道具 舉報

板凳
ID:408093 發表于 2018-10-11 15:50 | 只看該作者
數碼管中的g一直顯示
回復

使用道具 舉報

地板
ID:408110 發表于 2018-10-11 15:52 | 只看該作者
如果要顯示負數,首先函數的傳參就不應該是個無符號整形

評分

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

查看全部評分

回復

使用道具 舉報

5#
ID:393625 發表于 2018-10-11 16:18 | 只看該作者
/*===============================================================*/
/*                     ????鼶??74LS595_2?????????????         */
/*===============================================================*/
#ifndef _LS595_2driver_H_
#define _LS595_2driver_H_

unsigned char flag_fu=0;  //???????????λ

sbit RCK_595_2 = P0^4;        //????鼶??595???????????
sbit DS_595_2 = P0^3;         //????鼶??595??????
sbit CLK_595_2 = P0^5;        //????鼶??595??λ???????

unsigned char code countupseg[] =                                                                                                                                  //?????595?ж???0~9??????????
{// 0         1          2           3        4         5          6           7        8         9
        0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};
unsigned char code roundseg[6]={0x01,0x02,0x04,0x08,0x10,0x20}; //??????

char code_func[]={0x98,0xbd,0xbf,0xd8};//E,r,-,C

/*???????  1ms???λ*/
void Delay_ms(unsigned int t)           //???????,t/ms
{
  unsigned int a,b;
  for(a=0;a<t;a++)
  {  
    for(b=0;b<100;b++)
    {
       _nop_();
    }
  }
}

/* ??1??LS595_2д??1?????*/
void Send1byte_595_2(unsigned char dat)   
{
  unsigned char i;

  for(i=0;i<8;i++)
  {   
        if(dat&0x80)
        DS_595_2 = 1;
        else
        DS_595_2 = 0;
        dat <<=1;
        CLK_595_2 = 0;
        _nop_();
        CLK_595_2 = 1;       
  }

}

/* ??3??????LS595_2д??3?????*/
void Send3byte_595_2(unsigned char dat1,unsigned char dat2,unsigned char dat3)
{
  Send1byte_595_2(dat1);
  Send1byte_595_2(dat2);
  Send1byte_595_2(dat3);
}

/*?????LS595???????????*/
void Out_595_2()
{
  RCK_595_2 = 0;
  _nop_();
  RCK_595_2 = 1;
}

/*???????? 3λ*/
void Displaycountupnum(unsigned int num)
{
  signed int units,tens,hundreds;
  
  units = num%10;
  tens = (num/10)%10;
  hundreds = num/100;
  

  Send3byte_595_2(countupseg[hundreds],countupseg[tens],countupseg[units]);        //??????????????????λ
  Out_595_2();

}
/*????????*/
void Displayround()
{
  unsigned char j;
  for(j=0;j<5;j++)
  {
    Send3byte_595_2(roundseg[j],roundseg[j],roundseg[j]);
        Out_595_2();
        Delay_ms(800);
  }
  
}
#endif  
回復

使用道具 舉報

6#
ID:393625 發表于 2018-10-11 16:18 | 只看該作者
文鳳軒 發表于 2018-10-11 14:48
建議說的再詳細一點,把全部代碼上傳上來,只看到局部

已經發了,請看
回復

使用道具 舉報

7#
ID:393625 發表于 2018-10-11 16:19 | 只看該作者
willcome0 發表于 2018-10-11 15:52
如果要顯示負數,首先函數的傳參就不應該是個無符號整形

是的,是我忽略了,
回復

使用道具 舉報

8#
ID:408134 發表于 2018-10-11 16:31 | 只看該作者
可以預留一塊數碼管用來顯示符號,當數值為正數時正常顯示且不顯示符號位,為負數時取絕對值顯示并顯示符號位

評分

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

查看全部評分

回復

使用道具 舉報

9#
ID:408209 發表于 2018-10-11 18:18 | 只看該作者
,可以在你這個代碼里加個判斷,根據結果選擇是否點亮一個數碼管中間哪一橫,具體16進制代碼看你自己用的是共陰極還是共陽極

評分

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

查看全部評分

回復

使用道具 舉報

11#
ID:213173 發表于 2018-10-11 18:57 | 只看該作者
這是用3位數碼管顯-30~150度緩存數組的設置,顯示程序段碼直接調用緩存數據
void temperature()     //AD采樣后的溫度處理函
{ //采集到電壓值與二維數組的電壓值進行比較,從而獲得相對應的溫度
        uchar i;  
        if((WDCY>table[11][1])||(WDCY<table[171][1]))//如果上下限溫度溢出
        {
                dis_buf[0]=14;//百位"E"
                dis_buf[1]=16;//十位"-"
                dis_buf[2]=16;//個位"-"
                dis_buf[3]=16;//-號位 "-"
                dis_buf[4]=16;//負1位"-"
                dis_buf[5]=14;//負2位"E"
        }
        else    //-30~150度正常溫度范圍顯示
        {
                for(i=181;i<182;i--)
                {
                        if((WDCY>=table[i][1])&&(WDCY<table[i-1][1]))
                        {
                                temp=(table[i][0]); //查表法直接獲取溫度值
                                if(temp<0)   //負溫值
                                {
                                        dis_buf[3]=16;                //-號
                                        dis_buf[4]=(temp/10)*(-1);//負1位
                                        dis_buf[5]=(temp%10)*(-1);//負2位
       
                                }
                                else          //正溫值
                                {
                                        dis_buf[0]=temp/100;//百位
                                        dis_buf[1]=temp%100/10;//十位
                                        dis_buf[2]=temp%10;//個位
                                }
                                break;
                        }
                }
        }
}

評分

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

查看全部評分

回復

使用道具 舉報

12#
ID:393625 發表于 2018-10-12 17:27 | 只看該作者
我愛8051 發表于 2018-10-11 16:31
可以預留一塊數碼管用來顯示符號,當數值為正數時正常顯示且不顯示符號位,為負數時取絕對值顯示并顯示符號 ...

請問我這樣改可以嗎
void Displaycountupnum(signed int num)
{
  unsigned int units,tens,hundreds;

  if(num>=0){
  units = num%10;
  tens = (num/10)%10;
  hundreds = num/100;
  

  Send3byte_595_2(countupseg[hundreds],countupseg[tens],countupseg[units]);        //顯示倒計時的個、十、百位
  Out_595_2();
  }
if(num<0)
        {
                num=~num;
                num+=1;
                flag_fu=1;
        }
        else
        {
                flag_fu=0;
        }
    if(flag_fu==1)
                                {
//負溫度顯示
   units = num%10;
   tens = (num/10)%10;
  
        Send3byte_595_2(countupseg[code_func[2]],countupseg[tens],countupseg[units]);                                       
    Out_595_2();                       
                                }
}
回復

使用道具 舉報

13#
ID:408134 發表于 2018-10-18 12:32 | 只看該作者
zhong2463 發表于 2018-10-12 17:27
請問我這樣改可以嗎
void Displaycountupnum(signed int num)
{

//試試看行不行
void Displaycountupnum(signed int num)
{
    unsigned int units,tens,hundreds;

    bool falg_fu = false;//符號位false為正,true為負
    if (num < 0){
        falg_fu = true;
        num = num * (-1);//取絕對值
    }
    units = num % 10;//提取個位
    tens = (num / 10) % 10;//提取十位
    hundreds = num / 100;//提取百位
   
    //三塊數碼管,當為負數時,百位和符號位就會出現不可兼得的情況(當測正常情況的溫度應該不會出現零下百位)
    if (falg_fu) {
        Send3byte_595_2(countupseg[code_func[2]],countupseg[tens],countupseg[units]);        //顯示倒計時的個、十、符號位
        Out_595_2();
    }
    else {
        Send3byte_595_2(countupseg[hundreds],countupseg[tens],countupseg[units]);        //顯示倒計時的個、十、百位
        Out_595_2();
    }
}
回復

使用道具 舉報

14#
ID:413816 發表于 2018-10-23 10:32 | 只看該作者
只有顯示兩位數的程序,要想顯示“-”,必須再加一位。如果是四位顯示器,可以先考慮把最左邊的當做符號位。用兩個數字相減,Cy=0時,把符號位顯示空白。Cy=1時,把符號位顯示“-”,再把數字反減,再去顯示即可。--符號位,應該緊貼著數值位。所以,應該判斷百位、十位為零否,再把“-”顯示在合適的位置上。
回復

使用道具 舉報

15#
ID:241273 發表于 2018-10-24 16:00 | 只看該作者
取數碼管中間一杠的斷碼,就是你想要的負號,在做個標志位判斷你要顯示的數是不是負數(只提供思想,程序全靠自己編,加油)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区视频 | 亚洲精品成人在线 | 成人在线观看网站 | 亚洲永久免费 | 日韩福利片 | 91精品亚洲 | 亚洲综合一区二区三区 | 日韩一区二区三区视频在线观看 | 激情五月婷婷在线 | 羞羞网站在线观看 | 国产亚洲www | v片网站| 一区二区三区四区在线视频 | www.99久久.com| 中文字幕一区二区三区四区 | 黄色三级毛片 | 欧美 日韩 国产 成人 | 日韩av黄色| 亚洲精品久久久久久久久久吃药 | 在线观看中文字幕视频 | 午夜影晥| 欧美久久视频 | 日韩精品网站 | 91日韩在线| 免费在线看黄 | 日韩一级黄色毛片 | 欧美成人精品 | 羞羞色视频 | 91大片| 精品三区| 国产成人99 | 日韩精品成人免费观看视频 | 久久久久久久久久久久久久av | 99亚洲 | 99精品久久99久久久久 | 青青久草 | 中文字幕av高清 | 911精品国产| 成人av免费 | 日韩免费1区二区电影 | 久久久激情视频 |