小菜鸟一枚,照着书里的程序稍微改了一下放到keil里,编译无错误,但是仿真板上的显示不符合设计要求,请大佬们帮忙看看,谢谢了~ 
 
程序目的:实现读取端口电压,在LCD1602上实现读数显示。 
 
问题:端口调用无问题,LCD上也能显示读数,但是读数明显和实际不符。 
 
程序如下: 
 
#include<reg51.h> 
#include<intrins.h> 
#define uint unsigned int 
#define uchar unsigned char 
sbit DIN=P3^4; 
sbit CS=P3^5; 
sbit DCLK=P3^6; 
sbit DOUT=P3^7; 
sbit LCDRS=P2^6; 
sbit LCDRW=P2^5; 
sbit LCDE=P2^7; 
uchar VOL[4]; 
 
SPI_Write(uchar value) 
{ 
  uchar i; 
  DCLK=0; 
  for(i=0;i<8;i++) 
     { 
       DIN=value>>7; 
       value=value<<1; 
       DCLK=0; 
       DCLK=1; 
     } 
} 
 
uint SPI_Read() 
{ 
  uint i,value=0; 
  DCLK=0; 
  for(i=0;i<12;i++) 
     { 
       value=value<<1; 
       value|=DOUT; 
       DCLK=1; 
       DCLK=0; 
      } 
  return value; 
} 
 
Read_AD_Value(uchar cmd) 
{ 
  uchar i; 
  uint dat; 
  CS=0; 
  DCLK=0; 
  SPI_Write(cmd); 
  for(i=0;i<6;i++) 
  DCLK=1; 
  _nop_(); 
  _nop_(); 
  DCLK=0; 
  _nop_(); 
  _nop_(); 
  dat=SPI_Read; 
  CS=1; 
  return dat; 
} 
 
void delay(uint x) 
{ 
 uint i,j; 
 for(i=x;i>0;i--) 
 for(j=110;j>0;j--); 
} 
 
void LCDBE() 
{ 
 LCD_Code(0x38); 
 LCD_Code(0x0c); 
 LCD_Code(0x06); 
 LCD_Code(0x01); 
 LCD_Code(0x80); 
} 
 
void LCD_Code(uchar com) 
{ 
 LCDRS=0; 
 LCDRW=0; 
 LCDE=0; 
 P0=com; 
 delay(1); 
 LCDE=1; 
 delay(5); 
 LCDE=0; 
} 
 
void LCD_Data(uchar dat) 
{ 
 LCDRS=1; 
 LCDRW=0; 
 LCDE=0; 
 P0=dat; 
 delay(1); 
 LCDE=1; 
 delay(5); 
 LCDE=0; 
} 
 
void main() 
{ 
  uchar i; 
  uint count,AD_Value; 
  LCDBE(); 
  while(1) 
  { 
    if(count==50) 
      { 
       count=0; 
       AD_Value=Read_AD_Data(0x94); 
       VOL[3]=0x30+(AD_Value/1000); 
       VOL[2]=0x30+(AD_Value%1000/100); 
       VOL[1]=0x30+(AD_Value%100/10); 
       VOL[0]=0x30+(AD_Value%10); 
       for(i=0;i<4;i++) 
       LCD_Data(VOL[i]); 
      } 
    count++; 
    LCD_Code(0x80); 
   } 
} 
 
=========================================== 
 
请各位大佬看看,谢谢了 |   
     
  
 |