30、基于51单片机的数字电压表(ADC0809)(Proteus仿真+程序)

news2024/11/24 17:56:06

编号:30

基于51单片机的数字电压表(ADC0809)

功能描述:

      本设计由51单片机最小系统+ADC0809模块+八路路模拟量输入模块+12864显示模块
1、主控制器是89C52单片机
2、ADC0809模数转换器进行A/D转换,读取电压八路数据,电压检测范围0-5V 精度(8位)
3、利用八个个电位器模拟, 模拟量输入,
3、12864液晶屏显示八路通道的电压值

Proteus7.8以上版本均可使用
 

视频演示链接:

30、基于51单片机的数字电压表(ADC0809)

仿真图:

程序源码:

#include "reg52.h"
#include "AMPIRE12864.h"
#include "delay.h"
#include "ADC0809.h"

	
void main(void)
{
	unsigned char adc0,adc1,adc2,adc3,adc4,adc5,adc6,adc7;

	unsigned int Voltage0 = 0.0;
	unsigned int Voltage1 = 0.0;
	unsigned int Voltage2 = 0.0;
	unsigned int Voltage3 = 0.0;
	unsigned int Voltage4 = 0.0;
	unsigned int Voltage5 = 0.0;
	unsigned int Voltage6 = 0.0;
	unsigned int Voltage7 = 0.0;

	delay_ms(100);
	AMPIRE12864_Init();					//AMPIRE12864初始化
	AMPIRE12864_Clear();	
	Timer0Init();						//2毫秒@11.0592MHz
	while(1)
	{		


		adc0 = ADC0809_GetAD(0); 		//通道0 A/D转换 范围0-255
		adc1 = ADC0809_GetAD(1); 		//通道1 A/D转换 范围0-255
		adc2 = ADC0809_GetAD(2); 		//通道2 A/D转换 范围0-255
		adc3 = ADC0809_GetAD(3); 		//通道3 A/D转换 范围0-255
		adc4 = ADC0809_GetAD(4); 		//通道4 A/D转换 范围0-255
		adc5 = ADC0809_GetAD(5); 		//通道0 A/D转换 范围0-255
		adc6 = ADC0809_GetAD(6); 		//通道0 A/D转换 范围0-255
		adc7 = ADC0809_GetAD(7); 		//通道0 A/D转换 范围0-255

		Voltage0 = (long)adc0 * 500/255;		//电压值扩大一百倍 方便显示
		Voltage1 = (long)adc1 * 500/255;		//电压值扩大一百倍 方便显示
		Voltage2 = (long)adc2 * 500/255;		//电压值扩大一百倍 方便显示		
		Voltage3 = (long)adc3 * 500/255;		//电压值扩大一百倍 方便显示		
		Voltage4 = (long)adc4 * 500/255;		//电压值扩大一百倍 方便显示		
		Voltage5 = (long)adc5 * 500/255;		//电压值扩大一百倍 方便显示		
		Voltage6 = (long)adc6 * 500/255;		//电压值扩大一百倍 方便显示		
		Voltage7 = (long)adc7 * 500/255;		//电压值扩大话俦?方便显示


		AMPIRE12864_String_16X8(1,0,0,Char_Logo[14]); 						//显示V
		AMPIRE12864_String_16X8(1,8,0,Char_Logo[0]); 						//显示V
		AMPIRE12864_String_16X8(1,16,0,Char_Logo[13]); 						//:
		AMPIRE12864_String_16X8(1,24,0,Char_Logo[Voltage0%1000/100]);		//显示个位
		AMPIRE12864_String_16X8(1,32,0,Char_Logo[12]);	   					//显示小数点
		AMPIRE12864_String_16X8(1,40,0,Char_Logo[Voltage0%1000%100/10]);	//显示小数点后两位	
		AMPIRE12864_String_16X8(1,48,0,Char_Logo[Voltage0%1000%100%10]);

		AMPIRE12864_String_16X8(1,64,0,Char_Logo[14]); 						//显示V
		AMPIRE12864_String_16X8(1,64+8,0,Char_Logo[1]); 					//显示V
		AMPIRE12864_String_16X8(1,64+16,0,Char_Logo[13]); 					//:
		AMPIRE12864_String_16X8(1,64+24,0,Char_Logo[Voltage1%1000/100]);	//显示个位
		AMPIRE12864_String_16X8(1,64+32,0,Char_Logo[12]);	   				//显示小数点
		AMPIRE12864_String_16X8(1,64+40,0,Char_Logo[Voltage1%1000%100/10]);	//显示小数点后两位
		AMPIRE12864_String_16X8(1,64+48,0,Char_Logo[Voltage1%1000%100%10]);

		AMPIRE12864_String_16X8(1,0,2,Char_Logo[14]); 						//显示V
		AMPIRE12864_String_16X8(1,8,2,Char_Logo[2]); 						//显示V
		AMPIRE12864_String_16X8(1,16,2,Char_Logo[13]); 						//:
		AMPIRE12864_String_16X8(1,24,2,Char_Logo[Voltage2%1000/100]);		//显示个位
		AMPIRE12864_String_16X8(1,32,2,Char_Logo[12]);	   					//显示小数点
		AMPIRE12864_String_16X8(1,40,2,Char_Logo[Voltage2%1000%100/10]);	//显示小数点后两位	
		AMPIRE12864_String_16X8(1,48,2,Char_Logo[Voltage2%1000%100%10]);


		AMPIRE12864_String_16X8(1,64,2,Char_Logo[14]); 						//显示V
		AMPIRE12864_String_16X8(1,64+8,2,Char_Logo[3]); 					//显示V
		AMPIRE12864_String_16X8(1,64+16,2,Char_Logo[13]); 					//:
		AMPIRE12864_String_16X8(1,64+24,2,Char_Logo[Voltage3%1000/100]);	//显示个位
		AMPIRE12864_String_16X8(1,64+32,2,Char_Logo[12]);	   				//显示小数点
		AMPIRE12864_String_16X8(1,64+40,2,Char_Logo[Voltage3%1000%100/10]);	//显示小数点后两位
		AMPIRE12864_String_16X8(1,64+48,2,Char_Logo[Voltage3%1000%100%10]);

		AMPIRE12864_String_16X8(1,0,4,Char_Logo[14]); 						//显示V
		AMPIRE12864_String_16X8(1,8,4,Char_Logo[4]); 						//显示V
		AMPIRE12864_String_16X8(1,16,4,Char_Logo[13]); 						//:
		AMPIRE12864_String_16X8(1,24,4,Char_Logo[Voltage4%1000/100]);		//显示个位
		AMPIRE12864_String_16X8(1,32,4,Char_Logo[12]);	   					//显示小数点
		AMPIRE12864_String_16X8(1,40,4,Char_Logo[Voltage4%1000%100/10]);	//显示小数点后两位	
		AMPIRE12864_String_16X8(1,48,4,Char_Logo[Voltage4%1000%100%10]);


		AMPIRE12864_String_16X8(1,64,4,Char_Logo[14]); 						//显示V
		AMPIRE12864_String_16X8(1,64+8,4,Char_Logo[5]); 					//显示V
		AMPIRE12864_String_16X8(1,64+16,4,Char_Logo[13]); 					//:
		AMPIRE12864_String_16X8(1,64+24,4,Char_Logo[Voltage5%1000/100]);	//显示个位
		AMPIRE12864_String_16X8(1,64+32,4,Char_Logo[12]);	   				//显示小数点
		AMPIRE12864_String_16X8(1,64+40,4,Char_Logo[Voltage5%1000%100/10]);	//显示小数点后两位
		AMPIRE12864_String_16X8(1,64+48,4,Char_Logo[Voltage5%1000%100%10]);

		
		AMPIRE12864_String_16X8(1,0,6,Char_Logo[14]); 						//显示V
		AMPIRE12864_String_16X8(1,8,6,Char_Logo[6]); 						//显示V
		AMPIRE12864_String_16X8(1,16,6,Char_Logo[13]); 						//:
		AMPIRE12864_String_16X8(1,24,6,Char_Logo[Voltage6%1000/100]);		//显示个位
		AMPIRE12864_String_16X8(1,32,6,Char_Logo[12]);	   					//显示小数点
		AMPIRE12864_String_16X8(1,40,6,Char_Logo[Voltage6%1000%100/10]);	//显示小数点后两位	
		AMPIRE12864_String_16X8(1,48,6,Char_Logo[Voltage6%1000%100%10]);


		AMPIRE12864_String_16X8(1,64,6,Char_Logo[14]); 						//显示V
		AMPIRE12864_String_16X8(1,64+8,6,Char_Logo[7]); 					//显示V
		AMPIRE12864_String_16X8(1,64+16,6,Char_Logo[13]); 					//:
		AMPIRE12864_String_16X8(1,64+24,6,Char_Logo[Voltage7%1000/100]);	//显示个位
		AMPIRE12864_String_16X8(1,64+32,6,Char_Logo[12]);	   				//显示小数点
		AMPIRE12864_String_16X8(1,64+40,6,Char_Logo[Voltage7%1000%100/10]);	//显示小数点后两位
		AMPIRE12864_String_16X8(1,64+48,6,Char_Logo[Voltage7%1000%100%10]);

	}
}

