我用浮点型定义了变量,然后调试了一下程序,结果只能输出电压为2.2V(1206的显示数值),扭转电位器也无法改变输出1206的显示数值,实际上扭转电位器是能改变电压的。程序如下,有木有好心人帮忙看下的。做的数控电源有点捉急。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit rs=P3^5;
sbit lcden=P3^4;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit rd=P3^7;
sbit wr=P3^6;
uchar vo;
float ge;
uint ge0,ge1,ge2;
uchar code table[]=" OUTPUT V:";
void start()
{
wr=1;
wr=0;
wr=1;//时序图开始阶段(ADC)
}
void init1()
{
P0=0x7f;//cs连在锁存器上,此时cs=0.锁存器与P0口相连(ADC)
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)//写指令按照时序图
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)//写数据按照时序图
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
uchar num;
dula=0;
wela=0;
lcden=0;
write_com(0x38);//初始化设置(液晶说明里面的显示模式设置)
write_com(0x0c);//指针光标设置初始化
write_com(0x06);
write_com(0x01);//清零
write_com(0x80);//第一行开始写(设置的是指针地址)
for(num=0;num<10;num++)
{
write_date(table[num]);//把数组里面的数据逐个写入
delay(20);
}
}
void du_gx(uchar date)//数字量处理转变为实际电压值
{
ge=(date*2.5/256);
ge0=ge/1;//读出个位
ge1=ge*10;
ge2=ge0%10;//读出第一位小数
}
void main()
{
init1();
init();
while(1)
{
start();
delay(100);//为什么延时100之后会动态显示?
rd=0;
delay(5);
rd=1;
delay(5);//以上都是ADC程序
vo=P1;
write_com(0x80+10);
du_gx(vo);
write_date(0x30+ge0);//显示电压的个位
write_date(0x2e);//显示小数点
write_date(0x30+ge2);//显示电压的第一位小数
}
}