单片机ADC0809采样LCD显示 10
#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitoe=P3^3;//转换使能sbit...
#include<reg52.h>#define uchar unsigned char#define uint unsigned int
sbit oe=P3^3;//转换使能sbit st=P3^5;//转换开始sbit clk=P3^4;sbit ale=P3^7;sbit eoc=P3^6;sbit rs=P2^6;sbit lcden=P2^5;sbit rw=P2^7;
unsigned int Date[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uint adbuf;
void delay(uchar i){ uchar j; while(i--) { for(j=125;j>0;j--); }}void init(){ EA=1; TMOD=0x02; TH0=216; TL0=216; TR0=1; ET0=1; oe=0; st=0;
}void timer0() interrupt 1{ TH0=216; TL0=216; clk=~clk;}void ad0809(){ st=0;// oe=0; st=1; delay(3); st=0; delay(3); while(!eoc); oe=1; adbuf=P1; delay(1); oe=0; }
void write_com(uchar com){ rs=0; rw=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;}
void write_date(uchar date){ rs=1; rw=0; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0;
}void show_string(uchar *str){ while(*str!='\0') write_date(*str++);} void lcd_init(){
write_com(0x38); delay(5); write_com(0x0c); delay(5); write_com(0x06); delay(5); write_com(0x01); delay(5); write_com(0x80); delay(5);
}
int x,y,z;ta(){
write_com(0x88); write_date(Date[x]); write_com(0x89); write_date(Date[y]); write_com(0x8A); write_date(Date[z]);}void main(){
init(); lcd_init(); while(1) { ad0809(); x=adbuf/100; y=adbuf%100/10; z=adbuf%10; ta(); }
}
按理说,不经过处理的采样电压,0-5V应该显示0-255V,为什么我这个程序显示的电压像是随机变化的,求解啊,如果暂时看不出来的话,给个邮箱,发给你仿真图,看一下结果,是不是可以发现点什么 展开
sbit oe=P3^3;//转换使能sbit st=P3^5;//转换开始sbit clk=P3^4;sbit ale=P3^7;sbit eoc=P3^6;sbit rs=P2^6;sbit lcden=P2^5;sbit rw=P2^7;
unsigned int Date[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uint adbuf;
void delay(uchar i){ uchar j; while(i--) { for(j=125;j>0;j--); }}void init(){ EA=1; TMOD=0x02; TH0=216; TL0=216; TR0=1; ET0=1; oe=0; st=0;
}void timer0() interrupt 1{ TH0=216; TL0=216; clk=~clk;}void ad0809(){ st=0;// oe=0; st=1; delay(3); st=0; delay(3); while(!eoc); oe=1; adbuf=P1; delay(1); oe=0; }
void write_com(uchar com){ rs=0; rw=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;}
void write_date(uchar date){ rs=1; rw=0; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0;
}void show_string(uchar *str){ while(*str!='\0') write_date(*str++);} void lcd_init(){
write_com(0x38); delay(5); write_com(0x0c); delay(5); write_com(0x06); delay(5); write_com(0x01); delay(5); write_com(0x80); delay(5);
}
int x,y,z;ta(){
write_com(0x88); write_date(Date[x]); write_com(0x89); write_date(Date[y]); write_com(0x8A); write_date(Date[z]);}void main(){
init(); lcd_init(); while(1) { ad0809(); x=adbuf/100; y=adbuf%100/10; z=adbuf%10; ta(); }
}
按理说,不经过处理的采样电压,0-5V应该显示0-255V,为什么我这个程序显示的电压像是随机变化的,求解啊,如果暂时看不出来的话,给个邮箱,发给你仿真图,看一下结果,是不是可以发现点什么 展开
2个回答
展开全部
请参阅以下ADC转换代码,明显你的少了“temp=num*1.00/255*500; //转化为十进制数字量”,
void ADC_trans()
{
STA=0;
OE=0;
STA=1;
STA=0; //STA从1->0下降沿开始转换数据
do{ }while(!EOC); //当ADC0808转换数据时,EOC=0;转换结束时,EOC=1;
OE=1; //允许A/D数据输出,单片机读取数据
num=P1; //将输出数据P1端采集,将采集数据放到num 中
OE=0; //关闭A/D数据输出
temp=num*1.00/255*500; //转化为十进制数字量
g=temp%10;
s=temp/10%10;
b=temp/100%10;
q=temp/1000;
}
void ADC_trans()
{
STA=0;
OE=0;
STA=1;
STA=0; //STA从1->0下降沿开始转换数据
do{ }while(!EOC); //当ADC0808转换数据时,EOC=0;转换结束时,EOC=1;
OE=1; //允许A/D数据输出,单片机读取数据
num=P1; //将输出数据P1端采集,将采集数据放到num 中
OE=0; //关闭A/D数据输出
temp=num*1.00/255*500; //转化为十进制数字量
g=temp%10;
s=temp/10%10;
b=temp/100%10;
q=temp/1000;
}
追问
uchar temp;
init();
lcd_init();
while(1)
{
ad0809();
temp=adbuf*1.00/255*500;
x=temp/100;
y=temp%100/10;
z=temp%10;
ta();
}
是这个样子吗,但是还是不行啊
追答
想起来了,把AD的输出OUT1~8对应于单片机的IO的Px.7~0。这下一定行。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好!私信联系吧,发给我看看
追问
怎么联系,私信联系我,谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询