关于简单信号分析仪中电压峰值的显示问题,拜托指导一下
如下为用c语言编的测量电压信号的峰值,但是LCD的显示出现问题,有时候会显示正确的电压值,但有时候会错误,而且经常出现0值或者显示错误的电压值。测量的电压范围为5V,下面附上c语言,还有附件上有ISIS 7 Professional的元件连接图,麻烦各位高手帮忙指导一下,谢谢
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint a; //定义a为浮点型数据
uchar code table2[]="M= V ";
单片机电压信号峰值分析仪.rar
(19.67 KB)
sbit lcden=P2^1; //液晶使能端
sbit lcdrs=P2^0; //液晶数据命令选择端
sbit EOC=P3^5;
sbit OE=P3^7;
sbit ST=P3^6;
sbit wei0=P3^0;
sbit wei1=P3^1;
sbit wei2=P3^2;
uchar num;
uchar b;
uchar ge,sf,bf;
void delay1(uchar time) //延时程序
{
uchar i,j;
for(i=0;i<time;i++)
{
for(j=0;j<110;j++)
;
}
}
void delay2(uchar time1) //延时程序
{
uchar i;
for(i=0;i<time1;i++)
;
}
void init1() //AD转化的初始化
{
ST=0;
ST=1;
ST=0; //启动信号输入,下降沿启动AD转化
EOC=1;
delay1(1);
while(EOC==0);
OE=1; // 允许从A/D转换器的输出锁存器中读取数字量
P1=0xFF;
b=P1;
OE=0;
a=(uint)(2.0*b);
}
void fenli() //得出电压值各个位上的数字
{
ge=a/100;
sf=a/10%10;
bf=a%10;
}
void delay(uint z) //延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init() // LCD选位程序
{
lcden=0;
write_com(0x38); //设置16x2显示,5x7点阵,8位数据接口
write_com(0x0c); //设置开显示,不显示光标
write_com(0x06); //写一个字符后地址指针加1
write_com(0x01); //显示清0,数据指针清0
}
void main() //主程序
{
wei0=0;
wei1=0;
wei2=0; //选输入口
init();
write_com(0x80+0x49);
for(num=0;num<7;num++)
{
write_data(table2[num]);
delay(5);
}
while(1){
init1();
fenli();
write_com(0x80+0x4b);
write_data(ge+0x30);
write_data(46);
write_data(sf+0x30);
write_data(bf+0x30);
}
}
[ 本帖最后由 CWCHENG 于 2013-5-16 12:57 编辑 ]