微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助啊,我想做个电压测量表,用的是ADS7818!

求助啊,我想做个电压测量表,用的是ADS7818!

时间:10-02 整理:3721RD 点击:
这个是我的代码,大家可不可以帮下我啊,只要简单的显示就好了。
#include<reg52.h>
#include<math.h>
#include"1602.h"
#define uchar unsigned char
#define uint unsigned int
sbit ADclk=P1^0;
sbit ADdata=P1^1;
sbit ADconv=P1^2;
sbit BEEP = P3^7; //蜂鸣器控制端口P37
uint a1,a2,a3,a4;
uint ad_temp,advalue;
uchar  table_ma[3]={0};
uint num,count;
void beep();
void  display();
bit flag=1;
//ADS7818底层驱动
uint ADS7818()
{
    unsigned char i;
        advalue=0;
        ADconv=0;
        _nop_();        _nop_();
        ADclk=1;
        _nop_();        _nop_();
        ADclk=0;
        _nop_();        _nop_();
        ADclk=1;                                       
        _nop_();        _nop_();
        for(i=0;i<12;i++)
        {        if(ADdata==1)
                 advalue |= 0x001;
   advalue=advalue<<1;
           ADclk=0;
         _nop_();
         _nop_();
        ADclk=1;
        _nop_();
        _nop_();
        }
        ADconv=1;
        ADclk=0;
      ADconv=1;
   return(advalue);                       
}
/*********************************************************/
void beep()                //蜂鸣器响一声函数
{
  unsigned char i;
  for (i=0;i<100;i++)
   {
   delay1ms();
   BEEP=!BEEP;       //BEEP取反
   }
   BEEP=1;           //关闭蜂鸣器
   delay(250);       //延时     
}
void vol_range()
{   
    uint temp;
        ad_temp=ADS7818();                  //
         temp=(ad_temp*2.50*1000)/4095;
     a1=temp/1000;                         //
     a2=temp/100%10;                                 //
            a3=temp/10%10;         //         (temp*10)/100%10
     a4=temp%10;        //(temp*100)/1000%10                                                  
         table_ma[0]=a1;
         table_ma[1]=a2;
         table_ma[2]=a3;
         table_ma[3]=a4;         
                Writecom(0x80+0x49);        Writedata('0'+table_ma[0]);        delay(3);
            Writecom(0x80+0x4A);                  Writedata('0'+table_ma[1]);        delay(3);//
                 Writecom(0x80+0x4B);         Writedata('0'+table_ma[2]);        delay(3);
                 Writecom(0x80+0x4C);                Writedata('0'+table_ma[3]);        delay(3);
                 Writecom(0x80+0x4D);          Writedata(' ');                    delay(3);
}
void main()
{          int i;
             LcdInitiate();        delay(5);
           for(i=0;i<3;i++)
           {
        L1602_string(1,3,"Welcome!");
                L1602_string(2,4,"VOL_DYCL");        delay(5000);   
                }
                 Writecom(0x01);         //清屏
                DC_display();
                                          
        while(1)
        {                          
          vol_range();
        }         
}

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

网站地图

Top