我用是0.2ms中断一次产生时钟的,给你看看程序对不对
#include <reg52.h> //52系列单片机头文件
#include <intrins.h>
#include "math.h"
#define uchar unsigned char
#define uint unsigned int
sbit st=P2^2; //定义AD的WR端口
sbit oe=P2^3; //定义AD的RD端口
sbit eoc=P2^0;
sbit ale=P2^1;
sbit lcden=P2^6; //液晶使能端
sbit lcdrs=P2^4; //液晶数据命令选择端
sbit ADDA=P2^5; //定义A、B、C三条地址线
sbit ADDB=P3^6;
sbit ADDC=P3^7;
sbit CLK=P2^7; //定义时钟端口
uint a,num;
float OPA,OPB,AD;
uchar code table41[]="WELCOME!";
/*********
延迟函数
**********/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************
2002写命令
**************/
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/************
2002写数据
*************/
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/****************
液晶初始化
*********************/
void init()
{
lcden=0;
write_com(0x38);//设置2002显示,5X7点阵,8位数据接口
write_com(0x0c);//设置开显示,不显示光标
write_com(0x06);//写一个字符后地址指针加1
write_com(0x01);//显示清零,数据指针清零
}
/********************
显示程序
****************************/
void display(uint x,uint qian,uint bai,uint shi,uint ge)
{
write_com(0x80+x);
write_data(0x30+qian);
write_data('.');
write_data(0x30+bai);
write_data(0x30+shi);
write_data(0x30+ge);
}
/********************
定时中断初始化,为了产生AD芯片需要的时钟信号
*********************/
void init_time0()
{
TMOD = 0x02;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
IE = 0x82;
TR0 = 1;
}
/********************
A通道OPA光电压采集
***********************/
void OPA_1()
{
ADDA=1; //选择通道1
ADDB=0;
ADDC=0;
oe=0; //关闭输出允许位
st=0;
st=1;
st=0; //以上三句,开ADC0809
delay(1); //延迟1ms
while(!eoc);//等待转化结束
P1=0xff;
oe=1; //开启输出允许位
a=P1; //将转化出的数字存放至a
a=a*19.53125; // a=a*5/256*1000
OPA=a*0.001;
}
/********************
主函数:
*******************/
void main()
{
uint a1,a2,a3,a4;
init_time0();
init();
write_com(0x80+0x07);
for(num=0;num<8;num++)
{
write_data(table41[num]);
delay(150);
}
delay(1000);
while(1)
{
OPA_1();//A路光电压采集
a1=a/1000;
a2=a/100%10;
a3=a/10%10;
a4=a%10;
display(0x48,a1,a2,a3,a4);
}
}
void Timer0_INT() interrupt 1 //用定时中断产生ADC芯片时钟信号
{
TH0=(65536-200)/256;
TL0=(65536-200)%256;
CLK = !CLK;
}