音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

為什么我的12232LCD讀數(shù)顯示會(huì)出現(xiàn)小數(shù)點(diǎn)漂移?

作者:xzhenggen 欄目:單片機(jī)
為什么我的12232LCD讀數(shù)顯示會(huì)出現(xiàn)小數(shù)點(diǎn)漂移?
為什么我的12232LCD讀數(shù)顯示會(huì)出現(xiàn)小數(shù)點(diǎn)漂移,同時(shí)出現(xiàn)兩個(gè)小數(shù)點(diǎn)?
實(shí)際上我的定義的小數(shù)位只為兩位。但是調(diào)用串行AD7896函數(shù)時(shí)讀電流值。
隨著電流的增大會(huì)出現(xiàn)兩個(gè)小數(shù)點(diǎn)。
首先顯示是000.00mA,然后隨著電流的增加到000.99mA時(shí),再增加電流LCD上會(huì)讀出001.00.00A的數(shù)據(jù),全亂了。請(qǐng)各位大俠幫我看看下面這個(gè)子程序
這樣定位小數(shù)及讀數(shù)有什么問(wèn)題?多謝!!

void DISPLAY(uint v)
{
    unsigned CHAR  row, count;
    float tt;
    unsigned int tmp ;
    int VALUE;
    tt=v*AD_Loop_PickVol_PER;
    VALUE = tt * 100 + (VALUE > 0 ? 0.5 : -0.5);
    tmp = abs(VALUE);
    serial_buff[0] = tmp / 10000.html">10000;
    serial_buff[1] = tmp % 10000.html">10000 / 1000;
    serial_buff[2] = tmp % 1000 / 100;
    serial_buff[3] = tmp % 100 / 10;
    serial_buff[4] = tmp % 10;
    draw_bmp(0,1,8,ELAPHT[0]);// 顯示“I”
    draw_bmp(8,1,8,num[15]);//顯示“:”
    /*
    if(VALUE< 0)
    {
      
        draw_bmp(16,1,8,num[14]);//顯示“-”
       
    }
    else
    {
      
        draw_bmp(16,1,8,num[13]);//顯示“+”
    
    }
    */
    for(count = 0; count != 5; count++)
    {
        draw_bmp(16+row*8,1,8,num[serial_buff][count]]);//顯示讀數(shù)
        row++;
        if((count == 2))////定位小數(shù)位
        {
            draw_bmp(16+row*8,1,8,num[10]);
            row++;
        }
        
    }
    
    if((serial_buff[0]==0)&&(serial_buff[1]==0)&&(serial_buff[2]==0))
    {
      for(row=0;row !=4;row++)
      {
        
        draw_bmp(16+row*8,1,8,num[12]);//消隱設(shè)置“空格”
       
      }
      if(serial_buff[3]==0)
      {
        
        draw_bmp(16+row*8,1,8,num[12]);//消隱設(shè)置“空格”
      }
      
        draw_bmp(104,1,8,ELAPHT[10]);//顯示“m”
        draw_bmp(112,1,8,ELAPHT[1]);//顯示“A”
    }
   else
    {
      
      draw_bmp(104,1,8,num[12]);//消隱設(shè)置“空格”
      draw_bmp(112,1,8,ELAPHT[1]);//顯示“A”
       if(serial_buff[0]==0)
      {
      
        row=0;
        draw_bmp(16+row*8,1,8,num[12]);//消隱設(shè)置“空格”
       
      if(serial_buff[1]==0)
       {
        row++;
        draw_bmp(16 +row*8,1,8,num[12]);//消隱設(shè)置“空格”
       }
        
    }
     
  }
   
}




