微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求教AD7705

求教AD7705

时间:10-02 整理:3721RD 点击:
数据一直都出不来,基准电压2.5V    AIN端输入也没错    RST口我直接接高电平
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
/************* 12864LCD引脚定义 *************/
#define LCD_data  P0       //数据口
sbit LCD_RS  =  P2^4;      //寄存器选择输入
sbit LCD_RW  =  P2^5;      //液晶读/写控制
sbit LCD_EN  =  P2^6;      //液晶使能控制
sbit LCD_PSB =  P2^7;      //串/并方式控制
sbit CLK=P1^0;
sbit DIN=P1^1;
sbit DOUT=P1^2;
sbit DRDY=P1^3;
sbit CS=P1^4;

#define NOP(); {_nop_();_nop_();_nop_();_nop_();};
/*********************************************************/
uchar code  DIS1[] = {"    电阻测量    "};
uchar code  DIS2[] = {"电阻值:        "};
uchar DIS3[16];
uchar code  DIS4[] = {"                "};
/*********************************************************/
void delay(int ms)
{
    while(ms--)
        {
      uchar i;
          for(i=0;i<150;i++)  
           {
            _nop_();                          
                _nop_();
                _nop_();
                _nop_();
           }
        }
}

                       
/*******************************************************************/
/*                                                                 */
/*检查LCD忙状态                                                    */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
/*                                                                 */
/*******************************************************************/
bit lcd_busy()
{                          
    bit result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    NOP();
    result = (bit)(P0&0x80);
    LCD_EN = 0;
    return(result);
}
/*******************************************************************/
/*                                                                 */
/*写指令数据到LCD                                                  */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
/*                                                                 */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{                          
   while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
    _nop_();
    _nop_();
    P0 = cmd;
    NOP();
    LCD_EN = 1;
    NOP();
    LCD_EN = 0;  
}
/*******************************************************************/
/*                                                                 */
/*写显示数据到LCD                                                  */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
/*                                                                 */
/*******************************************************************/
void lcd_wdat(uchar dat)
{                          
   while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    P0 = dat;
    NOP();
    LCD_EN = 1;
    NOP();
    LCD_EN = 0;
}
/*******************************************************************/
/*                                                                 */
/*  LCD初始化设定                                                  */
/*                                                                 */
/*******************************************************************/
void lcd_init()
{
    LCD_PSB = 1;         //并口方式
//        LCD_RST = 0;                 //液晶复位
//   delay(3);                  
//    LCD_RST = 1;      
//    delay(3);
    lcd_wcmd(0x34);      //扩充指令操作
    delay(5);
    lcd_wcmd(0x30);      //基本指令操作
    delay(5);
    lcd_wcmd(0x0C);      //显示开,关光标
    delay(5);
    lcd_wcmd(0x01);      //清除LCD的显示内容
    delay(5);
}
/*********************************************************/
/*                                                       */
/* 设定显示位置                                          */
/*                                                       */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{                          
   uchar  pos;
   if (X==1)
     {X=0x80;}
   else if (X==2)
     {X=0x90;}
   else if (X==3)
     {X=0x88;}
   else if (X==4)
     {X=0x98;}
   pos = X+Y ;
   lcd_wcmd(pos);     //显示地址
}

/*********************************************************
*                                                        *
* 清屏函数                                               *
*                                                        *
*********************************************************/
void  clr_screen()
{
   lcd_wcmd(0x34);      //扩充指令操作
   delay(5);   
   lcd_wcmd(0x30);      //基本指令操作
   delay(5);
   lcd_wcmd(0x01);      //清屏
   delay(5);     
}
void xianshi()
{
        uchar i;
        lcd_pos(1,0);             //设置显示位置为第一行
     for(i=0;i<16;i++)
     {
       lcd_wdat(DIS1[i]);
       delay(30);
     }
     lcd_pos(2,0);             //设置显示位置为第二行
     for(i=0;i<16;i++)
     {
       lcd_wdat(DIS2[i]);
       delay(30);
     }
     lcd_pos(3,0);             //设置显示位置为第三行
     for(i=0;i<16;i++)
     {
       lcd_wdat(DIS3[i]);
       delay(30);
     }
     lcd_pos(4,0);             //设置显示位置为第四行
     for(i=0;i<16;i++)
     {
       lcd_wdat(DIS4[i]);
       delay(30);
     }
}
void write(uchar x)  
{
uchar i;
CS=0;
CLK=1;
for (i=0;i<8;i++)
   {
     CLK=0;
  //  delay(1);
     DIN=(bit)(x&0x80);
//     delay(1);
     CLK=1;
   //  delay(1);
     x<<=1;
   }
   DIN=1;
  // SO=1;
   //CS=1;
}
uint read(void)   
{
  uchar i;
  uint w ;
    w=0x00;
    CS=0;
    CLK=1 ;
     for(i=0;i<16;i++)
     {  
        CLK=0;
      // delay(1);
        w<<=1;
        if(DOUT==1)
         w|=0x01;
        CLK=1;
        delay(1);
      }
    DIN=1;
        CLK=1;
    //CS=1;
    //DOUT=1;
        return w;
}
void init()
{
        unsigned char i;
        CLK=1;
        DIN=1;
        for(i=0;i<40;i++)
        {
                CLK=0;
                CLK=1;
        }
        write(0x20);   //AD7705初始化-读第1通道A/D转换值下写时钟寄存器
        write(0x05);//改刷新频率为20 不分频
        write(0x10);//下写设置寄存器
        write(0x44);
        delay(50);
}
void zhua(float m)
{  uint n;
    n=(uint)(m*10000);
        DIS3[0]=n/10000+'0';
        DIS3[1]=n%10000/1000+'0';
        DIS3[2]=n%10000%1000/100+'0';
        DIS3[3]=n%10000%1000%100/10+'0';
        DIS3[4]=n%10+'0';
}
/*********************************************************
*                                                        *
*     主函数                                             *
*                                                        *
*********************************************************/
void main()
{
   float a;
   delay(100);                 //上电,等待稳定
   lcd_init();
   init();                 //初始化LCD
   while(1)
    {
                init();
       if(DRDY==0)   //等待DRDY变低
        {
       
           write(0x38);
           if(DRDY==0)   
             {
               a=read();
               zhua(a);   
              }
        }
       xianshi();
}
}

我是先测了下drdy引脚电平,之前一直是高电平,所以没输出。检查了下程序出了点问题。

可以详细说说啊?我也有这样的问题啊/////求解

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

网站地图

Top