ADC0832模数转换与显示中的问题
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define delay4us() {_nop_();_nop_();_nop_();_nop_();}
//ADC0832òy???¨ò?
sbit CS=P1^0;
sbit CLK=P1^1;
sbit DIO=P1^2;
//LCD1602 ???ú?¨ò?
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
//ò??a??êy£?á???D?êyμ?êy×?μ??1??ê??o3?
uchar Display_Buffer[]="0.00V";
//LCDμúò?DD??ê?μ?D??¢
uchar code Line1[]="Current Voltage:";
//?óê±×ó3ìDò
void DelayMS(uint ms)
{
uchar t;
while(ms--) for(t=0;t<120;t++);
}
//LCD?|×′ì??ì2a
bit LCD_Busy_Check()
{
bit result;
RS=0;RW=1;E=1;delay4us();result=(bit)(P0&0x80);E=0;
return result;
}
//D?LCD?üá?
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;
}
//éè??LCD??ê?????
void Set_Disp_Pos(uchar pos)
{
LCD_Write_Command(pos|0x80);
}
//D′LCDêy?Y
void LCD_Write_Data(uchar dat)
{
while(LCD_Busy_Check());
RS=1;RW=0;E=0;
P0=dat;delay4us();
E=1;delay4us();E=0;
}
//LCD3?ê??ˉ
void LCD_Initialise()
{
LCD_Write_Command(0x38);DelayMS(1);
LCD_Write_Command(0x0C);DelayMS(1);
LCD_Write_Command(0x06);DelayMS(1);
LCD_Write_Command(0x01);DelayMS(1);
}
//??è?AD×a???á1?
uchar Get_AD_Result()
{
uchar i,dat1=0,dat2=0;
//?eê???????
CS=0;
CLK=0;
DIO=1; _nop_();_nop_();
CLK=1; _nop_();_nop_();
CLK=0;DIO=1;_nop_();_nop_();
CLK=1; _nop_();_nop_();
CLK=0;DIO=0;_nop_();_nop_();
CLK=1;DIO=1;_nop_();_nop_();
CLK=0;DIO=1;_nop_();_nop_();
for(i=0;i<8;i++)
{
CLK=1; _nop_();_nop_();
CLK=0; _nop_();_nop_();
dat1=dat1<<1|DIO;
}
for(i=0;i<8;i++)
{
dat2=dat2|((uchar)(DIO)<<i);
CLK=1; _nop_();_nop_();
CLK=0; _nop_();_nop_();
}
CS=1;
}
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]!='\0')
LCD_Write_Data(Line1[i++]);
Set_Disp_Pos(0x46);
i=0;
while(Display_Buffer[i]!='\0')
LCD_Write_Data(Display_Buffer[i++]);
}
}
我不明白主程序其中的d=Get_AD_Result()*500.0/255 ;是什么意思 在PROTUSE中仿真,给5V 显示0.01V 给0V显示0.00V 在2.25V事从0.00V变换为0.01V
求大神给予解答啊 还有我发现我对0832的理解还不够,能够给指点迷津吗···

你知道出了什么问题了吗···我真的很急··
额··自己找到错误了 在ADC0832的转换程序中 没有返回值 加 return(dat1==dat2)? dat1:0; 后仿真成功了 ···可是还是不明白为什么要乘上500···
在实物上验证还是不成功 ··实物应该没有问题的啊····哎···怎么办···
改了下程序
#include<reg52.h> //°üo?í·???t£?ò?°??é??2?Dèòa???ˉ£?í·???t°üo?ì?êa1|?ü??′??÷μ??¨ò?
sbit RS = P0^5; //Pin4
sbit RW = P0^6; //Pin5
sbit EN = P0^7; //Pin6
unsigned char Display_Buffer[]="0.00V";
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
/******************************************************************/
/* ?¢???óê±oˉêy */
/******************************************************************/
void delay_us(unsigned int n) //?óê± è?1?Dèòa?????è?óê± ????è???±à
{
if (n == 0)
{
return ;
}
while (--n);
}
/******************************************************************/
/* oá??oˉêyéù?÷ */
/******************************************************************/
void delay_ms(unsigned char i)
{
unsigned char a, b;
for (a = 1; a < i; a++)
{
for (b = 1; b; b++)
{ ; }
}
}
/******************************************************************/
/* D′è??üá?oˉêy */
/******************************************************************/
void LCD_write_com(unsigned char com)
{
RS_CLR;
RW_CLR;
EN_SET;
P1 = com;
delay_us(5);
EN_CLR;
}
/******************************************************************/
/* D′è?êy?Yoˉêy */
/******************************************************************/
void LCD_write_Data(unsigned char Data)
{
RS_SET;
RW_CLR;
EN_SET;
P1 = Data;
delay_us(5);
EN_CLR;
}
/******************************************************************/
/* ???áoˉêy */
/******************************************************************/
void LCD_clear(void)
{
LCD_write_com(0x01);
delay_ms(5);}
/******************************************************************/
/* D′è?×?·?′?oˉêy */
/******************************************************************/
void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_write_com(0x80 + x);
}
else
{
LCD_write_com(0xC0 + x);
}
while (*s)
{
LCD_write_Data( *s);
s ++;
}
}
/******************************************************************/
/* D′è?×??úoˉêy */
/******************************************************************/
void LCD_write_char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_write_com(0x80 + x);
}
else
{
LCD_write_com(0xC0 + x);
}
LCD_write_Data( Data);
}
/******************************************************************/
/* 3?ê??ˉoˉêy */
/******************************************************************/
void LCD_init(void)
{
LCD_write_com(0x38); /*??ê??£ê?éè??*/
delay_ms(5);
LCD_write_com(0x38);
delay_ms(5);
LCD_write_com(0x38);
delay_ms(5);
LCD_write_com(0x38);
LCD_write_com(0x08); /*??ê?1?±?*/
LCD_write_com(0x01); /*??ê????á*/
LCD_write_com(0x06); /*??ê?1a±êò??ˉéè??*/
delay_ms(5);
LCD_write_com(0x0C); /*??ê??a?°1a±êéè??*/
}
/******************************************************************/
/* ?÷oˉêy */
/******************************************************************/
void main(void)
{
unsigned char i;
delay_ms(100);
LCD_init();
while (1)
{
LCD_clear();
LCD_write_str(2,0,"Welcome to");
i=0;
while(Display_Buffer[i]!='\0')
LCD_write_str(2,1,Display_Buffer[i++]);
delay_ms(250);
}
}
····为什么会有错啊··求解答啊 求解答
