#include"reg52.h"
#define uchar unsigned char //宏定义
sbit ST=P1^0; //START AD
sbit EOC=P1^1;
sbit OE=P1^2;
sbit CLK=P1^3;
sbit ADDCSA=P1^4; //片选A
sbit ADDCSB=P1^5; //片选B
uchar AD_DATA[2]; //保存IN0和IN1经AD转换后的数据
/**********延时函数************/
void delay(uchar i)
{
uchar j;
while(i--)
{
for(j=125;j>0;j--)
;
}
}
/*********系统初始化***********/
void init()
{
EA = 1; //开总中断
TMOD = 0x02; //设定定时器T0工作方式
TH0=216; //利用T0中断产生CLK信号
TL0=216;
TR0=1; //启动定时器T0
ET0=1;
ST=0;
OE=0;
}
/*********液晶屏初始化***********/
bit lcd_busy()
{
bit result;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delay(5);
result=(bit)(P0&0x80);
LCD_EN=0;
return(result);
}
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delay(5);
LCD_EN = 1;
delay(5);
LCD_EN = 0;
}
void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delay(5);
LCD_EN = 1;
delay(5);
LCD_EN = 0;
}
/***********T0中断服务程序************/
void t0(void) interrupt 1 using 0
{
CLK=~CLK;
}
/***********AD转换函数**********/
void AD()
{
ST=0;
ADDCSA=0,ADDCSB=0; //选择通道IN0
delay(10);
ST=1; //启动AD转换
delay(10);
ST=0;
while(0==EOC)
;
OE=1;
AD_DATA[0]=P2;
OE=0;
ST=0;
ADDCSA=0,ADDCSB=1; //选择通道IN1
delay(10);
ST=1; //启动AD转换
delay(10);
ST=0;
while(0==EOC)
;
OE=1;
AD_DATA[1]=P2;
OE=0;
ST=0;
ADDCSA=1,ADDCSB=0; //选择通道IN2
delay(10);
ST=1; //启动AD转换
delay(10);
ST=0;
while(0==EOC)
;
OE=1;
AD_DATA[2]=P2;
OE=0;
}
/*****************主函数**************/
void main()
{
init();
while(1)
{
AD();
lcd_pos(add,bdd);
}
}