标题:
单片机+adc0808与1602测电压,只能测一半?
[打印本页]
作者:
longzhihao
时间:
2021-4-18 20:44
标题:
单片机+adc0808与1602测电压,只能测一半?
ADC0808 转换测电压,当滑动变阻器在百分之50以下就是2.5v以下时很准,超过2.5v就从0开始记。求助!!!
另外,我还想显示电流和电功率,请问该如何做呢?
单片机源程序如下:
#include <reg51.h>
#include <intrins.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;
sbit CLOCK = P3^1;
sbit EOC = P3^2;
sbit START = P3^3;
sbit OE = P3^4;
uchar LCDDSY1[]={"V: . I: . "}; //第一行显示数据//
uchar LCDDSY2[]={"P: . "}; //第二行显示数据//
uchar n;//adc转换数据
void DelayMS(uint ms) //延时子程序//
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
uchar Read_LCD_State()
{
uchar state;
RS=0;RW=1;EN=1;DelayMS(1);
state=P0;
EN = 0;DelayMS(1);
return state;
}
void LCD_Busy_Wait()
{
while((Read_LCD_State()&0x80)==0x80);//DB7=1时,忙
DelayMS(5);
}
void Write_LCD_Data(uchar dat)
{
LCD_Busy_Wait();
RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0; //en使能端,给高脉冲为写操作
}
void Write_LCD_Command(uchar cmd)
{
LCD_Busy_Wait();
RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(1);EN=0;
}
void Init_LCD()
{
Write_LCD_Command(0x38); // 两行显示,5*8点阵
DelayMS(1);
Write_LCD_Command(0x01); //清屏
DelayMS(1);
Write_LCD_Command(0x06); //数据读写操作后,AC自动加一,画面不动
DelayMS(1);
Write_LCD_Command(0x0c); // 显示开,光标关,闪烁关
DelayMS(1);
}
void Set_LCD_POS(uchar p)
{
Write_LCD_Command(p|0x80);
}
void change()
{ uint a;
a=n*500/255;
LCDDSY1[2]=a/100+0x30;
LCDDSY1[4]=a%100/10+0x30;
LCDDSY1[5]=a%10+0x30;
}
void display()
{ uchar i=0;
change();
LCDDSY1[6]='v';
Set_LCD_POS(0x02);i=0;
while(LCDDSY1[i]!='\0')
{
Write_LCD_Data(LCDDSY1[i]);
i++;
}
}
void timer0() interrupt 1
{
CLOCK=~CLOCK;
}
uchar ADC()
{
EOC=1;TR0=1;START=0;OE=0;DelayMS(50);
START=1;DelayMS(50);
START=0;
while(EOC==0);
OE=1;
n=P1;
DelayMS(1);
OE=0;
TR0=0;
return n;
}
void main()
{
TMOD=0x02;
TH0=0x14;
TL0=0x00;
IE=0x82;
TR0=1;
Init_LCD();DelayMS(1);
while(1)
{ ADC();
display();
}
}
复制代码
作者:
longzhihao
时间:
2021-4-18 20:51
已经弄好了,500换成500.0就ok了 但是不知道为什么。。。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1