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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4241|回復: 5
收起左側

LCD1602想寫一個能四舍五入保留2位小數的函數

[復制鏈接]
ID:210889 發表于 2017-6-22 01:25 | 顯示全部樓層 |閱讀模式
新人學習到了LCD1602部分,參照了例子想寫一個 display_number()函數,效果是輸入一個數(可以包含小數),在LCD上顯示保留兩位小數例如輸入123,顯示123.00,輸入123.123,顯示123.12.   理想的程序中想法思路是輸入的數(相當于一個未知數,不知道它是4位數還是5位數),將其的各個位數的值分別存入到一個數組當中,然后在倒數第三位上添加 “ !毙迭c, 然后再在main函數中顯示出來。 可是小弟想了很久不知道怎么實現(太笨了)  下貼程序(是一個很蠢的,而且也不完善的實現方法)。



#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code first[]="The Value X";
uchar code second[]="X=";
unsigned char shu[20];

sbit rs=P0^7;
sbit rw=P0^6;
sbit en=P0^5;


/*********普通延時********/
void delay(uint t)
{
uint x,y;
for(x=t;x>0;x--)
  for(y=110;y>0;y--);
}

/*********寫命令函數******/
void lcd_wcom(uchar com)
{
rs = 0;  //選擇 指令寄存器
rw = 0;//  寫
P2 = com;  // 將命令送入P2
delay(5);
en = 1;
en = 0;
}
/*********寫數據函數*****/
void lcd_wdat(uchar dat)
{
   rs = 1; //選擇數據寄存器
   rw = 0; // 寫
   P2 = dat; // 送入P2
   delay(5);
   en = 1;
   en = 0;
}
/*********LCD初始化******/
void lcd_initial()
{
  lcd_wcom(0x38); // 8位數據,雙列 5*7 字形
  delay(1);
  lcd_wcom(0x0c); //  開啟顯示屏,關光標(不閃爍)
  delay(1);
  lcd_wcom(0x06); //沒寫一個數據,光標右移一位
  delay(1);
  lcd_wcom(0x01); //最后清屏
}
/*******數據顯示地址函數***/

void lcd_pos(uchar pos)
{
  lcd_wcom(pos|0x80);
}

/*******保留兩位小數******/                 ///就是這里不知道怎么實現我理想的效果!!
void display_number(unsigned t,unsigned char *str,unsigned z)
{
  unsigned  char a[5];   char i, j;                                        
        a[0]=(t/10000)%10;         //取得整數值到數組                
        a[1]=(t/1000)%10;                                            
        a[2]=(t/100)%10;                                              //有沒有方法可以實現在不知道輸入的數是多少位數的前提下將其各個位的數分出來????
        a[3]=(t/10)%10;                                              
        a[4]=(t/1)%10;                                               

        for(i=0; i<5; i++)         //轉成ASCII碼                     
                a[i]=a[i]+'0';                                           
        for(i=0; a[i]=='0' && i<=3; i++);                                                            
        for(; i<5; i++)                                              
                { *str=a[i]; str++; }  //加入有效的數字                  
        //*str='\0';
}




/*********主函數***********/
void main()
{
  uchar n = 0,m = 0,k=0;
  lcd_initial();
  delay(10);
  lcd_pos(0);
  for(n=0;n<11;n++)
   {
     lcd_wdat(first[n]);
   }
   lcd_pos(0x40);
   for(m=0;m<2;m++)
     {
           lcd_wdat(second[m]);
         }
        lcd_pos(0x42);
//         lcd_wdat(0x2E);


   display_number(12345,&shu[0],5);
/*        for( k=0;k<5;k++)
         {
           lcd_wdat(shu[k]);
           }   */
         lcd_wdat(shu[0]);
         lcd_wdat(shu[1]);       
         lcd_wdat(shu[2]);                                               //我暫時只想到這么蠢的方法去實現小數點的顯示
         lcd_wdat(0x2e);// 小數點
         lcd_wdat(shu[3]);
         lcd_wdat(shu[4]);
         while(1);
}





希望論壇大哥幫忙解答一下
回復

使用道具 舉報

ID:82765 發表于 2017-6-22 06:04 | 顯示全部樓層

回帖獎勵 +10

提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

ID:123289 發表于 2017-6-22 07:19 | 顯示全部樓層
很簡單,輸入數字以后再做一個加法:+0.005,就行了!
設輸入為:ABC.DEFG,則做ABCDEFG+0000050(不管小數點,但以小數點對 位),完成后只顯示至小數點后兩位就可以了。
回復

使用道具 舉報

ID:210889 發表于 2017-6-22 09:33 | 顯示全部樓層
yzwzfyz 發表于 2017-6-22 07:19
很簡單,輸入數字以后再做一個加法:+0.005,就行了!
設輸入為:ABC.DEFG,則做ABCDEFG+0000050(不管小 ...

換成程序語言就是 輸入123.123, display_number(double 123.123)
然后作123.123*1000+5運算, 顯示的話是不是直接lcd_wdat(輸入+0x30)?語言上怎么具體實現只顯示小數后兩位? 剛入門,很多不是很清楚,望諒解
回復

使用道具 舉報

ID:210889 發表于 2017-6-22 09:46 | 顯示全部樓層
cjjcjj1 發表于 2017-6-22 06:04
通過你輸入的 “.” 來記錄后面的小數位數

不知道在display_number函數具體怎么實現
回復

使用道具 舉報

ID:210889 發表于 2017-6-22 17:16 | 顯示全部樓層
,到現在還達不到目的效果
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产一区二区三区性色av | h肉视频| 国产精品久久久久久久久久东京 | 91精品国产综合久久久久久漫画 | 国产91在线播放 | 91精品国产综合久久久久久漫画 | 91久久伊人 | 亚洲欧美中文日韩在线v日本 | 97超碰成人 | 国产在线中文字幕 | 亚洲成人免费 | 婷婷国产一区二区三区 | 亚洲 欧美 另类 日韩 | 麻豆精品国产91久久久久久 | 国产 欧美 日韩 一区 | 喷潮网站 | 欧美一级久久精品 | 视频一区二区三区在线观看 | 国产精品成人国产乱 | 91九色在线观看 | 99精品免费久久久久久日本 | 国产高清av免费观看 | www国产成人免费观看视频 | 欧美一区二区 | 国产一区| 国产精品久久久久久久久污网站 | 国产高清视频 | 天天射网站 | 国产一区二区三区免费 | 免费在线国产视频 | 草久在线 | 亚洲在线成人 | 国产精品色哟哟网站 | 91亚洲免费 | 精品欧美一区二区中文字幕视频 | 亚洲国产一区在线 | 无人区国产成人久久三区 | 欧洲精品视频一区 | 午夜免费福利片 | 99精品免费在线观看 | 性欧美精品一区二区三区在线播放 |