2樓: >>參與討論
xzhenggen
例程如下:
#include "reg52.h"
#include "LCD_code.h"
#include "intrins.h"
#include "math.h"
#include "AD7896.h"
#define nop()   _nop_()
#define uCHAR unsigned CHAR
#define uint unsigned int
sbit A0 = 0xb3;
sbit E2    = 0xb4;
sbit E1    = 0xb5;
sbit _WR= P2^6;
sbit LED=P2^3;
sbit up=P1^6;//S1
sbit down=P1^7;//S3
/*
sbit  A0 = P2^5;
sbit _WR = P2^6;
sbit  E1 = P2^4;
sbit  E2 = P2^7;
*/
#define lcd_data P0    //#define  lcd_data   PORTA    //data;
#define set_E1()  (E1=1)
#define set_E2()  (E2=1)
#define set_A0()  (A0=1)
#define set_WR()  (_WR=1)
#define clr_E1()  (E1=0)
#define clr_E2()  (E2=0)
#define clr_A0()  (A0=0)
#define clr_WR()  (_WR=0)
#define disp_off   0xae
#define disp_on    0xaf
#define disp_start_line  0xc0
#define page_addr_set    0Xb8
#define col_addr_set     0x00
#define status_busy    0x80
#define write_mode   0xee
#define dynamic_driver  0xa4
#define adc_select     0xA0
#define clk32   0xa9
#define clk16   0xa8
#define reset   0xe2
#define uCHAR unsigned CHAR
#define uint unsigned int
uCHAR time_counter=0;
uCHAR key=0;
uCHAR serial_counter;
bit disp_flag=0;
#define AD_Vol_PER  2.5
#define AD_Loop_PickVol_PER  0.0024414
sbit SCLK=P1^1;
sbit WDI=P1^2;
sbit SDATA=P1^0;
bit r_flag=0;
unsigned CHAR idata serial_buff[77];
void lcd_init(void);
void lcd_clr(void);
void wait_ready(void);
void draw_bmp(uCHAR col,uCHAR layer,uCHAR width,uCHAR *bmp);
void ASCII2BCD(void);
void LOGO(void);
extern uint read7896(void);
void delay_nu(uCHAR n)
{
    uCHAR i;
    for(i=0;i<n;i++)
    {
        _nop_();
    }
}
uint read7896(void)
{
    
    uint result;
    uCHAR h;
    SCLK=0;
    WDI=0;
    delay_nu(30);
    WDI=1;
    delay_nu(30);
    SDATA=1;
    for(h=0;h<16;h++)
    {
        result<<=1;
        SCLK=1;
        _nop_();
        if(SDATA)result++;
        SCLK=0;
    }
    result=result&0xfff;
    return result;

}
void delay(uCHAR i)
{
  uCHAR j;
  for(i=i<<1;i>0;i--)
  for(j=0xf3;j>0;j--)
  {}
}
void int_t0() interrupt 1 using 1
{
  TH0=0X4C;
  TL0=0X00;
  time_counter++;
  if(time_counter==200)
  {
    time_counter=0;
    LED=1;
    TR0=0;
  }
}
void send_mi(uCHAR instruction)
{
    clr_E2();
    set_E1();
    wait_ready();
    clr_A0();
    clr_WR();
    nop();
    lcd_data=instruction;
    nop();
    clr_E1();
    
}
void send_md(uCHAR c)
{
    clr_E2();
    set_E1();
    wait_ready();
    set_A0();
    clr_WR();
    nop();
    lcd_data=c;
    nop();
    clr_E1();
}
void send_si(uCHAR instruction)
{
    clr_E1();
    set_E2();
    wait_ready();
    clr_A0();
    clr_WR();
    nop();
    lcd_data=instruction;
    nop();
    clr_E2();
}
void send_sd(uCHAR c)
{
    clr_E1();
    set_E2();
    wait_ready();
    set_A0();
    clr_WR();
    lcd_data=c;
    nop();
    clr_E2();
}
void wait_ready(void)
{
    clr_A0();
    set_WR();
    nop();
    nop();
    //while(lcd_data&status_busy);
    
}
void lcd_init(void)
{
    send_mi(reset);
    send_si(reset);
    send_mi(disp_off);
    send_si(disp_off);
    send_mi(dynamic_driver);
    send_si(dynamic_driver);
    send_mi(clk32);
    send_si(clk32);
    send_mi(adc_select);
    send_si(adc_select);
    send_mi(write_mode);
    send_si(write_mode);
    send_mi(col_addr_set);
    send_mi(disp_start_line);
    send_si(col_addr_set);
    send_si(disp_start_line);
    send_mi(disp_on);
    send_si(disp_on);
}