软件免费下载地址:

1、Proteus仿真软件
文件内容:Proteus7.8安装包、Proteus8.6安装包、Proteus.8.10安装包、Proteus Professional 8.11 SP0安装包

链接:https://pan.baidu.com/s/11LNUZ9BJXWvXf1C4dPc3_w 
提取码:2756 

2、KEIL4 C51软件安装包

链接:https://pan.baidu.com/s/1CTZBqDsPsyIbjCIjI_birA 
提取码:sy2a 

文件下载:

https://pan.baidu.com/s/1HWxphbZtDhBBfrJZuScazA?pwd=u7cg

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

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

相关文章

现在转行码农的成本已经非常高了,别盲目转行..

转行码农一直是个比较火热的话题,也有很多读者咨询过这个问题,转成功的也不少,比如下面这位香港的同学: 这位朋友半年前就跟我聊过,他不太想干没有技术含量的体力活,一直在坚持自学,这也算如愿…

软件测试基础知识总结(面试临时抱佛脚)

之前有将基础的软件测试知识做了一个总结,但比较潦草,很多内容只是一笔带过,快到年底了,自己也有个写年终知识总结文档的计划,就将基础的理论知识重新整理一番。。。 有人问我,这些都是能搜索到的知识&…

65-82-springcloud-gateway-config-bus

