单路电压表c语言编程,用AT89C51单片机制作的数字电压表

此数字电压表,利用A/D转换原理将被测模拟量转换成数字量,并通过控制系统用数字方式显示测量结果。本设计采用AT89C51单片机,ADC0809进行模/数转换,能够测量8路0~5V的输入电压值,可用四位LED数码管轮流或单路显示测量结果。其最小分辨率约为0.019V,测量误差小于0.02V。

一、系统简介

本系统分为主控电路、显示电路、A/D转换电路、键盘控制电路、电源电路及复位电路等,系统框图如右图所示。

二、硬件电路设计

本系统采用AT89C51单片机作为控制核心,对8路模拟电压信号经8位A/D转换芯片ADC0809转换成数字信号后,送单片机进行处理,然后通过数码管显示其电压值。电路原理见上图。

859c0aa28fee16a77e8918de251af659.gif

ADC0809有8路模拟输入口IN0~IN7,通过地址线(23)~(25)脚选择其中一路进行A/D转换。

(22)脚为地址锁存控制,高电平有效。⑥脚为测试控制,当输入一个2μs正脉冲时,启动A/D转换。⑦脚为A/D转换结束标志,当A/D转换结束时,⑦脚输出高电平。⑨脚为A/D转换数据输出允许控制端,当⑨脚为高电平时,A/D转换数据从MSB2-1~MSB2-8输出。⑩脚为时钟输入端,利用单片机ALE脚的六分频再通过74LS74构成的四分频得到500kHz时钟。

AT89C51的P2、P0.4~P0.7口作为数码管显示控制,采用动态显示方式显示测量的数字电压值和通道号。P0.0口用作单路显示/循环显示转换按钮,P0.1口用作单路显示时通道选择按钮。

P1口作A/D转换数据输入,P3.0-P3.6口用作ADC0809的控制。

三、系统软件设计

本系统软件由显示控制子程序、显示数据处理子程序、8路电压采集子程序、键盘处理子程序等组成,采用汇编语言编程。

1.主程序流程如左图所示。

77758b0393eb1202d647294f10c59335.gif

2.显示控制子程序

测量的A/D转换数据放在RAM70H~77H中,测量数据转换成的BCD码放在7AH~7DH中。

20H.0为显示方式标志位,21H存放通道标志数。R4用作8路循环控制,R0用作显示通道原始数据地址指针,R1为处理后的四位显示数据地址指针。程序通过测试20H.0来确定采用8路循环显示还是单通道显示。循环显示时每通道显示约2s。数字电压值是通过查表方式采用动态扫描法实现的。其程序流程如中图所示。

3.键盘处理子程序

本设计采用2个功能键和1个硬复位键。2个功能键接在P0.0与P0.1口上。对功能键的处理采用测试端口并设置标志的方法,使用了延时去抖处理。键盘按下时,还可以显示通道号码,松开后才显示测量电压值。循环显示时,通道号显示为“0”;单通道显示号码为0~8。

4.八路电压采集子程序

单片机为ADC0809提供所需的控制时序,采集到的八路电压数据分别存放在单片机RAM70H~77H中。程序流程如下图。

5.显示数据处理子程序

放在AT89C5170H~77H中的对应电压值数据必须转换成相应的BCD码后才能送数码管显示。由于本系统中ADC0809的参考电压VREF=VCC,所以最大测量电压5V所对应的二进制数就是FFH,而每伏电压对应的二进制数为33H。其处理方法是,用转换后的数据除以33H,得到的商即为电压值的个位数。余数×5后再除以33H得到的商×2即为电压值的十分位数。所余之数×2后再进行一次×5÷33H得到的商×2即为电压值的百分位数。同理可得到千分位数。最后进行四舍五入处理,若千分位处理后的余数大于19H即千分位加1。四舍五入处理后需要对各位进行进位调整。调整后的个位、十分位、百分位、千分位分别存入7AH~7DH中。

7d999fc148577a287dd7e8603d1e21b5.png

64d1fc2da8567d98ce4f38f881092a8c.gif

5e0742dfadfa0a84160272f95682009e.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZK的实际应用:MVVM –加载和渲染数据

先前的文章简要介绍了RIA框架ZK,以及它CSS Selector启发式控制器机制如何通过使在控制器类中引用UI组件的任务变得相对灵活来减轻UI更改所带来的一些负担。 然后,我们在上一篇文章中探讨了ZK中的MVVM模式如何允许单个ViewModel提供不同的视图。 这篇文章…

搭建一个简单的mybatis框架

一、Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Pla…

c语言空格符 r t,c语言中、\t \r \n 和空格什么意思

