附录: 源程序 adc.c
#include
#define ADC0809 XBYTE[0xffff] #define uchar unsigned char #define uint unsigned int uchar code TAB[]=%uchar code LAB[]=\sbit CLK=P3^3; sbit EOC=P3^5; sbit ALE=P3^4; sbit OE=P3^3; uchar table[3]; uchar x1[8];
//显示CHANNEL函数 void label() {
uchar i;
write_com(0x80); for(i=0;i<9;i++) { }
write_data(LAB[i]);
//数字字符串 //标号CHANNEL :
//接ADC0809时钟引脚
//接ADC0809转换完成引脚 //接ADC0809 ALE START 引脚 //接ADC0809读使能引脚 //显示数字缓冲区 //存放8路电压值
//外设ADC0809地址(任意)
}
//转换显示函数
//入口参数:显示位置pos,待转换显示数字量 j void display(uchar pos,unsigned char j) {
uint ad;
ad=j;
ad=ad*1.96; table[0]=ad/100; table[1]=(ad0)/10; table[2]=ad;
write_com(pos);
write_data(TAB[table[0]]); //显示个位 write_data('.'); //显示小数点 write_data(TAB[table[1]]); //显示十分位 write_data(TAB[table[2]]); //显示百分位
}
//获取8路电压函数// void getvolt() { }
uchar i;
for(i=0;i<8;i++) { }
ADC0809=i; //启动i通道转换 delay(20); while(EOC==0); x1[i]=ADC0809;
//等待转换结束 //取得转换值
//主函数// void main() {
uchar i;
TMOD = 0x02; TH0 = 0xf0; TL0 = 0xf0; EA = 1; ET0 = 1; TR0 = 1; LCD1602_init(); label(); while(1) { getvolt();
//显示器初始化 //显示标题
//初始化定时器
//获取8路电压 //显示8路电压
for(i=0;i<8;i++) { } }
write_com(0x87); write_data(TAB[i]); display(0x89,x1[i]); delay(1000);
//转换并显示
}
//定时器模拟时钟脉冲//
void Timer0_INT() interrupt 1 using 1 { CLK = !CLK;
}
lcd.h
#define uchar unsigned char #define uint unsigned int
sbit RS = P3^2; sbit RW= P3^1; sbit E = P3^0;
//延迟函数//
void delay(unsigned char ms) { unsigned char i; while(ms--)
{ for(i=0;i<120;i++);} }
//LCD写指令函数//
void write_com(unsigned char com) { }
E = 0; RS = 0; RW = 0; P2 = com; delay(1); E = 1; delay(1); E = 0;
//LCD写数据函数//
void write_data(unsigned char dat) {
E = 0; RS = 1; RW = 0; P2 = dat; delay(1); E = 1; delay(1); E = 0;
}
//LCD初始化函数//
void LCD1602_init(void) { }
delay(15);
write_com(0x38); delay(5); write_com(0x38); delay(5); write_com(0x38); write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0c);