找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5947|回复: 1
打印 上一主题 下一主题
收起左侧

基于51单片机的数字电压表设计

[复制链接]
跳转到指定楼层
楼主
ID:235027 发表于 2017-9-23 09:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//程序头函数
#include <reg52.h>
//宏定义
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1
//ADC0809
sbit ST=P3^2;
sbit EOC=P3^3;
sbit OE=P3^1;
sbit DIAN = P0^5;          //小数点
/*******************************定义全局变量********************************/
unsigned char dis[3];       //显示数值
unsigned int sum=0;
unsigned int temp=0;
unsigned int dat=0;
/*******************************共阴LED段码表*******************************/
unsigned char code tab[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0x5e/*字母U*/}; //gc.debfa
/****************************************************************************
函数功能:AD转换子程序
****************************************************************************/
//ADC0809读取信息
uchar ADC0809()
{
uchar temp_=0x00;
//初始化高阻太
OE=0;
//转化初始化
ST=0;
//开始转换
ST=1;
ST=0;
//外部中断等待AD转换结束
while(EOC==0)
//读取转换的AD值
OE=1;
temp_=Data_ADC0809;
OE=0;
return temp_;
}
/****************************************************************************
函数功能:延时子程序
入口参数:
出口参数:
****************************************************************************/
void delay(unsigned int x)
{
    unsigned int i,j;
    for(i=0;i<x;i++)
for(j=0;j<121;j++);
}
//=====================================================================================
//=====================================================================================
//=====================================================================================
/****************************************************************************
函数功能:将0-255级换算成0.00-5.00的电压数值
入口参数:i
出口参数:
****************************************************************************/
void convdata(unsigned char dat1)
{
unsigned int Vo;
Vo=dat1*1.96;  
    dis[0] = Vo/100;       //十位
    dis[1] = Vo%100/10;      //个位  
    dis[2] = Vo%100%10;     //小数点后第1位
}
/****************************************************************************
函数功能:数码管显示子程序
入口参数:
出口参数:
****************************************************************************/
void display(void)
{  
    P0=~tab[dis[0]];      
    P2=0xfe;                  //11011111
DIAN=0;
    delay(1);   
    P2=0xff;
    P0=~tab[dis[1]];      
    P2=0xfb;                //10111111
    delay(1);
    P2=0xff;
    P0=~tab[dis[2]];      
    P2=0xef;              //01111111  
    delay(1);
    P2=0xff;
P0=~tab[10];      
    P2=0xbf;              
    delay(1);
    P2=0xff;
}
/****************************************************************************
函数功能:主程序
入口参数:
出口参数:
****************************************************************************/
void main(void)
{
unsigned char p=0;
    while(1)       //主循环   
    {
  for(p=0;p<20;p++)
  {
   sum=sum+ADC0809();
   display();
  }
//  dat=((sum/20)+dat)/2;
  dat=sum/20;
  convdata(dat);      //数据转换
  sum=0;
  display();      //显示数值
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:555383 发表于 2019-6-5 17:27 | 只看该作者
电路图?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表