找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 986|回復(fù): 1
收起左側(cè)

LCD1602顯示實(shí)驗(yàn)數(shù)值顯示有什么好方法

[復(fù)制鏈接]
ID:987773 發(fā)表于 2021-12-21 23:01 | 顯示全部樓層 |閱讀模式
用LCD1602和16個(gè)按鍵實(shí)現(xiàn)十進(jìn)制數(shù)的加減乘除四則運(yùn)算
c是運(yùn)算結(jié)果(即等號(hào)后面的數(shù)值)有沒有比較好的方法顯示
兩個(gè)輸入數(shù)的范圍是0~32767,也就是運(yùn)算結(jié)果范圍也很大
從高到低或從低到高提取數(shù)字都行
但是要像下圖那樣在第二行的左邊用的C語言

屏幕截圖 2021-12-21 225856.png
回復(fù)

使用道具 舉報(bào)

ID:944932 發(fā)表于 2021-12-21 23:21 | 顯示全部樓層
#include "r_lcd1602drv.h"
#include "r_matrixKeypad.h"
u8 keyValueTab[][2]={
                    {0xee,'1'},{0xed,'2'},{0xeb,'3'},{0xe7,'+'},
                    {0xde,'4'},{0xdd,'5'},{0xdb,'6'},{0xd7,'-'},
                    {0xbe,'7'},{0xbd,'8'},{0xbb,'9'},{0xb7,'*'},
                    {0x7e,'.'},{0x7d,'0'},{0x7b,'='},{0x77,'/'}
                    };
u8 GetKeyValue(u32 scanCode)
{
    int i;
    for(i=0;i<16;i++)
        if(scanCode==keyValueTab[i][0])
            return keyValueTab[i][1];
    return 0;
}

int main()
{
    r_lcd1602drv lcd;
    r_matrixKeypad keypad;
   
   
    uchar buf[20];
    u32 scanCode;
   
    float f=0,f1=0;

    u8  datBuf[20];
    u8  datBuf1[20];
    u8  datBufIdx=0;
    u8  datBufIdx1=0;
  
    u8 keyValue;
    u8 isPoint=0;
    u8 isadd=0;
    u8 isde=0;

   
    u32 pins[]={Pin3,Pin4,Pin5,Pin6,Pin7,Pin8,Pin9,Pin10};
    u32 rowPins[]={Pin5,Pin6,Pin7,Pin8};
    u32 colPins[]={Pin1,Pin2,Pin3,Pin4};
    InitSystem();
    lcd.SetRsPin(GPIOB,Pin0);
    lcd.SetRwPin(GPIOB,Pin1);
    lcd.SetEnPin(GPIOB,Pin2);
    lcd.SetDataPins(GPIOB,pins,8);
    lcd.Init();
    keypad.SetRowPort(GPIOA,rowPins,4);
    keypad.SetColPort(GPIOA,colPins,4);
   
    while(1)
    {
    scanCode=keypad.GetScanCode();
      
        if(scanCode!=0)
        {  
         
          if(isde==1)
          {
            isde=0;
            datBufIdx=0;
            datBufIdx1=0;
            lcd.Init();
            lcd.SetRowCol(0,0);
            for(u8 i=0;i<20;i++)
            {
               datBuf[i]=0;
               datBuf1[i]=0;
               
            }
          }
         
          if((isadd=='+')|(isadd=='-')|(isadd=='*')|(isadd=='/'))
          {
           keyValue=GetKeyValue(scanCode);
            if(keyValue>='0'&&keyValue<='9')
            {
                datBuf1[datBufIdx1++]=keyValue;
                lcd.DispChar(keyValue);
            }
            if(keyValue=='.')
            {
                if(isPoint==0)
                {
                    datBuf1[datBufIdx1++]=keyValue;
                    lcd.DispChar(keyValue);
                    isPoint=1;
                }
            }
         
          }
         
          if(isadd==0)
          {
           keyValue=GetKeyValue(scanCode);
            if(keyValue>='0'&&keyValue<='9')
            {
                datBuf[datBufIdx++]=keyValue;
                lcd.DispChar(keyValue);
            }
            if(keyValue=='.')
            {
                if(isPoint==0)
                {
                    datBuf[datBufIdx++]=keyValue;
                    lcd.DispChar(keyValue);
                    isPoint=1;
                }
            }
            if((keyValue=='+')|(keyValue=='-')|(keyValue=='*')|(keyValue=='/'))
            {            
              isadd=keyValue;
              isPoint=0;
              lcd.DispChar(keyValue);            
            }
         
          }
   
            if(keyValue=='=')
            {
               sscanf((char *)datBuf,"%f",&f);
               sscanf((char *)datBuf1,"%f",&f1);              
              switch(isadd)     
              {
              case '+':f=f1+f;break;
              case '-':f=f-f1;break;
              case '*':f=f*f1;break;
              case '/':f=f/f1;break;
              }
               lcd.SetRowCol(1,0);
               sprintf((char *)buf,"%.2f",f);
               lcd.DispString(buf);
               isPoint=0;
               datBufIdx=0;
               datBufIdx1=0;
               isde=1;
               isadd=0;
            }
           
        }
    }
    }
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表