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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:819671 發表于 2021-4-22 18:45 來自手機 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
這是我的溫度檢測程序,液晶屏顯示小數點后三位數,想改成只顯示小數點后兩位,怎樣改呢
void main(){        lcd_ini();        ds18_ini();        //ds18B20初使化           ds18_write(0xcc);  //跳過序列號           ds18_write(0x44);  //啟動溫度轉換         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);}//判斷是否在報警范圍內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;}//選擇修改的內容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;        }/**********************************************函數名:delay行參  :time 延時基數功能  :用while延時************************************************/// 延時函數(1ms單位)void delay(uint16 time){        while(time--);}/**********************************************函數名: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]);  }/**********************************************函數名:lcd_order行參  :date 要定入的指令功能  :向LCD1602的寫1個指令************************************************/void lcd_order(uint8 date){  RS=0;                  //選擇寫指令    EN_LCD=0;          //使能初使化  P0=date;          //發送指令  EN_LCD=1;          //開使能  delay(100);          //延時  EN_LCD=0;          //關使能}/**********************************************函數名:lcd_order行參  :date 要定入的指令功能  :向LCD1602的寫1個指令************************************************/void lcd_data(uint8 date){  RS=1;                  //選擇寫數據    EN_LCD=0;          //使能初使化  P0=date;          //發送指令  EN_LCD=1;          //開使能  delay(100);          //延時  EN_LCD=0;          //關使能}/*************************************************************                                              DS18B20**************************************************************//****************************************函數名:    ds18_ini功能:      對DS18B20進行初使化,            若DS18B20是好的則返回1                        若DS18B20是環的則返回0****************************************///ds18B20初使化函數,可根據資料上的時序來寫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;}/**********************************函數名:    ds18_write函數行參:  date(向ds18b20寫入的數據)功能:      功能向DS18B20中寫入一個數據***********************************/void ds18_write(uint8 date){  uint8 i;  DS18B20=1;  delay(1);  for(i=0;i<8;i++)        //根據時序將數據從低到高一位一位發送出來       {                    DS18B20 = 0;                 if(date&0x01) //從低到高取出數據的每位                 DS18B20 = 1;                 else                 DS18B20 = 0;                 delay(10);                 DS18B20 = 1;                 date>>=1;                 delay(1);                            }}  /*************************************************函數名:    ds18_read函數返回值:rate(從ds18b20中讀出的數據)功能:      功能從DS18B20中讀出一個數據并返回。*************************************************/uint8 ds18_read(){  uint8 i,date = 0;  DS18B20 = 1;                  //釋放總線  delay(1);  for(i = 0;i < 8;i ++)          //根據時序將數據從低到高一位一位接收       {                              DS18B20 = 0;                  date >>= 1;                  DS18B20 = 1;                  if(DS18B20)                     date |= 0x80;         //將date的一位置1                  delay(8);                  DS18B20 = 1;                  delay(1);                      }   return date;                          //返回讀出的數}/************************************************************函數名:     ds18_check函數返回值: tmp(當前溫度)功能:       起動DS18B20行進溫度采集,并返回當前溫度(tmp)*************************************************************/void ds18_check(){  uint8 date1,date2;  float ta;  if(ds18_ini())    {                    ds18_write(0xcc);          //跳過序列號          ds18_write(0x44);          // 啟動溫度轉換          ds18_ini();                  // 復位          ds18_write(0xcc);          //跳過序列號          ds18_write(0xbe);          // 啟動讀取溫度          date1 = ds18_read();   //讀取兩個溫度字節          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, 下載次數: 53)

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕亚洲一区二区三区 | 国产精品久久久久久久久久久新郎 | 日日天天| 日韩成人在线免费观看 | 成人精品视频在线观看 | 成人在线看片 | 免费能直接在线观看黄的视频 | 天天草天天 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 中文亚洲字幕 | 日韩一区二区三区视频 | 国产一区二区在线播放 | 日韩高清中文字幕 | 在线观看免费福利 | 久干网 | 精品久久久一区二区 | 久久国产精品一区 | 国产69久久精品成人看动漫 | 中文字幕在线不卡播放 | 一级片aaa| 人人亚洲 | 久久综合一区 | 国产精品久久久久无码av | 亚洲精品99 | 欧美精品在线观看 | 国产伦精品 | 日韩a视频| 看片91| 草草视频在线观看 | 精品一二三区 | 精品久久久久久久久亚洲 | 久久成人精品视频 | 国产精品高潮呻吟久久 | 久久久久久色 | 国产四虎| 91免费在线看 | 亚洲91精品 | 日韩综合在线播放 | 精产国产伦理一二三区 | 青青久久久 | 欧美精品一区在线 |