各位大神帮帮忙 51+ADC0809+1602 外部电压采集,显示频上只能显示“v” 不能测电压
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]=" V";
uchar num,temp,out;
sbit RS=P1^0;//输入指令=0;输入数据=1
sbit RW=P1^1;//写数据=1;读数据=0;
sbit E=P1^2;//使能信号,下降沿执行指令
sbit ST=P1^3;/*定义启动信号,上跳沿时所有内部寄存器清零;
下跳沿时,开始AD转换,转换期间应保持低电平*/
sbit EOC=P1^4;/*定义转换结束信号,高电平时转换结束*/
sbit OE=P1^5;/*输出允许信号,高电平时输出转换数据;低电平时输出高阻态*/
sbit CLK=P3^2;/*时钟输出,通常使500KHz*/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_w_com(uchar com)
{
RS=0;
RW=0;
P0=com;
delay(5);
E=1;
delay(5);
E=0;
}
void lcd_w_dat(uchar dat)
{
RS=1;
RW=0;
P0=dat;
delay(5);
E=1;
delay(5);
E=0;
}
void init()
{
RW=0;
E=0;
lcd_w_com(0x38);
lcd_w_com(0x0c);
lcd_w_com(0x06);
lcd_w_com(0x01);
lcd_w_com(0x80);
for(num=0;num<6;num++)
{
lcd_w_dat(table[num]);
delay(20);
}
TMOD=0x01;
EA=1;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
TR0=1;
ET0=1;
}
void display()
{
uchar wei,ge,shi,bai,qian;
temp=out*1.96; /*ADC0809位八位,2^8=256,所以最大AD值位255
0~5V,5/255=19.6mV*/
qian=temp/1000;
bai=temp%1000/100;
shi=temp/100%10;
ge=temp%10;
lcd_w_com(0x80+wei);
lcd_w_dat(0x30+qian);
lcd_w_dat(0x30+bai);
lcd_w_dat('.');
lcd_w_dat(0x30+shi);
lcd_w_dat(0x30+ge);
}
void main()
{
init();
while(1)
{
ST=0;
OE=0;
ST=1;
delay(5);
ST=0;//下跳沿,AD开始转换
EOC=0;
while(EOC==0);//等待转换完成
OE=1;//输出转换得到的数据
out=P2;
delay(5);
OE=0;//输出禁止
display();//显示
//delay(20);
}
}
void T0_time() interrupt 1
{
TH0=(65536-200)/256;
TL0=(65536-200)%256;
CLK=~CLK;
}
#define uchar unsigned char
#define uint unsigned int
uchar code table[]=" V";
uchar num,temp,out;
sbit RS=P1^0;//输入指令=0;输入数据=1
sbit RW=P1^1;//写数据=1;读数据=0;
sbit E=P1^2;//使能信号,下降沿执行指令
sbit ST=P1^3;/*定义启动信号,上跳沿时所有内部寄存器清零;
下跳沿时,开始AD转换,转换期间应保持低电平*/
sbit EOC=P1^4;/*定义转换结束信号,高电平时转换结束*/
sbit OE=P1^5;/*输出允许信号,高电平时输出转换数据;低电平时输出高阻态*/
sbit CLK=P3^2;/*时钟输出,通常使500KHz*/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_w_com(uchar com)
{
RS=0;
RW=0;
P0=com;
delay(5);
E=1;
delay(5);
E=0;
}
void lcd_w_dat(uchar dat)
{
RS=1;
RW=0;
P0=dat;
delay(5);
E=1;
delay(5);
E=0;
}
void init()
{
RW=0;
E=0;
lcd_w_com(0x38);
lcd_w_com(0x0c);
lcd_w_com(0x06);
lcd_w_com(0x01);
lcd_w_com(0x80);
for(num=0;num<6;num++)
{
lcd_w_dat(table[num]);
delay(20);
}
TMOD=0x01;
EA=1;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
TR0=1;
ET0=1;
}
void display()
{
uchar wei,ge,shi,bai,qian;
temp=out*1.96; /*ADC0809位八位,2^8=256,所以最大AD值位255
0~5V,5/255=19.6mV*/
qian=temp/1000;
bai=temp%1000/100;
shi=temp/100%10;
ge=temp%10;
lcd_w_com(0x80+wei);
lcd_w_dat(0x30+qian);
lcd_w_dat(0x30+bai);
lcd_w_dat('.');
lcd_w_dat(0x30+shi);
lcd_w_dat(0x30+ge);
}
void main()
{
init();
while(1)
{
ST=0;
OE=0;
ST=1;
delay(5);
ST=0;//下跳沿,AD开始转换
EOC=0;
while(EOC==0);//等待转换完成
OE=1;//输出转换得到的数据
out=P2;
delay(5);
OE=0;//输出禁止
display();//显示
//delay(20);
}
}
void T0_time() interrupt 1
{
TH0=(65536-200)/256;
TL0=(65536-200)%256;
CLK=~CLK;
}
程序有问题吧 1002925094
哪里有问题啊 帮我指出来一下
需要可以联系我的
一下子看不出来,可以代做
加我QQ 吧 我告诉你
不错的文件,值得收藏
