求助啊,我想做个电压测量表,用的是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();
}
}
#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();
}
}