65-82-springcloud-gateway-config-bus: Gateway gateway官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 1、什么是gateway Gateway是在Spring生态系统之上构建的API网关服务,基…

c++引用

1.什么是c引用&#xff1f; 引用是c对c的重要扩充。c中新增了引用的概念&#xff0c;引用可以作为一个已定义变量的别名。 #include "stdafx.h" #include <iostream> using namespace std; // 1.引用的基本使用 void test01(){int a 10;// 给变量a取一个别名…

金仓数据库KingbaseES 归档日志清理

WAL是Write Ahead Log的简写&#xff0c;和Oracle的redo日志类似&#xff0c;在R3版本存放在data/sys_log中&#xff0c;R6版本以后在data/sys_wal目录&#xff0c;在数据库访问过程中&#xff0c;任何对数据块的修改都会记录到wal日志&#xff0c;并写入到wal文件保存到磁盘&a…

PMP有没有必要续证呢?

在还只看到标题的时候&#xff0c;我当时就觉得必须续啊&#xff0c;为什么不续&#xff0c;我花了那么多时间精力和钱财去考的&#xff0c;我自然得去给它续上&#xff0c;不然白拿了&#xff0c;才拿了三年我还没捂热就给我失效了多不值。 首先美国PMI要求PMP证书是三年一换…

面试题 :Unity编辑器基础

1、请描述游戏动画有几种&#xff0c;以及其原理。 关键帧动画&#xff1a;每一帧动画序列当中包含了顶点的空间位置信息以及改变量&#xff0c;然后通过插值运算&#xff0c;得出动画效果。选中某一游戏对象&#xff0c;创建animation&#xff0c;添加属性Transform&#xff0…

【Meetup 预告】OpenMLDB + MaxCompute:集成打通云上生态,高效构建 AI 应用

2022年12月3日&#xff08;周六&#xff09;上午10&#xff1a;00-12:00&#xff0c;开源机器学习数据库 OpenMLDB 第八期 Meetup 将通过线上直播的形式展开。 活动背景 数据的爆发式增长为 AI 应用的繁荣提供了坚实的基础&#xff0c;而云服务作为新一代快速整合、高效计算的…

