用ADC0832采集出来的电压值不变是什么情况 求帮助

2019-07-15 13:49发布

这是程序
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define delay4us() {_nop_();_nop_();_nop_();_nop_();}
sbit RS = P2^0;
sbit RW = P2^1;
sbit E  = P2^2;
sbit CS  = P1^0;
sbit CLK = P1^1;
sbit DIO = P1^2;
uchar Display_Buffer[] = "0.00V";
uchar code Line1[] = "Current Voltage:";
void DelayMS(uint ms)
{
  uchar i;
while(ms--)
{
   for(i=0;i<120;i++);
}
}
bit LCD_Busy_Check()
{
  bit result;
RS = 0;   //RS=0,代表指令,RS=1,代表数据
RW = 1;    //RW=0,代表写,RW=1,代表读
E  = 1;    //E高电平读,下降沿写。
delay4us();
result = (bit)(P0&0x80);//读数据最高位,为1则忙,为0则闲
E  = 0;
return result;
}
void LCD_Write_Command(uchar cmd)
{
  while(LCD_Busy_Check());   //忙检测
RS = 0;  //指令
RW = 0;   //写命令
E  = 0;    //
_nop_();
_nop_();
P0 = cmd;
delay4us();
E = 1;
delay4us();
E = 0;
}
void Set_Disp_Pos(uchar pos)
{
  LCD_Write_Command(pos | 0x80);
}
void LCD_Write_Data(uchar dat)
{
  while(LCD_Busy_Check());
RS = 1;  //数据
RW = 0; //写
E  = 0;  //根据时序图,这个低电平之后,可以缩少两个空指令。
P0 = dat;
delay4us();
E = 1;
delay4us();
E = 0;
}
void LCD_Initialise()
{
LCD_Write_Command(0x38); DelayMS(1);//16*2,5*7,八位数据
LCD_Write_Command(0x0c); DelayMS(1); // 低三位:显示开关开,光标开关关,闪烁开关关
LCD_Write_Command(0x06); DelayMS(1); //  低两位:为1读写后AC自动增一(为0读写后AC自动减一):为1读写后画面平移,为0读写后画面不动。
LCD_Write_Command(0x01); DelayMS(1);//清屏
}
uchar Get_AD_Result()
{
  uchar i,dat1=0,dat2=0;
CS  = 0;
CLK = 0;DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
CLK = 0;DIO = 0; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
CLK = 0;DIO = 1; _nop_(); _nop_();
CLK = 1; _nop_(); _nop_();
CLK = 0; _nop_(); _nop_();
for(i=0;i<8;i++)
{
  
   CLK = 1; _nop_(); _nop_();
  CLK = 0; _nop_(); _nop_();
  dat1 = dat1 << 1 | (uchar)(DIO);
  
}
for(i=0;i<8;i++)
{
  dat2 = dat2 |((uchar)(DIO)<<i); //这条指令不能放到循环的下降沿后,因为这个低位就是上一个字节的最低位。
  CLK = 1; _nop_(); _nop_();
  CLK = 0; _nop_(); _nop_();
  
}
CS = 1;
return ((dat1 == dat2) ? dat1:0);
}         
void main()
{
  uchar i;
uint d;
LCD_Initialise();
DelayMS(10);
while(1)
{
   d = Get_AD_Result()*500.0/255;
  Display_Buffer[0]=d/100+'0';
  Display_Buffer[2]=d/10%10+'0';
  Display_Buffer[3]=d%10+'0';
  Set_Disp_Pos(0x01);
  i = 0;
  while(Line1[i]!='')
  {
    LCD_Write_Data(Line1[i]);
   i++;
   DelayMS(10);
  }
  Set_Disp_Pos(0x46);
  i = 0;
  while(Display_Buffer[i]!='')
  {
    LCD_Write_Data(Display_Buffer[i]);
   i++;
   DelayMS(10);
  }
}
}
360反馈意见截图16690810549150.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。