微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > ADC0832模数转换与显示中的问题

ADC0832模数转换与显示中的问题

时间:10-02 整理:3721RD 点击:
#include <reg51.h>
#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);
}
}
····为什么会有错啊··求解答啊   求解答

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top