ADC0804LCN转换求助
时间:10-02
整理:3721RD
点击:
刚刚做了一个ADC0804LCN进行数模转换,接线导入程序后调节电位器发现ADC0804LCN的8个输出口一直是0,不知道什么原因。
程序:#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]="0123456789";
uchar code table2[]="DianYa:0.00V";
uchar code table3[]="made by GYS ";
uchar num,adval,date;
sbit lcden=P2^2;
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcds1=P3^3;
sbit lcds2=P3^4 ;
sbit adwr=P3^6;
sbit adrd=P3^7;
sbit adcs=P3^5;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
//LCD写指令
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//LCD写数据
void write_date(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//初始化函数
void init()
{
adcs=0;
lcdrw=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
while(table3[num]!='\0')
{
write_date(table3[num++]);
delay(10); //第一排字幕出现的快慢
}
lcden=1;
delay(100);
lcden=0;
write_com(0x80+0x40);
num=0;
while(table2[num]!='\0')
{
write_date(table2[num++]);
}
}
//将采集到的数据转换成具体数
void set_shu(uchar add,uchar date)
{
uchar bai,shi,ge;
bai=date/51; //ADC0804为8位并行输出,最大二进制为256,实验一5V为例,所以date最大为256时,(转下一行解释)
shi=((date%51)*10/51); //应对date求模才能使bai位为5V,shi、ge每次求模后乘10,表示将次低位的值变成高位值来处理。
ge=((date%51)*10%51)*10/51;
write_com(0x80+0x40+add);
{
write_date(table1[bai]);
}
write_com(0x80+0x40+add+2);
{
write_date(table1[shi]);
}
write_com(0x80+0x40+add+3);
{
write_date(table1[ge]) ;
} }
//开启AD采样//
void st_ad()
{
adcs=0; //使能开启
adwr=0;
delay_50us(5); //延时
adwr=1; //adwr由低电平转高电平即发送采样信号
delay_50us(10);
adcs=1; //关闭使能
}
//读AD采样数据//
void red_ad()
{
P1=0xff;
adcs=0; //使能有效
adrd=0; //发送读数据指令(adrd之前未定义,默认高电平,由高变低读数据)
delay_50us(5);
adval=P1; //单片机读取将P1口的数据
adrd=1; //置高结束读取
adcs=1; //关闭使能
delay_50us(10);//等待
}
void main()
{
init();
while(1)
{
st_ad(); //启动AD采样
delay(800); //延时100ms等待采样结束
red_ad(); //读取AD采样数据
set_shu(7,adval); //将采到的数据转换成具体数字显示出来
}
}
程序:#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]="0123456789";
uchar code table2[]="DianYa:0.00V";
uchar code table3[]="made by GYS ";
uchar num,adval,date;
sbit lcden=P2^2;
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcds1=P3^3;
sbit lcds2=P3^4 ;
sbit adwr=P3^6;
sbit adrd=P3^7;
sbit adcs=P3^5;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
//LCD写指令
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//LCD写数据
void write_date(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//初始化函数
void init()
{
adcs=0;
lcdrw=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
while(table3[num]!='\0')
{
write_date(table3[num++]);
delay(10); //第一排字幕出现的快慢
}
lcden=1;
delay(100);
lcden=0;
write_com(0x80+0x40);
num=0;
while(table2[num]!='\0')
{
write_date(table2[num++]);
}
}
//将采集到的数据转换成具体数
void set_shu(uchar add,uchar date)
{
uchar bai,shi,ge;
bai=date/51; //ADC0804为8位并行输出,最大二进制为256,实验一5V为例,所以date最大为256时,(转下一行解释)
shi=((date%51)*10/51); //应对date求模才能使bai位为5V,shi、ge每次求模后乘10,表示将次低位的值变成高位值来处理。
ge=((date%51)*10%51)*10/51;
write_com(0x80+0x40+add);
{
write_date(table1[bai]);
}
write_com(0x80+0x40+add+2);
{
write_date(table1[shi]);
}
write_com(0x80+0x40+add+3);
{
write_date(table1[ge]) ;
} }
//开启AD采样//
void st_ad()
{
adcs=0; //使能开启
adwr=0;
delay_50us(5); //延时
adwr=1; //adwr由低电平转高电平即发送采样信号
delay_50us(10);
adcs=1; //关闭使能
}
//读AD采样数据//
void red_ad()
{
P1=0xff;
adcs=0; //使能有效
adrd=0; //发送读数据指令(adrd之前未定义,默认高电平,由高变低读数据)
delay_50us(5);
adval=P1; //单片机读取将P1口的数据
adrd=1; //置高结束读取
adcs=1; //关闭使能
delay_50us(10);//等待
}
void main()
{
init();
while(1)
{
st_ad(); //启动AD采样
delay(800); //延时100ms等待采样结束
red_ad(); //读取AD采样数据
set_shu(7,adval); //将采到的数据转换成具体数字显示出来
}
}
已退回1积分