STC-Seg:首个超越PointTrack的弱监督视频MOTS算法

弱监督视频多目标实例分割新SOTA&#xff08;代码已开源&#xff09;&#xff1a; Paper: Solve the Puzzle of Instance Segmentation in Videos: A Weakly Supervised Framework with Spatio-Temporal Collaboration Code: https://github.com/ylqi/STC-Seg 众所周知&#xf…

linux之syslog使用说明

syslog 系统日志应用 1) 概述 syslog默认的日志守护进程。默认的syslog配置文件是/etc/syslog.conf文件。程序&#xff0c;守护进程和内核提供了访问系统的日志信息。因此&#xff0c;任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成该信息。 几乎所有的网络设…

【2台真机实战--Redis一主一从两哨兵配置集群和主从切换】

2台真机实战--Redis一主一从两哨兵配置集群和主从切换前言实战真实环境节点分布配置主服务器&#xff08;192.168.137.23&#xff09;配置redis.conf配置sentinel.conf从服务器&#xff08;192.168.137.24&#xff09;配置redis.conf配置sentinel.conf启动redis整合SpringBoot配…

[附源码]Node.js计算机毕业设计服装销售商城系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

python之路 socket、socket server

一、socket socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制&#xff0c;取后一种意思。通常也 称作"套接字"&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄&#xff0c;可以用来实现不同虚拟机或不同计算机之间的通信。在Inter…

nodejs+vue大学生企业推荐系统vue

1、 node_modules文件夹(有npn install产生) 这文件夹就是在创建完项目后&#xff0c;cd到项目目录执行npm install后生成的文件夹&#xff0c;下载了项目需要的依赖项。 2、package.json文件 此文件是项目的配置文件&#xff08;可定义应用程序名&#xff0c;版本&am…

Java基础之并发理论基础

Java基础之并发理论基础一、为什么需要多线程二、线程不安全1、三要素之一可见性&#xff08;CPU缓存引起&#xff09;2、三要素之一原子性&#xff08;分时复用引起&#xff09;3、三要素之一有序性&#xff08;重排序引起&#xff09;一、为什么需要多线程 CPU 增加了缓存&a…

springcloud3 EurekaServer集群的搭建1

一 EurekaServer集群搭建 1.1 逻辑流程 服务的注册与发现 服务注册&#xff1a;向注册中心进行注册登记。 服务发现&#xff1a;从注册中心中获取服务器信息。 整个流程 1.首先eurekaServer先进行启动&#xff0c; 2.服务提供者开始启动并将自己的信息注册到EurekaServer上(前…

如何获取java加载器和类完整结构的方法?

类加载器的作用与类缓存&#xff1a; 类加载器的作用&#xff1a;将class文件字节码内容加载到内存中&#xff0c;并将这些静态数据转换成方法区的运行时数据结构&#xff0c;然后在堆中生成一个代表这个类的java.lang.Class对象&#xff0c;作为方法区中类数据的访问入口。 …

红绿灯(交通信号灯)检测数据集

深度学习目标检测&#xff1a;红绿灯(交通信号灯)检测数据集 目录 深度学习目标检测&#xff1a;红绿灯(交通信号灯)检测数据集 1.红绿灯数据集说明 &#xff08;1&#xff09;Traffic-Lights-Dataset-Domestic &#xff08;2&#xff09;Traffic-Lights-Dataset-Foreign …

第12部分 交换机基本配置

目录 12.1 交换机简介 12.2 实验1&#xff1a;交换机基本配置 1.实验目的 2.实验拓扑 3.实验步骤 12.3 实验2&#xff1a;交换机端口安全 1.实验目的 2.实验拓扑 3.实验步骤 4.实验调试 12.4 实验3&#xff1a;交换机的密码恢复 1.实验目的 2.实验拓扑 3.实验步骤…

React学习8(新旧生命周期)

组件的生命周期&#xff08;旧&#xff09; react生命周期&#xff08;旧&#xff09; 1.初始化阶段&#xff1a;由ReactDOM.render()触发---初次渲染 1.constructor(){} 2.componentWillMount() {} 3.render() {} 4.componentDidMount() {}----常用&#xff0c;一般在这个钩子…