void lcd_clr(void)
{
    uCHAR i,page;
    for(page=0;page<4;page++)
    {
        send_mi(page_addr_set|page);
        send_si(page_addr_set|page);
        send_mi(0);
        send_si(0);
        for(i=0;i<61;i++)
        {
            send_md(0x00);
            send_sd(0x00);
        }
    }
}
void set_page(uCHAR page)
{
    send_mi(page_addr_set|page);
    send_si(page_addr_set|page);
    

}

void set_address(uCHAR address)
{
    send_mi(address&0x7f);
    send_si(address&0x7f);
}

void putCHAR_l(uCHAR c)
{
    send_md(c);
}

void putCHAR_r(uCHAR c)
{
    send_sd(c);

}

void draw_bmp(uCHAR col,uCHAR layer,uCHAR width,uCHAR *bmp)
{
    uCHAR x;
    uCHAR address;  //顯存的物理地址
    uCHAR p=0;       //
  &nb
3樓: >>參與討論
xzhenggen
顯示小數(shù)點(diǎn)注釋補(bǔ)充一下,重發(fā)!
void DISPLAY(uint v)
{
    unsigned CHAR  row, count;
    float tt;
    unsigned int tmp ;
    int VALUE;
    tt=v*AD_Loop_PickVol_PER;
    VALUE = tt * 100 + (VALUE > 0 ? 0.5 : -0.5);
    tmp = abs(VALUE);
    serial_buff[0] = tmp / 10000.html">10000;
    serial_buff[1] = tmp % 10000.html">10000 / 1000;
    serial_buff[2] = tmp % 1000 / 100;
    serial_buff[3] = tmp % 100 / 10;
    serial_buff[4] = tmp % 10;
    draw_bmp(0,1,8,ELAPHT[0]);// 顯示“I”
    draw_bmp(8,1,8,num[15]);//顯示“:”
    /*
    if(VALUE< 0)
    {
      
        draw_bmp(16,1,8,num[14]);//顯示“-”
       
    }
    else
    {
      
        draw_bmp(16,1,8,num[13]);//顯示“+”
    
    }
    */
    for(count = 0; count != 5; count++)
    {
        draw_bmp(16+row*8,1,8,num[serial_buff][count]]);//顯示讀數(shù)
        row++;
        if((count == 2))////定位小數(shù)位
        {
            draw_bmp(16+row*8,1,8,num[10]);//顯示小數(shù)點(diǎn)
            row++;
        }
        
    }
    
    if((serial_buff[0]==0)&&(serial_buff[1]==0)&&(serial_buff[2]==0))
    {
      for(row=0;row !=4;row++)
      {
        
        draw_bmp(16+row*8,1,8,num[12]);//消隱設(shè)置“空格”
       
      }
      if(serial_buff[3]==0)
      {
        
        draw_bmp(16+row*8,1,8,num[12]);//消隱設(shè)置“空格”
      }
      
        draw_bmp(104,1,8,ELAPHT[10]);//顯示“m”
        draw_bmp(112,1,8,ELAPHT[1]);//顯示“A”
    }
   else
    {
      
      draw_bmp(104,1,8,num[12]);//消隱設(shè)置“空格”
      draw_bmp(112,1,8,ELAPHT[1]);//顯示“A”
       if(serial_buff[0]==0)
      {
      
        row=0;
        draw_bmp(16+row*8,1,8,num[12]);//消隱設(shè)置“空格”
       
      if(serial_buff[1]==0)
       {
        row++;
        draw_bmp(16 +row*8,1,8,num[12]);//消隱設(shè)置“空格”
       }
        
    }
     
  }
   
}


4樓: >>參與討論
xzhenggen
是不是我這樣的定位小數(shù)點(diǎn)方法不正確?
有什么好的方式定義小數(shù)位?

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
rf1702sl的問(wèn)題,做過(guò)的幫看看呀!
電梯的單片機(jī)控制資料(源碼、電路圖)
at89s52做的lcd1602顯示問(wèn)題
手持?jǐn)?shù)字示波器是什么做的好貴
請(qǐng)問(wèn)一下ASCII碼字符發(fā)送.
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)