【51单片机Keil+Proteus8.9+ADC0804】ADC实验 模拟转数字实验

news2024/9/21 4:27:48

一、实验名称

ADC实验 模拟转数字实验

二、设计思路

电路设计

1.选用AT89C51单片机作为电路核心单元,外接8位单通道AD转换器ADC0804芯片和LM016L显示器以及滑动变阻器等其它常用元器件构成电路。

2.将ADC0804芯片的控制引脚RD,WR,INTR接到AT89C51芯片对应引脚,再将ADC0804电压输入引脚接到滑动变阻器上,作为输入的模拟电压,最后将其数据引脚DB0至DB7接到AT89C51芯片上。

3.将AT89C51单片机所选引脚与LCD控制引脚相连,再将数据通过引脚与LCD接收引脚相连。

代码设计:

1.对AT89C51单片机所用引脚进行定义。

2.构造基本的功能函数:延时函数delay()、LCD控制函lcd_cmd()、LCD数据函lcd_data()、显示函数display()。

3.主函数:先将芯片的引脚和LCD屏幕进行初始化,然后循环执行以下操作:首先进行模拟信号到数字信号的转换,待转换完成之后打开读信号引脚,将转换完成的数据读入芯片,然后将数据的每一位分割出来,关闭读引脚打开写引脚,将每一位依次显示在LCD显示器上,关闭写引脚。

三、原理图

1.将芯片代码进行编译测试,结果正确无任何错误。

  1. 将编译之后的HEX文件加载到芯片内,进行软件仿真。当电阻取值为100%、50%、0% 三个节点时所对应的数值应为255、128、0,由仿真结果显示正确无误。
  2. 电阻为100%:
  3. 电阻为50%:
  4. 电阻为0%:
  5. 六、软件源码

    C语言代码:

    #include<reg51.h>

    sfr mydata = 0x90;

    sbit rd= P2^5;

    sbit wr= P2^6;

    sbit intr= P2^7;

    sbit RS = P2^0;

    sbit EN = P2^1;

     //(0x90)is address of port1, else you can write as : #defintre mydata P1

    void delay(int n)

    {

    int i,j;

    for(i=0;i<n;i++)

    for(j=0;j<255;j++);

    }

    void lcd_cmd(char a)

    {

    P3 = a;

    RS = 0;

    EN = 1;

    delay(10);

    EN = 0;

    }

    void lcd_data(char a)

    {

    P3 = a;

    RS = 1;

    EN = 1;

    delay(10);

    EN = 0;

    }

    void display(char *ptr)

    {

    while(*ptr != '\0')

    {

    lcd_data(*ptr);

    ptr++;

    }

    }

    void main()

    {

    unsigned char value;

    char temp[4];

    int i=0;

    lcd_cmd(0x01); //clear screen

    lcd_cmd(0x0E); //Display On, Cursor Blinking

    lcd_cmd(0x38); //2 lines and 5*7 matrix

    lcd_cmd(0x80); //Force Cursor to beginning of first line

    display("ADC Value=");

    lcd_cmd(0xC0); //Force Cursor to beginning of second line

    //mydata = 0xEF;

    intr = 1;

    rd = 1;

    wr = 1;

    while(1)

    {

    i = 0;

    while(intr == 1);

    rd = 0;

    value = mydata;

    while(i < 3)

    {

    temp[i] = (value % 10) + '0';

    value = value / 10;

    i++;

    }

    for (i = 2; i >= 0; i--)

    {

    lcd_cmd(0x06); //Force Cursor to the next address(move to right)

    lcd_data(temp[i]);

    }

    rd = 1;

    delay(100);

    lcd_cmd(0xC0); //Force Cursor to beginning of second line

    wr = 0;

    wr = 1;

    }

    }

    六、软件源码
    C语言代码:
    #include<reg51.h>
    sfr mydata = 0x90;
    sbit rd= P2^5;
    sbit wr= P2^6;
    sbit intr= P2^7;
    sbit RS = P2^0;
    sbit EN = P2^1;
     //(0x90)is address of port1, else you can write as : #defintre mydata P1
    
    void delay(int n)
    {
    	int i,j;
    	for(i=0;i<n;i++)
    	for(j=0;j<255;j++);
    }
    void lcd_cmd(char a)
    {
    	P3 = a;
    	RS = 0;
    	EN = 1;
    	delay(10);
    	EN = 0;
    }
    
    void lcd_data(char a)
    {
    	P3 = a;
    	RS = 1;
    	EN = 1;
    	delay(10);
    	EN = 0;
    }
    
    void display(char *ptr)
    {
    	while(*ptr != '\0')
    	{
    		lcd_data(*ptr);
    		ptr++;
    	}
    }
    void main()
    {
    	unsigned char value;
    	char temp[4];
    	int i=0;
    	lcd_cmd(0x01); //clear screen
    	lcd_cmd(0x0E); //Display On, Cursor Blinking
    	lcd_cmd(0x38); //2 lines and 5*7 matrix
    	lcd_cmd(0x80); //Force Cursor to beginning of first line
    	display("ADC Value=");
    	lcd_cmd(0xC0); //Force Cursor to beginning of second line
    	//mydata = 0xEF;
    	intr = 1;
    	rd = 1;
    	wr = 1;
    	while(1)
    	{
    		i = 0;
    		while(intr == 1);
    		rd = 0;
    		value = mydata;
    		while(i < 3)
    		{
    			temp[i] = (value % 10) + '0';
    			value = value / 10;
    			i++;
    		}
    		for (i = 2; i >= 0; i--)
    		{
    			lcd_cmd(0x06); //Force Cursor to the next address(move to right)
    			lcd_data(temp[i]);
    		}
    		rd = 1;
    		delay(100);
    		lcd_cmd(0xC0); //Force Cursor to beginning of second line
    		wr = 0;
    		wr = 1;
    	}
    }
    

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

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

