微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机电压采集系统问题求解0804

单片机电压采集系统问题求解0804

时间:10-02 整理:3721RD 点击:
大婶们,看进来看看,解决我一点小问题,我用0804和单片机进行电压采集,但是不知道哪里出错了,只能运行一次测量一次,一旦采集电压变化,显示屏的数字就会显示出错,必须要再点击运行一次,所以不能测量动态的电压,比如正弦波,以下是程序,附proteus仿真图,谢谢
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD1602_RW=P2^5;        //一直困惑的问题是位定义接口错了,fuck、、、、、、、、、、、、、、、、rw与rs
sbit LCD1602_RS=P2^6 ;
sbit LCD1602_E=P2^7 ;
sbit  CS=P3^5;
sbit  ADWR=P3^6;
sbit  ADRD=P3^7;
uchar k=0;
void delay(uint z) ;
char ADC0804(void)
{
  uchar aaa;
  CS=0;
  ADWR=1;
  delay(100);
  ADWR=0;
  delay(100);
  ADWR=1;         
  delay(100);
  ADRD=1;
  delay(100);
  ADRD=0;
  delay(100);
  aaa=P1;
  P0=P1;
  ADRD=1;
  CS=1;
   return(aaa);
  }                  
void write_com(uchar com)  //写命令
{
        LCD1602_RS=0;
        LCD1602_RW = 0;
    P0=com;
        delay(5);
        LCD1602_E=1;
        delay(5);
        LCD1602_E=0;
}
void write_data(uchar date)                        //写数据
{
        LCD1602_RS=1;
        LCD1602_RW = 0;
        P0=date;
        delay(5);
        LCD1602_E=1;
        delay(5);
        LCD1602_E=0;
}
void init()                                                  //初始化
{
        LCD1602_E=0;
        write_com(0x38);                           //开显示
        write_com(0x0e);                          // 光标
        write_com(0x06);                           // 指针加一
        write_com(0x01);                           //  清屏
          write_com(0x80);                         //设置数据指针起点
}
void main (void)                                        //主函数
{
        uint bai,shi,ge,f,f1,f2,f3,f4,f5,f6,f7;
        uchar m,b,h;
        init();
        while(1)
        {
            P1=ADC0804();
            b=P1;
                init();
            bai=b/100;                                          //把IO口数据转化成十进制
                b=b%100;
                shi=b/10;
                ge=b%10;         
                f1=(bai*100+shi*10+ge)/51;        //转换成0-5v之间的电压值,此处为第一位
                f2=(bai*100+shi*10+ge)%51;        //取余
                f3=f2*10;
                f4=f3/51;                                         //小数点后一位
                f5=((f3%51)*10)/51;                          //小数点后二位
                f6=((f3%51)*10)%51;                            //以下为小数点后三位的四舍五入
                f7=(f6*10)/51;       
                                                                  
                write_data(0x30+bai);
                write_data(0x30+shi);
                write_data(0x30+ge);
                write_com(0x80+0x40);                   //设置指针起点为第二排
                write_data(0x30+f1);
                write_data('.');
                write_data(0x30+f4);
                write_data(0x30+f5);
                write_data(0x30+f7);
                delay(1000);
}
}
void delay(uint z)                                          //延时函数
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

单片机电压采集


【OK210试用体验】+自拟标题

【OK210试用体验】+自拟标题

酱油party路过

不错的资料,值得收藏

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top