电子开发 | 基础入门 | 电路原理图 | 梯形图实例 | PLC基础   《如果喜欢本站,请按 Ctrl+D 手动收藏!感谢您的支持》一起学习一起进步,电子开发王欢迎您!.

电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册

★电路公式手册,最新版《电子电路公式计算器》,电路公式查询手册 电路公式计算器【电子从业人员必备手册】
☆十天学会单片机实例100 c语言 chm格式。资料内容详细,覆盖例子多,内容广【电子从业人员必备手册】
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> 单片机实例 >> 正文

基于51单片机的数字电压表设计_Proteus仿真+程序

作者:佚名    文章来源:网友    点击数:1596    更新时间:2023/10/14

数字电压表

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

简介
1、数字电压表简称DVM,数字电压表基本原理是将输入的模拟电压信号转化为数字信号,再进行输出显示。而A/D转换器的作用是将连续变化的模拟信号量转化为离散的数字信号,器基本结构是由采样保持,量化,编码等几部分组成。因此AD转换是此次设计的核心元件。输入的模拟量经过AD转换器转换,再由驱动器驱动显示器输出,便得到测量的数字电压。
2、基本功能要求:
1.可以选择测量测量1路0-5V的1路输入电压值;
2.可轮流显示或单路选择显示(可选);
3.测量显示最小分辨率为0.01V;测量误差约为0.02V;
数码管显示
数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管:按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
单片机最小系统
当在89C5x单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作,按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经过电阻与电源VCC接通而实现的。

51单片机最小系统 

硬件电路设计

供电电路和参考电压
由于此次系统的芯片工作电压为+5v,所以可以直接用USB供电。

 
数字电压表系统电路原理图

数字电压表系统电路原理图 

Proteus仿真图

数字电压表系统电路原理图,Proteus仿真 

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include <reg51.h>
#include <intrins.h>
/*********************************端口定义**********************************/
sbit CS   = P3^5;
sbit Clk = P3^3;
sbit DATI = P3^4;
sbit DATO = P3^4;
sbit DIAN = P0^5;          //小数点
/*******************************定义全局变量********************************/
unsigned char dat = 0x00;      //AD值
unsigned char count = 0x00;      //定时器计数
unsigned char CH;       //通道变量
unsigned char dis[4];       //显示数值
unsigned int sum=0;
/*******************************共阴LED段码表*******************************/
unsigned char code tab[]={
<!-- -->0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7};
char code tablewe[]={
<!-- --> 0xfd,0xfb,0xf7,0xef,0xdf,0xfe  };
/****************************************************************************
函数功能:AD转换子程序
入口参数:CH
出口参数:dat
****************************************************************************/
unsigned char adc0832(unsigned char CH)
{
<!-- -->
      unsigned char i,test,adval;
     adval = 0x00;
     test = 0x00;
     Clk = 0;       //初始化
     DATI = 1;
    _nop_();
    CS = 0;
    _nop_();
    Clk = 1;
   _nop_();
   if ( CH == 0x00 )      //通道选择
   {
<!-- -->
       Clk = 0;
       DATI = 1;      //通道0的第一位
       _nop_();
      Clk = 1;
        _nop_();
        Clk = 0;
      DATI = 0;      //通道0的第二位
      _nop_();
      Clk = 1;
      _nop_();
    }
    else
    {
<!-- -->
       Clk = 0;
    DATI = 1;      //通道1的第一位
      _nop_();
      Clk = 1;
      _nop_();
      Clk = 0;
      DATI = 1;      //通道1的第二位
    _nop_();
     Clk = 1;
     _nop_();
   }
      Clk = 0;
      DATI = 1;
    for( i = 0;i < 8;i++ )      //读取前8位的值
    {
<!-- -->
       _nop_();
       adval <<= 1;
       Clk = 1;
       _nop_();
       Clk = 0;
       if (DATO)
          adval |= 0x01;
      else
          adval |= 0x00;
    }
      for (i = 0; i < 8; i++)      //读取后8位的值
      {
<!-- -->
           test >>= 1;
           if (DATO)
              test |= 0x80;
           else
              test |= 0x00;
          _nop_();
          Clk = 1;
          _nop_();
          Clk = 0;
      }
      if (adval == test)      //比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉
       dat = test;
       nop_();
       CS = 1;        //释放ADC0832
       DATO = 1;
       Clk = 1;
       return dat;
}
/****************************************************************************
函数功能:延时子程序
入口参数:
出口参数:
****************************************************************************/
void delay(void)
{
<!-- -->
    int k;
    for(k=10;k<500;k++);
}
/****************************************************************************
函数功能:将0-255级换算成0.00-5.00的电压数值
入口参数:i
出口参数:
****************************************************************************/
void convdata(unsigned int i)
{
<!-- -->
 i=i*1.96;     //i*5/255*100
    dis[0] = i/100;       //个位
    dis[1] = i%100/10;      //小数点后第一位 
    dis[2] = i%100%10;     //小数点后第二位
// dis[3] = i%1000%100%10;    
}
/****************************************************************************
函数功能:数码管显示子程序
入口参数:
出口参数:
****************************************************************************/
void display(void)
{
<!-- --> 
    P0=tab[dis[0]];      //显示个位和小数点11011111
 DIAN=1;
    P2=0xdf;                  //11011111
    delay();   
    P2=0xff;
    P0=tab[dis[1]];       //显示小数点后第一位
    P2=0xbf;                //10111111
    delay();
    P2=0xff;
    P0=tab[dis[2]];       //显示小数点后第二位
    P2=0x7f;              //01111111 
    delay();
    P2=0xff;
}
/****************************************************************************
函数功能:主程序
入口参数:
出口参数:
****************************************************************************/
void main(void)
{
<!-- -->
 unsigned char m;  
 CH = 0x00;       //在这里选择通道 0x00或0x01
 while(1)       //主循环   
 {
<!-- -->
  for(m=0;m<50;m++)
  {
<!-- -->
   dat = adc0832(CH);
   sum=sum+dat;
   display();      //显示数值
  }
  dat=sum/50;
  sum=0;
  convdata(dat);      //数据转换
  display();      //显示数值
 }
}

