找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3053|回復: 2
打印 上一主題 下一主題
收起左側(cè)

怎么解決單片機+液晶屏顯示數(shù)字位數(shù) 求幫助

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:819671 發(fā)表于 2021-4-22 18:45 來自手機 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
這是我的溫度檢測程序,液晶屏顯示小數(shù)點后三位數(shù),想改成只顯示小數(shù)點后兩位,怎樣改呢
void main(){        lcd_ini();        ds18_ini();        //ds18B20初使化           ds18_write(0xcc);  //跳過序列號           ds18_write(0x44);  //啟動溫度轉(zhuǎn)換         xie1602(4,t_h);         xie1602(12,t_l);        while(1)        {                ds18_check();  //從DS18B20中讀出溫度                xianshi1();                xiugai();                panduan();                        }}void xie1602(uint8 add,uint8 daa){        lcd_order(0x80+add);        lcd_data(0x30+daa/10);        lcd_data(0x30+daa%10);}//判斷是否在報警范圍內(nèi)void panduan(){        if(tmp<(t_l*1000)||tmp>(t_h*1000)&&t_l>=0)        {                BUZZER = 0;                delay(10);        }        else if(t_l<0&&tmp>(t_h*1000))        {                BUZZER = 1;                }        else                BUZZER = 1;}//選擇修改的內(nèi)容void xiugai(){        uint8 jj;        uint8 i = 0;        BUZZER = 1;                if(K1==0)        {                while(!K1);                while(1)                {                        lcd_order(0x0f);  //開啟光標顯示                        lcd_order(0x80+5);//光標顯示位置                        if(K2 == 0)                        //判斷加按鍵按下                        {                                while(K2 == 0);                  //等待按鍵釋放                                        t_h++;                         //溫度上限加1                                        xie1602(4,t_h);          //將溫度上限顯示出來                        }                        if(K3 == 0)                                   //判斷減按鍵按下                        {                                while(K3 == 0);                        //等待按鍵釋放                                if(t_h>t_l)                                //判斷 溫度上限大于溫度下限                                        t_h--;                                xie1602(4,t_h);                         //將溫度上限顯示出來                        }                        if(K1 == 0)                           //后面的注釋類似                        {                                while(K1 == 0);                                while(1)                                {                                        lcd_order(0x0f);                                        lcd_order(0x80+13);                                                if(K2 == 0)                                        {                                                while(K2 == 0);                                                if(t_l<t_h&&t_l>=0)                                                {                                                        lcd_order(0x80+11);                                                        lcd_data(' ');                                                        t_l++;                                                        xie1602(12,t_l);                                                }                                                else {                                                        t_l++;                                                        jj = ~t_l;                                                        xie1602(12,jj);                                                }                                        }                                        if(K3 == 0)                                        {                                                while(K3 == 0);                                                if(t_l>(-50))                                                {                                                        t_l--;                                                        if(t_l<0)                                                                jj = ~t_l;                                                }                                                if(t_l>=0)                                                {                                                        lcd_order(0x80+11);                                                        lcd_data(' ');                                                        xie1602(12,t_l);                                                }                                                if(t_l<0)                                                {                                                                xie1602(12,jj);                                                        lcd_order(0x80+11);                                                        lcd_data('-');                                                }                                        }                                        if(K1 == 0)                                        {                                                while(K1 == 0);                                                goto loop;                                        }                                                }                        }                }                                        }        loop:BUZZER = 1;        }/**********************************************函數(shù)名:delay行參  :time 延時基數(shù)功能  :用while延時************************************************/// 延時函數(shù)(1ms單位)void delay(uint16 time){        while(time--);}/**********************************************函數(shù)名:lcd_ini功能  :LCD1602的初始化************************************************/void lcd_ini()  {         uint8 i;                 RW = 0;          lcd_order(0x38);          //設置1602的顯示光標功能          delay(100);                            lcd_order(0x0e);          //顯示開及光標設置           delay(100);          lcd_order(0x06);          //顯示光標移動設置          delay(100);          lcd_order(0x01);          //顯示清屏          delay(100);          lcd_order(0x80);                  for(i = 0;i<16;i++)                        lcd_data(hodometer[i]);  }/**********************************************函數(shù)名:lcd_order行參  :date 要定入的指令功能  :向LCD1602的寫1個指令************************************************/void lcd_order(uint8 date){  RS=0;                  //選擇寫指令    EN_LCD=0;          //使能初使化  P0=date;          //發(fā)送指令  EN_LCD=1;          //開使能  delay(100);          //延時  EN_LCD=0;          //關(guān)使能}/**********************************************函數(shù)名:lcd_order行參  :date 要定入的指令功能  :向LCD1602的寫1個指令************************************************/void lcd_data(uint8 date){  RS=1;                  //選擇寫數(shù)據(jù)    EN_LCD=0;          //使能初使化  P0=date;          //發(fā)送指令  EN_LCD=1;          //開使能  delay(100);          //延時  EN_LCD=0;          //關(guān)使能}/*************************************************************                                              DS18B20**************************************************************//****************************************函數(shù)名:    ds18_ini功能:      對DS18B20進行初使化,            若DS18B20是好的則返回1                        若DS18B20是環(huán)的則返回0****************************************///ds18B20初使化函數(shù),可根據(jù)資料上的時序來寫uint8 ds18_ini(){  uint8 ans;  DS18B20 = 1;  delay(1);  DS18B20 = 0;  delay(100);  DS18B20 = 1;  delay(6);  ans = DS18B20;  delay(100);   if(!ans)     return 1;  else     return 0;}/**********************************函數(shù)名:    ds18_write函數(shù)行參:  date(向ds18b20寫入的數(shù)據(jù))功能:      功能向DS18B20中寫入一個數(shù)據(jù)***********************************/void ds18_write(uint8 date){  uint8 i;  DS18B20=1;  delay(1);  for(i=0;i<8;i++)        //根據(jù)時序?qū)?shù)據(jù)從低到高一位一位發(fā)送出來       {                    DS18B20 = 0;                 if(date&0x01) //從低到高取出數(shù)據(jù)的每位                 DS18B20 = 1;                 else                 DS18B20 = 0;                 delay(10);                 DS18B20 = 1;                 date>>=1;                 delay(1);                            }}  /*************************************************函數(shù)名:    ds18_read函數(shù)返回值:rate(從ds18b20中讀出的數(shù)據(jù))功能:      功能從DS18B20中讀出一個數(shù)據(jù)并返回。*************************************************/uint8 ds18_read(){  uint8 i,date = 0;  DS18B20 = 1;                  //釋放總線  delay(1);  for(i = 0;i < 8;i ++)          //根據(jù)時序?qū)?shù)據(jù)從低到高一位一位接收       {                              DS18B20 = 0;                  date >>= 1;                  DS18B20 = 1;                  if(DS18B20)                     date |= 0x80;         //將date的一位置1                  delay(8);                  DS18B20 = 1;                  delay(1);                      }   return date;                          //返回讀出的數(shù)}/************************************************************函數(shù)名:     ds18_check函數(shù)返回值: tmp(當前溫度)功能:       起動DS18B20行進溫度采集,并返回當前溫度(tmp)*************************************************************/void ds18_check(){  uint8 date1,date2;  float ta;  if(ds18_ini())    {                    ds18_write(0xcc);          //跳過序列號          ds18_write(0x44);          // 啟動溫度轉(zhuǎn)換          ds18_ini();                  // 復位          ds18_write(0xcc);          //跳過序列號          ds18_write(0xbe);          // 啟動讀取溫度          date1 = ds18_read();   //讀取兩個溫度字節(jié)          date2 = ds18_read();          tmp=date2;          tmp<<=8;          tmp=tmp|date1;          ta=tmp*0.0625;          tmp=ta*1000;        } }void xianshi1(){        uint8 i;        temp[8]=0x30+tmp/10000;        temp[9]=0x30+tmp/1000%100;        temp[11]=0x30+tmp/100%100;        temp[12]=0x30+tmp/10%100;        temp[13]=0x30+tmp%10;        lcd_order(0x80+0x40);        for(i = 0;i<16;i++)                lcd_data(temp[i]);        }

1619088291879..jpg (1.41 MB, 下載次數(shù): 53)

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

使用道具 舉報

沙發(fā)
ID:517951 發(fā)表于 2021-4-23 09:31 | 只看該作者
代碼都縮成一團,怎么看得了啊
回復

使用道具 舉報

板凳
ID:905171 發(fā)表于 2021-4-23 11:54 | 只看該作者
不應該是對10取余數(shù)嗎,怎么高位都%100
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

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