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

一、实验名称

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;
    	}
    }
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

管理信息系统知识点复习

目录 一、名词解释题1.企业资源规划(ERP)2.面向对象方法&#xff1a;3.电子健康&#xff1a;4.供应链5.数据挖掘6.“自上而下”的开发策略&#xff1a;7.业务流程重组8.面向对象&#xff1a;9.决策支持系统10.聚类11.集成开发环境&#xff1a;12.供应商协同13.数据仓库14.深度学…

pytorch集智-6手写数字加法机-迁移学习

1 概述 迁移学习概念&#xff1a;将已经训练好的识别某些信息的网络拿去经过训练识别另外不同类别的信息 优越性&#xff1a;提高了训练模型利用率&#xff0c;解决了数据缺失的问题&#xff08;对于新的预测场景&#xff0c;不需要大量的数据&#xff0c;只需要少量数据即可…

STM32407用汇顶的GT911触摸芯片调试实盘

这个配置很关键 代码 #include "stm32f4xx.h" #include "GT9147.h" #include "Touch.h" #include "C_Touch_I2C.h" #include "usart.h" #include "delay.h" #include "LCD.h" #incl…

Java String基础学习

目录 1、String的构造方法 2、String内存模型 3、字符串的比较 4、字符串的练习 1、用户登录系统 2、遍历字符串 3、统计字符次数 4、拼接字符串 5、字符串的反转 6、金额转换 7、手机号屏蔽 * 8、身份证信息查看 9、敏感词替换 5、StringBuilder 1、概念及练习…

新手也能看懂的【前端自动化测试入门】!

前言 最近在网上搜索前端自动化测试相关的文档&#xff0c;但是发现网上的文章都是偏使用&#xff0c;没有把一些基础概念说清楚&#xff0c;导致后续一口气遇到一些karma、Jasmine、jest、Mocha、Chai、BDD等词汇的时候很容易一头雾水&#xff0c;这次一方面整理一下收获的知…

YOLOv8改进 | 进阶实战篇 | 利用YOLOv8进行视频划定区域目标统计计数

一、本文介绍 Hello,各位读者,最近会给大家发一些进阶实战的讲解,如何利用YOLOv8现有的一些功能进行一些实战, 让我们不仅会改进YOLOv8,也能够利用YOLOv8去做一些简单的小工作,后面我也会将这些功能利用PyQt或者是pyside2做一些小的界面给大家使用。 在开始之前给大家推…

解决Spring Boot跨域问题(配置JAVA类)

什么是跨域问题 跨域问题指的是不同端口之间&#xff0c;使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制&#xff0c;它是为了保证用户的安全&#xff0c;防止恶意网站窃取数据。 比如前端用的端口号为8081&#xff0c;后端用的端口号为8080&#xff0c;后…

Linux下安装docker

1、查看系统版本 Docker支持64位版本的CentOS 7和CentOS 8及更高版本&#xff0c;它要求Linux内核版本不低于3.10。查看Linux版本的命令这里推荐两种&#xff1a;lsb_release -a或cat /etc/redhat-release。 显然&#xff0c;当前Linux系统为CentOS7。再查一下内核版本是否不低…

SpringBoot+dynamic-datasource实现多数据源(msyql、sqlserver、postgresql)手动切换

场景 SpringBootMybatisPlusdynamic-datasources实现连接Postgresql和mysql多数据源&#xff1a; SpringBootMybatisPlusdynamic-datasources实现连接Postgresql和mysql多数据源-CSDN博客 上面实现通过注解和配置文件的方式去进行多数据源操作。 如果业务需求&#xff0c;比…

Ubuntu安装最新版Docker和Docker-Compose

ubuntu环境搭建专栏&#x1f517;点击跳转 Ubuntu系统环境搭建&#xff08;十&#xff09;——Ubuntu安装最新版Docker和Docker Compose 文章目录 Ubuntu系统环境搭建&#xff08;十&#xff09;——Ubuntu安装最新版Docker和Docker Compose1.添加Docker库1.1 安装必要的证书并…