Tags:51单片机,Proteus,数字电压表  
责任编辑:admin
相关文章列表
基于51单片机的数字电压表(ADC0832)(Proteus仿真+程序)_基于
超声波测距+温度+报警的单片机代码_51单片机超声波测距C语言程序
基于51单片机的SHT11温湿度测量仪设计(源码+仿真+文档)
基于51单片机的恒温控制器系统 protues+keil c
51单片机数码管显示程序, 共阴数码管显示程序 数码管原理(显示
51单片机学习笔记直流电机驱动(PWM)C语言程序
MCU-51单片机直流电机驱动(PWM)51单片机驱动直流电机
先学51还是先学STM32?STM32和51单片机的区别
51单片机和STM32单片机的结构有什么不同
51单片机、AVR单片机和PIC单片机的IO口操作
五款基于icl7107电压表电路图设计详解 数字电压表电路
关于51单片机IO引脚的驱动能力与上拉电阻
51单片机“呼吸灯”程序
51单片机入门之静态数码管电路设计
AT89C51,51单片机1602液晶显示时钟程序
4位单片机数字钟 电子钟制作
51单片机4位数码管电子钟源程序
AT89C2051电脑机箱风扇智能温控仪,AT89C2051 Temperature contro
51单片机温控风扇(含程序+原理图+仿真+PCB)
Proteus7.5仿真8255流水灯原理图
Proteus中示波器使用技巧
51单片机蜂鸣器播放音乐代码
proteus波形发生器怎么用
利用单片机AT89S51与ADC0809设计数字电压表,Voltmeter
单片机制作的纯正弦波逆变器,12V Pure Sine Wave Inverter
Proteus 与单片机实时动态仿真
Proteus 6 Professional 入门教程
用 proteus软件建立单片机仿真虚拟实验室
51单片机00-59秒计时器 0-59s Timer
51单片机按键程序中 while(!key)的作用
请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
1分 2分 3分 4分 5分

还可以输入 200 个字
[ 查看全部 ] 网友评论
    没有任何评论
电子开发网:汇集综合各类电子制作与电路图的网站,plc工控技术,模电数电知识,单片机EDA等等!荟萃电路图网站精华,为工程师创造价值。欢迎关注微信公众号:电子开发网!

三菱PLC软件 GX Wor

西门子200smartPLC选

模拟量转换工程量转

简述555定时器工作原

聊聊阻容降压原理和

硬件知识--比较器电
 简单三极管逆变器
 TL494制作50HZ逆变
 80W简单的功放电路
 555制作的简易电子
 850热风枪电路图原
 直流12v荧光灯电路
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
返回顶部
刷新页面
下到页底
晶体管查询