具体意思:都是转义字符,空格就是单纯的空格,输入时可以输入空格\t 跳格 \r 回车 \n 换行\\ 反斜杠 \a 警告 \b 退格 \f 换页 \v 垂直跳格 \ddd ddd 是 1、2 或 3 位八进制数字。转义字符串(Escap…

在代理类中引用动态代理

在Stackoverflow中有一个有趣的问题 ,关于Spring Bean如何获​​得对由Spring创建的代理的引用以处理事务,Spring AOP,缓存,异步流等。需要对代理的引用,因为如果存在对自身的调用通过代理bean,此调用将完全…

android仿高德地图透明黑字,Android 仿高德地图可拉伸的BottomSheet

原标题:Android 仿高德地图可拉伸的BottomSheet2018安卓巴士开发者大会-上海站你一直期待的安卓技术盛宴即将登场!前言最近项目中需要用到高德地图搜索结果后的结果展示的可拉伸控件。而我看到这个效果图,觉得这个就是一个slidingpanel&#…

[ Javascript ] JavaScript中的定时器(Timer) 是怎样工作的!

作为入门者来说。了解JavaScript中timer的工作方式是非常重要的。通常它们的表现行为并非那么地直观,而这是由于它们都处在一个单一线程中。让我们先来看一看三个用来创建以及操作timer的函数。var id setTimeout(fn, delay); - 初始化一个单一的timer&#xff0c…

Android 软键盘自动弹出和关闭

在我们写修改信息或者搜索,修改密码等界面的时候,用户进入这个界面的主要目的就是输入修改/查找 某些信息,为了用户体验应该自动弹出软键盘而不是让用户主动点击输入框才弹出。 1.软键盘的自动弹出 private void showKeyboard(){InputMethodM…

android adb杀死服务,Android app是如何杀掉的

1. adb shell kill -9 pid_of_appAMS定义了AppDeathRecipientAPP 在 attachApplication -> attachApplicationLockedAMS里会注册 App 进程的 BinderDeath通知AppDeathRecipient adr new AppDeathRecipient(app, pid, thread);thread.asBinder().linkToDeath(adr, 0);当App进…

iOS学习笔记39-ReactiveCocoa入门

FRP,全称为Functional Reactive Programming,是一种响应变化的编程范式,最近几年比较火,大概的理解就像这样: 当a的值或者b的值发生变化时,c的值会自动响应a的值或b的值变化的信号,自动更正自己…

使用密码摘要生成器扩展JMeter

最近,我不得不处理一个带有50,000条用户记录的OpenLDAP实例,并进行一些压力测试。 JMeter是填充LDAP的最佳选择。 但是,在我的情况下,OpenLDAP配置为不接受任何明文密码。 因此,我无法使用通过JMeter LDAP Request采…

制造业数字化转型核心不止是技术

一、制造业的数字化转型意味着什么? 在当今的制造业领域,数字化转型意味着通过集成数字技术来增强传统的制造方法、产品和劳动力的过程。这些技术包括一系列创新,如自动化软件、电子商务系统、传感器、工业机器人等。 二、制造业数字化转型的…

5分钟内Google App Engine上的Vaadin App

在本教程中,您将学习如何创建第一个Vaadin Web应用程序,如何在本地AppEngine开发服务器上运行它以及如何将其部署到Google App Engine基础结构。 所有这些大约需要5到10分钟。 是的,如果您安装了必要的先决条件,则可以立即开始运行…

android8强制将app移到sd卡,小内存手机 APP强制转移至SD卡教程

虽然近两年手机的机身内存越做越大,但是身边总还是有些朋友在使用几年前的手机。而面对如今海量的丰富应用,早年的手机中内置的存储空间已经开始捉襟见肘。虽说对于这类机型系统通常都提供了将APP转移至外置内存卡的功能,可是依然有一些顽固的…

android 书架菜单,Android入门3--做一个书架

修改名称创建项目的时候,APP的名字取为英文或者拼音,是为了简便,但是显示在界面上,我们当然希望它是中文的。taoguanstring>我们要做的很简单,就是在string.xml中,将app_name的内容修改为我们希望的名字…

第一节:整体介绍

Python版本3.5.2,Django版本1.10 创建一个Django工程,并且生成一个名字为mainsite的app django-admin.py startproject myblog python3 manage.py startapp mainsite 文件结构如下: x-powerxpower-CW65S:~/chen/myblog$ tree ./ ./ ├── ma…

REST + Spring Security会话问题

REST , 会话 ..等待。 REST应用程序中没有会话,对吗? 好吧,那是真的。 如果我们可以避免会议,我们应该这样做。 REST是无状态的 。 有关无状态性的主要问题是身份验证。 在通常的Web应用程序中,我们习惯于在…

HarmonyOS硬件创新合作伙伴,【HarmonyOS】HarmonyOS智能硬件开发学习指南 - HDC2020

2020年9月10日,华为HarmonyOS 2.0版本正式官宣!这一次,借助 HarmonyOS 全场景分布式系统和设备生态,将定义全新的硬件、交互和服务体验,打开焕然一新的全场景世界,不愧是HarmonyOS! 那HarmonyOS…

Android 颜色大全color.xml

使用方法&#xff1a; 将color.xml文件拷到res/values目录下后我们只需要R.xml文件名称.name名称就可以调用了(例如:R.color.red) <?xml version"1.0" encoding"utf-8"?><resources> <color name"white">#FFFFFF</color&…

鸿蒙系统华为论坛,2020中国汽车论坛上 华为三大鸿蒙车载OS系统

在今天的2020中国汽车论坛上&#xff0c;华为公布了三大鸿蒙车载OS系统&#xff0c;同时还宣布已经有大量合作伙伴基于鸿蒙OS进行开发。根据智能汽车解决方案BU总裁王军所说&#xff0c;这三大鸿蒙OS分别是——鸿蒙座舱操作系统HOS、智能驾驶操作系统AOS和智能车控操作系统VOS&…

只读ViewObject和声明性SQL模式

介绍 声明式SQL模式被认为是基于实体的视图对象的最有价值的优点之一。 在此模式下&#xff0c;根据UI中显示的属性在运行时生成VO的SQL。 例如&#xff0c;如果某个页面包含一个只有两列EmployeeId和FirstName的表&#xff0c;则查询将生成为“从Employees中选择Employee_ID&a…