PostgreSQL命令大全

文章目录 连接与退出数据库操作表操作外键约束视图操作存储过程与函数权限管理事务管理查询优化与分析数据类型转换分区表操作复制与备份恢复 PostgreSQL是一个功能强大的开源关系型数据库管理系统&#xff0c;以下是一些基本且常用的命令按功能分类&#xff1a; 连接与退出 连…

【前端设计】流光按钮

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 css body{height: 100vh;display: flex;justify-content: center;align-items: center;background…

HarmonyOS鸿蒙学习基础篇 - 项目目录和文件介绍

├── hvigor //存储购置信息的文件&#xff0c;主要用于发布打包 ├── idea //开发工具相关配置可忽略 ├── AppScope //工程目录 全局公共资源存放路径 │ └── resources │ │ └── base │ │ │ └── element //常亮存放 │ │ │ …

Windows安装WSL2精简版教程

文章目录 一、安装WSL二、更改WSL的存放路径/备份WSL三、安装WSL Terminall四、WSL界面&#xff1a;xlaunch五、WSL1升级WSL2六、WSL2与VMware兼容问题七、更改手动导入的wsl的默认登录用户参考 一、安装WSL 步骤1 - 启用适用于 Linux 的 Windows 子系统&#xff1a; 需要先启…

格局打开!前端未死,只是要求变高了

本文笔者会从以下几个方面分享&#xff0c;希望能够帮助正在迷茫的前端小伙伴提供一点思路&#xff01; 逛技术博客 不局限框架 全栈工程师兴起 关注前沿 写技术文章 录制前端视频 总结 2024年了&#xff0c;没工作的找到工作了吗&#xff1f;有工作的加薪了吗&#xff1f;加薪…

UI设计中的插画运用优势(上)

1. 插画是设计的原创性和艺术性的基础 无论是印刷品、品牌设计还是UI界面&#xff0c;更加风格化的插画能够将不同的风格和创意加入其中&#xff0c;在激烈的竞争中更容易因此脱颖而出。留下用户才有转化。 2. 插画是视觉触发器&#xff0c;瞬间传达大量信息 我们常说「一图胜千…

Unity3D学习之Unity基础

文章目录 1. 第一部分&#xff1a;MONO中的重要内容2. 延时函数2.1 什么是延时函数2.2 延时函数的使用2.2.1 延时重复函数2.2.2 取消延迟函数2.2.3 判断是否有延迟函数开启2.2.4 延迟函数和依附对象的关系 3 协同程序3.1 Unity中的多线程3.2 协同程序3.3 协程的使用3.3.1 关闭协…

Jetson Orin Nano安装OpenCV带cuda加速版本的全过程

安装过程 使用jetpack安装的jetson&#xff0c;自带了opencv&#xff0c;但是没有cuda加速的&#xff0c;输入opencv_version 使用jtop查看&#xff0c;可以确认自带的opencv是没用cuda的 卸载opencv&#xff0c;先查看有哪些包 pip3 list | grep opencv opencv-python 然后卸…

从规则到神经网络:机器翻译技术的演化之路

文章目录 从规则到神经网络&#xff1a;机器翻译技术的演化之路一、概述1. 机器翻译的历史与发展2. 神经机器翻译的兴起3. 技术对现代社会的影响 二、机器翻译的核心技术1. 规则基础的机器翻译&#xff08;Rule-Based Machine Translation, RBMT&#xff09;2. 统计机器翻译&am…

文献分享四:(基础)Pyroelectric drift of integrated-optical LiNbO3 modulators

文献来源——S. M. Kostritskii, Yu. N. Korkishko, V. A. Fedorov & A. V. Yatsenko (2021) Pyroelectric drift of integrated-optical LiNbO3 modulators, Ferroelectrics, 574:1, 170-178, DOI: 10.1080/00150193.2021.1888062 本文分析了我们之所以需要偏置电路的原因…