include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define uint unsigned int
#define uchar unsigned char
#define max197 XBYTE[0xefff]
sbit EN=P2^0;
sbit RS=P2^1;
sbit CS=P2^2;
sbit HBEN=P2^3;
sbit duan=P2^6;
uchar templ,temph,flag;
float dianya;
uint temp,temp1[25];
unsigned long voltage;
void delay(uint i)
{
while(i--);
}
void delay1(uint z)
{
int x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);
}
void write_com(uchar com)
{
RS=0;
P1=com;
delay1(5);
EN=1;
delay1(5);
EN=0;
}
void write_data(uchar date)
{
RS=1;
P1=date;
delay1(5);
EN=1;
delay1(5);
EN=0;
}
void iniTIal()
{
EN=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void printc(uchar lcd_data) //输出一个字符到LCD
{
write_data(lcd_data);
}
void prints(uchar *lcd_string) //输出一个字符串到LCD
{
uchar i=0;
while(lcd_string[i]!=0x00)
{
write_data(lcd_string[i]);
i++;
}
}
void setPosiTIon(uchar x) //LCD光标定位到x处
{
write_com(0x80+x);
}
uchar TempBuffer[7];
void IntToStr(uint temp, uchar *str, uchar n)
{
uchar a[7]; char i, j; //取得整数值到数组
dianya=temp/4096.0;
voltage=dianya*100000;
a[0]=voltage/10000;
a[1]=voltage%10000/1000;
a[2]=voltage%1000/100;
a[3]=voltage%100/10;
a[4]=voltage%10;
for(i=0; i<5; i++) //转成ASCII码
a[i]=a[i]+'0';
for(i=0; a[i]=='0' && i<=5; i++);
for(j=5-n; j<i; j++) //填充空格
{ *str=' '; str++; }
for(; i<5; i++)
{ *str=a[i]; str++; } //加入有效的数字
*str='\0';
}
void iniTIal_max197()
{
//uchar *AD;
// AD=&max197;
//单片机初始化
EA=1;
IT1=1;
EX1=1;
duan=0;
//初始化MAX197
//*AD=0x40;
}
void main()
{
uchar i;
iniTIal();
initial_max197();
//CS=0;
max197=0x40;
setPosition(0x00);
prints("The voltage is :");
while(1)
{
//采集15次;
for(i=0;i<15;i++)
{
flag=0;
max197=0x40;
while(!flag);
HBEN=1;
temph=max197;
_nop_();
HBEN=0;
templ=max197;
temp=temph;
temp<<=8;
temp1[i]=temp|templ;
}
temp=0;
for(i=0;i<15;i++)
{
temp=temp+temp1[i];
}
temp=temp/15;//取平均值
IntToStr(temp,&TempBuffer[0],5);
setPosition(0x40);
printc(TempBuffer[0]);
printc(TempBuffer[1]);
printc('.');
printc(TempBuffer[2]);
printc(TempBuffer[3]);
printc(TempBuffer[4]);
prints("mv");
delay1(500);
max197=0x40;
}
}
void convert() interrupt 2 using 2
{
flag=1;
}