相关文章

双指针(JAVA语言)

目录 力扣283.移动零 力扣1089复写零&#xff08;难度较大&#xff0c;要重点理解&#xff0c;可以记不住咋写&#xff0c;但要记住想法&#xff09; 力扣202题快乐数 力扣11题.盛最多水的容器&#xff08;好写代码&#xff0c;方法不好想) 力扣283.移动零 public static voi…

第一部分 概述

目录 一、计算机网络在信息时代的作用 大众熟悉的三大类网络有 Internet 互连网与互联网的区别 可以从两种不同的方面来认识互联网&#xff1a; 互联网在生活中的地位 互联网 互联网负面影响 二、互联网的概述 网络的网络 基本概念 互连网基础结构发展的三个阶段 万维网www(…

未来 AI 可能给哪些产业带来哪些进步与帮助?

AI时代如何要让公司在创新领域领先吗&#xff1f;拥抱这5种创新技能&#xff0c;可以帮助你的公司应对不断变化。包括人工智能、云平台应用、数据分析、 网络安全和体验设计。这些技能可以帮助你提高业务效率、保护公司知识资产、明智决策、满足客户需求并提高销售额。 现在就加…

使用.NET API 中的 EventCounters进行指标监控

写在前面 为了实现轻量级、跨平台、准确实时的性能指标收集&#xff0c;从 .NET Core 3.0 版本开始引入 EventCounters API。除了 .NET 运行时提供的 EventCounters 外&#xff0c;还可以实现自定义的 EventCounters。 以便跟踪各种指标&#xff0c;EventCounters 作为 EventS…

比亚迪50亿重拳出击,建全球首个全地形赛车场,到底闹哪样?

比亚迪这是在悄无声息中准备的一击重拳吗&#xff1f;新建赛车场背后&#xff0c;到底藏着什么不为人知的战略目的&#xff1f;它是否再次玩转行业规则&#xff0c;一举带动整车文化的更深度发展&#xff1f;作为一直以来重视技术和长远规划的比亚迪来说&#xff0c;这里面肯定…

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体 文章目录 【C语言】- 设置控制台标题、编码、文字颜色、大小和字体1 - 设置控制台标题2 - 设置控制台编码3 - 设置控制台字体和大小参考链接 1 - 设置控制台标题 因为要用到 Windows API&#xff0c;所以需要包含头文件…

【谭浩强C程序设计精讲 chap4】选择结构程序设计

文章目录 第4章 选择结构程序设计一、用 if 语句实现选择结构二、用 switch 语句实现多分支选择结构三、条件运算符和条件表达式 第4章 选择结构程序设计 一、用 if 语句实现选择结构 一般形式&#xff1a; if (表达式)  语句1 [ else  语句2 ] 其他形式&#xff0c;常用的…

Linux 批量添加 known_hosts

前言 我们在做完linux ssh 免密登录后&#xff0c;通常会执行一些自动化任务&#xff08;比如启动Spark集群&#xff09;&#xff0c;也就是需要ssh到每台节点执行相同命令。但是有一个问题就是如果 known_hosts 文件中不存在这个ip的话&#xff0c;在第一次连接时会弹出确认公…

