标题: 用单片机+ADC0808做电压表,能测试0~5v的电压,一点点的误差 仿真代码 [打印本页]

作者: 超客通讯    时间: 2021-4-24 12:34
标题: 用单片机+ADC0808做电压表,能测试0~5v的电压,一点点的误差 仿真代码
附件里有做好源码和仿真

单片机程序:
//功能:晶振11.0592M,通过采集模拟信号,让数码管显示当前电压//作者: 康晓龙
//单位: 单片机协会
//版本号:1.0
#include<reg51.h>
sbit duancun= P2^1 ;         //控制锁存器段选
sbit weicun= P2^2;                 //控制锁存器位选
sbit OE  = P1^0;  //输出使能,OE=0高阻,OE=1 ADC转换结果输出到单片机
sbit ST  = P1^2;  //启动信号,上升沿复位清零ADC,下降沿启动转换,低电平保持转换
sbit ALE  = P1^1;         
sbit OEC  = P1^3;
sbit p07  = P0^7;
#define uint unsigned int
#define uchar unsigned char

void delay(uint x)
{
        while(x--);        
}
/**********************************
函数名:xianshi()
变量:i
功能:处理 i的数据 ,让i能够显示到数码管上
***********************************/
void xianshi(uint i)        
  {                  unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,
                              0x99,0x92,0x82,0xf8,0x80,0x90};
           unsigned char code led[]={0x00,0x01,0x02,0x04,
                           0x08,0x10,0x20,0x40,0x80};
           delay(50);
                   duancun=1;
                   P0=duan[i%10];         
                   duancun=0;
                   weicun=1;
                   P0=led[8];
                   weicun=0;
                    P0=0xff;

                   delay(50);
                   duancun=1;
                   P0=duan[i/10%10];
                   duancun=0;
                   weicun=1;
                   P0=led[7];
                   weicun=0;
                    P0=0xff;

                   delay(50);
                   duancun=1;
                   P0=duan[i/100%10]&0x7f;
                  
                   duancun=0;
                   weicun=1;
                   P0=led[6];
                   weicun=0;
                    P0=0xff;

  }
void main()                           
{        float qq=1.962;
        while(1)        
        {                    
                ALE =1;
            ST =1;
            delay(5);
                ALE = 0;
                ST = 0;
                delay(5);
                ALE = 1;
                ST = 1;/*启动A/D转换,上升沿复位清零ADC,下降沿启动转换,低电平保持转换*/
        delay(50);  
        OE = 0;         //输出使能,OE=1高阻,OE=0 ADC转换结果允许输出到单片机
        xianshi((P3*qq)); //因为P3的数据最大只有255,电压最大是5V,所以乘0.962就约等于500
        OE = 1;               //输出使能,OE=0高阻
                                         
     }
}

全部资料51hei下载地址(Proteus8.8版本打开):
AD转换2.0.zip (85.06 KB, 下载次数: 32)






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1