51单片机ADC0804的使用
实际电路接线
我们需要ad转化的时候 ,分两步走,先启动转化,再读取输出的数字量
阅读手册时序图
开始编写驱动文件adc0804.c和adc0804.h如下
#include "ad0804.h"void adc_start()
{CS=1;WR=1;CS=0;WR=0;delay(1);WR=1;delay(1);CS=1;
}void adc_read()
{RD=1;CS=1;CS=0;_nop_();RD=0;delay(10);
}float adc_getVoltage()
{float voltage;uchar temp;adc_start();adc_read();/*如果v0+v1*x+……会报错,只能分开写了*/temp = v0==0? (v1*2+v2*4+v3*8+v4*16+v5*32+v6*64+v7*128):(v1*2+v2*4+v3*8+v4*16+v5*32+v6*64+v7*128)+1;voltage=(float)temp/256*4.84;return voltage;
}
#include "public.h"
#ifndef AD0804_H
#define AD0804_Hsbit weila=P2^7;
sbit RD=P3^7;
sbit WR=P3^6;
sbit CS=P0^7;sbit v0=P1^0;
sbit v1=P1^1;
sbit v2=P1^2;
sbit v3=P1^3;
sbit v4=P1^4;
sbit v5=P1^5;
sbit v6=P1^6;
sbit v7=P1^7;void adc_start(); //启动ad采样
void adc_read(); //ad读取
float adc_getVoltage(); //返回adc电压值#endif
其中public.h文件内容如下
#ifndef _PUBLIC_H
#define _PUBLIC_H
#include <STC12C5A60S2.H>
#include "intrins.h"
#ifndef uchar
#define uchar unsigned char
#endif#ifndef uint
#define uint unsigned int
#endifvoid delay(uint c);#endif
然后是main.c
#include "public.h"
#include "ad0804.h"
#include "uart.h"uchar buf[100];
void main()
{float v;UartInit();while(1){v=adc_getVoltage();if(v!=adc_getVoltage()) //若ad采样电压值发生变化,则在串口打印{sprintf(buf,"检测电压值:%.2f V\r\n",adc_getVoltage());printf(buf);}}
}
效果为转动滑动变阻器,串口打印电压,若不转动,串口不产生输出。经过电压表检测,串口打印电压值与实际值误差约3%
这里用到的串口打印函数,可以看我另一篇关于串口的博客,里面有完整代码
(130条消息) 51单片机串口的使用_犹是春闺梦里人的博客-CSDN博客
51单片机ADC0804的使用相关推荐
- adc0804模数转换实验报告_51单片机ADC0804模数转换学习
51 单片机 ADC0804 模数转换学习 数模转换器 ADC0804 与单片机连接的原理图: 这 TX-1C 实验板上的 ADC0804 和单片机连接的电路原理图. 左边的是 ADC0804 ,右边 ...
- adc0804模数转换实验报告_ADC0804 模数转换51单片机程序+电路图
51单片机驱动 adc0804模数转换 ,下面是电路图 #include #include "lcd.h" #include #define uint unsigned int # ...
- 51单片机—基于PT100温度变送器的温度检测装置(ADC0804)
一.前言 在我们学习51单片机的过程中,提到温度测量,很多同学的第一反映一定是DS18B20温度传感器.DS18B20是一款物美价廉且十分简单的传感器,它的体积小,测量精度高,使得其成为很多同学的选择 ...
- 基于51单片机的只能电子温度计硬件系统
基于51单片机的智能电子温度计硬件系统 使用Pt100传感器:四位LCD显示实时温度值:4个按键用于设置上下限温度值:上下限超限声音报警,报警值可随时设置:设置的报警值能保存在EEPROM中:实时温度 ...
- 基于51单片机的简易太阳能追踪系统
基于51单片机的简易太阳能追踪系统Proteus仿真如图所示. 系统主控核心为AT89C51单片机: 动作执行部分为两个0-360度舵机: 4个电位器模拟光敏电阻检测阵列: 模拟电压采集部分使用74H ...
- 基于51单片机的光照强度检测系统
一.硬件方案 本设计采用单片机作为数据处理与控制单元,为了进行数据处理,通过光敏电阻来感应光强弱变化,经过ADC0804转换,直接将数字信号送入到单片机中进行数据处理.单片机数据处理之后,将光照强度发 ...
- 单片机原理与实践学习记录之51单片机I/O口简单应用
单片机原理与实践学习记录 第二课(更新时间:2021.9.3) 51单片机I/O口简单应用 C51中常用的头文件 通常有reg51.h,reg52.h,math.h, ctype.h, stdio ...
- 51单片机实现对24C02进行页写、顺序读取并显示验证
源:51单片机实现对24C02进行页写.顺序读取并显示验证 //******************************************************************** ...
- 51单片机编码自学_这是9个月的自学式编码看起来像什么
51单片机编码自学 by Stephen Mayeux 斯蒂芬·马约(Stephen Mayeux) 这是9个月的自学式编码看起来像什么 (Here's What 9 Months of Self-T ...
最新文章
- (三)WebGIS前端地图显示之根据地理范围换算出瓦片行列号的原理(核心)
- 结合丰富示例深入讲解Ajax架构和最佳实践——《深入Ajax:架构与最佳实践》
- php和python哪个学起来简单一点-现在自学php和python那个合适?
- Android文件操作中的openFileOutPut和openFileInput
- Docker php 环境搭建dockerfile
- leetcode954. 二倍数对数组(treemap)
- 转载 实践与分享:Windows 7怎么获取TrustedInstaller权限【图文教程】
- 户外驴友必须掌握的登山包的装填和调整
- 如何读取tensorboard文件 展现可视化
- 站内搜索引擎初探:haystack全文检索,whoosh搜索引擎,jieba中文分词
- Android开发笔记(五十七)录像录音与播放
- python multiprocessing遇到Can’t pickle instancemethod问题
- PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?
- swoft php怎么样,[原创]Swoole和Swoft的那些事 (Http/Rpc服务篇)
- 牛津词典 2018 年度词汇 ——「有毒」!
- 人工智能数学基础之高等数学
- C#处理控制台关闭事件
- jQuery中find和filter的区别
- 在Eclipse上用JAVA连接数据库
- JSON-RPC是什么东西
热门文章
- 引起短波通讯服务器终端,通信系統.ppt
- 关于怎样把普通usb摄像头图像发布到ros的topic
- 解决:运行sbin下的start-hdfs.sh时报WARN util.NativeCodeLoader: Unable to load native-hadoop
- 汽车tbox是车联网系统
- STL中的map简单详解
- 作为一个知识图谱的觉悟就是全世界的猫猫联合起来-1
- 字节跳动内部学习资料泄露!徐州java培训哪个好
- VR全景作品中添加开场加载画面教程
- 微软认证系统工程师MCSE(院校IT课程)
- 将“活雷锋” 搬到网上 ——记百姓网CEO王建硕