Unity常用的优化技巧集锦

Unity性能优化是面试的时候经常被问道的一些内容&#xff0c;今天给大家分享一些常用的Unity的优化技巧和思路&#xff0c;方便大家遇到问题时候参考与学习。 对啦&#xff01;这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白&#xff0c;也有一些正在从事游…

傲空间私有部署Windows指南

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 安装 docker 请下载对应的 Docker&#xff0c;安装完成后启动。 Docker Desktop for Windows…

【Redis配置】Linux下的Redis安装配置

压缩包方式的Redis下载与安装 进入官网 Redis官网&#xff1a;https://redis.io/download/ 往下翻可以找到其他版本的Redis&#xff0c;或者访问https://download.redis.io/releases/查找自己所需Redis版本。 下载自己所需版本 此处我选择下载的是6.2.14版本 上传到Linux…

Crow:实现点击下载功能

Crow:设置网站的index.html-CSDN博客 讲述了如何完成一个最简单的网页的路由 很多网页提供了下载功能,怎么实现呢,其实也很简单。 假设网页的目录结构如图 $ tree static static ├── img │ └── goodday.jpg └── index.html //index.html <html> <body&…

VMnet1、VMnet8到底是什么?

VMnet1、VMnet8到底是什么&#xff1f; 当我们安装VMware Workstation后&#xff0c;在宿主机(物理电脑)上会多出两个网卡VMNet1、VMNet8。 VMnet1和VMnet8是两个虚拟网卡&#xff0c;主要作用是让虚拟机可以通过你的宿主机的网线上网。 VMnet1是为host-only方式服务的&#x…

CSS实现平行四边形

1、为什么实现平行四边形 在日常开发过程中&#xff0c;有些时候我们可以会遇到一种情况&#xff0c;如可视化大屏中要求我们横线实现对应的进度条&#xff0c;但进度条的内容是由无数个平行四边形组装类似于进度条的形式&#xff0c;那么我们就需要使用CSS来进行对应的实现。 …

后台管理系统: 数据可视化基础

数据可视化简单理解&#xff0c;就是将数据转换成易于人员辨识和理解的视觉表现形式&#xff0c;如各种 2D 图表、3D 图表、地图、矢量图等等。 例如Excel等等 canvas <canvas> 标签只是图形容器&#xff0c;相当于一个画布&#xff0c;canvas 元素本身是没有绘图能力…

内存那点事:让我们一点点的搞懂它

内存是计算机系统中至关重要的组成部分&#xff0c;它不仅储存了运行中的程序和数据&#xff0c;还直接关系到系统的性能和稳定性。让我们一起深入探讨Linux系统下内存管理的核心原理&#xff0c;揭开它的神秘面纱。 基础概念 物理地址 概念&#xff1a;物理地址是指计算机内…

一个关于自动化工具的操作手册

整体 整个软件由首页、设计页构成 首页 按钮功能 清除缓存&#xff1a;主要为了避免线程占用的问题&#xff0c;端口占用无法重新执行。所以操作执行任务、修改任务、新建任务没有响应时&#xff0c;可以操作该事件新建任务&#xff1a;顾名思义就是创建一个网页自动化任务执…

世界上真的存在比苹果品质还好的笔记本电脑吗?

苹果笔记本电脑的品质一直是业界标杆&#xff0c;但它真的是最好的吗&#xff1f;答案是肯定的&#xff0c;但也要看你怎么定义“好”。为什么mac那么贵&#xff0c;还有很多人买&#xff1f;探索高性能的Mac系列&#xff0c;包括 MacBook Pro、Mac Studio和Mac Pro&#xff0c…

后台管理系统: spu管理模块

spu管理模块业务 spu 可以理解为类 例如 people类【spu】 sku可以理解为实例 例如&#xff1a;小明 18 男 spu跟sku可以理解为类跟多个实例的关系 spu管理模块静态 <template><div><el-card style"margin: 20px 0px"><CategorySelect get…

视频剪辑技巧:一键批量制作画中画视频的方法,高效提升剪辑任务

在数字媒体时代&#xff0c;视频剪辑已成为一项重要的技能。无论是专业的影视制作&#xff0c;还是日常的社交媒体分享&#xff0c;掌握视频剪辑技巧都能为内容增色不少。下面来看云炫AI智剪如何高效的剪辑视频技巧&#xff1a;一键批量制作画中画视频的方法&#xff0c;帮助您…