数据经过AD转换再送到液晶显示上

[复制链接]
1503|7
手机看帖
扫描二维码
随时随地手机跟帖
zhuww|  楼主 | 2021-11-20 20:10 | 显示全部楼层 |阅读模式
为什么我的数据经过AD转换再送到液晶显示上,我调节可调电阻,值的实际变化应当是从0——5,而显示值的变化规律是0——0.5,接着直接跳到1,从1——1.5,再接着就跳到2,如此继续下去。

使用特权

评论回复
wyjie| | 2021-11-20 20:11 | 显示全部楼层
楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
dingy| | 2021-11-20 20:17 | 显示全部楼层
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
dengdc| | 2021-11-20 20:19 | 显示全部楼层

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit SCL=P1^1;//时钟脉冲
sbit SDA=P1^2;//双向输入输出数据端
#define SCL_SET SCL=1
#define SCL_CLR SCL=0
#define SDA_SET SDA=1
#define SDA_CLR SDA=0
#define AddWr 0x90   //写数据地址
#define AddRd 0x91   //读数据地址
#define adCon 0x40   //AD控制字节


sbit RS=P2^4;
sbit RW=P2^5;
sbit E=P2^6;
#define setRS RS=1
#define clrRS RS=0
#define setRW RW=1
#define clrRW RW=0
#define setE E=1
#define clrE E=0


uint time=0;
uchar ADFlag=0;
uchar str[8]="Ci n.mv ";

//延时1US
void delay(uint cnt)
{
while(--cnt);
}
//延时1MS
void delayms(uint time)
{
uint i;
for(i=0; i<time; i++)
    delay(120);
}
//写数据,P0
void writeData(uchar Data)
{
    setRS;
    clrRW;
    delay(1);
    setE;
    delay(1);
    P0=Data;
    delay(5);
    clrE;
}
//写命令,P0
void writeCom(uchar Com)
{
    clrRS;
    clrRW;
    delay(1);
    setE;
    delay(1);
    P0=Com;
    delay(5);
    clrE;
}
//清屏函数
void clear_scr(void)
{
     writeCom(0x01);
     delayms(5);
    }

//写一个字符串在(X,Y )位置
void disStr(uchar x, uchar y, uchar *str)
{
if(y==0) writeCom(0x80+x);//第一行
else writeCom(0xc0+x);//第二行
while(*str)
{
    writeData(*str);
    str++;
}
}
//LCD1602初始化
void lcdInitial()
{
     writeCom(0x38);//显示模式设置
     delayms(5);
   writeCom(0x08);//显示关闭
     clear_scr();//清屏
     writeCom(0x06); //显示光标移动设置
     delayms(5);
     writeCom(0x0C); //显示开及光标设置
}


void start()
{
SDA_SET;
delay(1);
SCL_SET;
delay(5);
SDA_CLR;
}


void stop()
{
SDA_CLR;
delay(1);
SCL_SET;
delay(5);
SDA_SET;  
}


void ack()
{
SDA_CLR;
SCL_SET;
delay(1);
SCL_CLR;
}


void noAck()
{
      SDA_SET;
SCL_SET;
delay(1);
SCL_CLR;
}


void send(uchar Data)
{
uchar i=0;
uchar temp=0;

temp=Data;
for(i=0; i<8; i++)
{
    SCL_CLR;
    delay(1);
    if(temp&0x80) SDA_SET;
    else SDA_CLR;
    delay(1);
    SCL_SET;
    delay(1);
    temp<<=1;
}
     SCL_CLR;
}


uchar recive()
{
    unsigned char temp=0;
             unsigned char temp1=0;
             unsigned char BitCounter=8;

            SDA_SET;
             do
               {
                    SCL_CLR;
            _nop_();
                    SCL_SET;
                    _nop_();
                    if(SDA)
                       temp=temp|0x01;
                    else
                       temp=temp&0xfe;

                  if(BitCounter-1)
                       {
                            temp1=temp<<1;
                            temp=temp1;
                            }
                            BitCounter--;
                           }
                  while(BitCounter);
                  return(temp);
}


uchar read(uchar ch )
{
uchar temp=0;

start();
send(AddWr);//确认芯片
ack();
send(adCon|ch);//确认通道
ack();
//读出数据,放进temp
start();
send(AddRd);
ack();
temp=recive();
noAck();
stop();
return temp;
}



void dis(uchar *date)
{

uchar i=0;
uchar ch1, ch2, ch3;//ch4;

for(i=0; i<4; i++)
{

  ch1=i+48;
    str[1]=ch1;
    ch2=date[i]/51+48;
    str[3]=ch2;


   ch3=date[i]%51/10+48;

  str[5]=ch3;

disStr(i*8, 0, str);

}
}


void interrupt_init()
{
ET0=1;//定时器0溢出中断允许
TR0=1;//启动定时器0
TMOD=0X01;
TH0=0Xd8;
TL0=0Xf0;  
EA=1;//开总中断
}



void main()
{
uchar i=0;
uchar vot[4];


interrupt_init();
lcdInitial();


while(1)
{
      if(ADFlag==1)
      {
         for(i=0; i<4; i++) vot[i]=read(i);
           
     

  }
          dis(vot);
}
}

void tim0_() interrupt 1 using 1
{
     TH0=0xd8;  //重新赋值
     TL0=0xf0;

time++;
     if(time==100)
        {  time=0;
        ADFlag=1;
      } //定时置位AD采样标志位
}

使用特权

评论回复
zhenykun| | 2021-11-20 20:22 | 显示全部楼层
看代码看了半天

使用特权

评论回复
zhuww|  楼主 | 2021-11-20 20:24 | 显示全部楼层
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

使用特权

评论回复
lajfda002| | 2021-12-17 10:23 | 显示全部楼层
这个一定是一个低级的错误,好像没有什么特别大的需求了。

使用特权

评论回复
lajfda003| | 2021-12-17 10:27 | 显示全部楼层
感觉这个问题,也不是那么难吧,只要能够找到根据,就可以了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

893

主题

8252

帖子

1

粉丝