基于51单片机的模数转换(AD)实验设计

合集下载

基于51单片机和ADC0809多通道模数转换的设计与实现

基于51单片机和ADC0809多通道模数转换的设计与实现

摘要本文介绍了基于单片机的数据采集的硬件设计和软件设计,数据采集系统是模拟域与数字域之间必不可少的纽带,它的存在具有非常重要的作用。

本文介绍的重点是数据采集系统,而该系统硬件部分的重心在于单片机。

硬件部分是以单片机为核心,还包括A/D模数转换模块,LCD1602显示模块部分。

8路被测电压通过模数转换器ADC0809进行模数转换,实现对采集到的数据进行模拟量到数字量的转换,并将转换后的数据通过LCD1602显示器来显示所采集的结果,并且可以通过按键来查看任意通路的电压值,整个系统具有操作方便、线路简单、测量误差小等优点。

关键词:单片机AT89S52、模数转换器ADC0809、数据采集、LCD1602显示器目录摘要 01、方案设计 (2)2、硬件电路的设计 (3)2.1单片机的最小系统设计 (3)2.2 ADC0809模数转换器设计电路 (4)2.2.1 ADC0809的结构功能 (4)2.2.2 ADC0809的工作时序 (7)2.2.3 ADC0809与AT89C52单片机的接口电路 (8)2.3 LCD1602显示电路 (8)2.4 键盘与单片机连接电路 (11)2.5系统整体电路图 (11)3、软件设计 (12)4、系统仿真和测试结果 (13)5、性能分析 (14)6、心得与体会 (15)7、参考文献 (15)附录一:源程序 (15)附录二:本科生能力拓展训练成绩评定表 (21)1、方案设计根据设计要求,采用的方案如下:硬件部分实现对8路数据采集和显示的功能,包括MCS-51单片机、ADC0809、LCD1602;软件部分实现单片机对8路输入数据的采集以及对LCD1602的显示操作。

主要设计思想:单片机P1与ADC0809相连,P0与LCD1602连接。

模拟信号通过IN0——IN7输入到ADC0809中转换为数字信号,P1获得此值后,经过处理得到每位的数据后,通过P0口写数据到LCD屏上。

数据采集电路的原理框如图1所示。

51单片机ad转换代码及仿真

51单片机ad转换代码及仿真

51单片机ad转换代码及仿真一、前言51单片机是一种广泛应用于嵌入式系统领域的微控制器,其具有低功耗、高性能、易学易用等特点。

其中,AD转换模块是其重要的功能之一,可以实现模拟信号到数字信号的转换。

本文将介绍51单片机AD 转换的相关知识和代码实现,并通过仿真验证其正确性。

二、51单片机AD转换原理1. AD转换概述AD转换(Analog-to-Digital Conversion)是指将模拟信号(如声音、图像等)转化为数字信号的过程。

在嵌入式系统中,AD转换通常用于采集外部传感器等模拟量信号,并将其转化为数字量进行处理。

2. 51单片机AD转换模块51单片机内置了一个8位AD转换模块,可以对0~5V范围内的模拟信号进行采样和转换。

该模块包含以下主要部分:(1)输入端:可接受外部0~5V范围内的模拟信号。

(2)采样保持电路:在采样期间对输入信号进行保持,以避免采样过程中信号波动。

(3)比较器:将输入信号与参考电压进行比较,并输出比较结果。

(4)计数器:对比较结果进行计数,得到AD转换的结果。

(5)控制逻辑:控制采样、保持、比较和计数等过程。

3. AD转换精度AD转换精度是指数字信号与模拟信号之间的误差,通常用位数来表示。

例如,8位AD转换器可以将模拟信号分成256个等级,即精度为1/256。

因此,AD转换精度越高,数字信号与模拟信号之间的误差越小。

4. AD转换速率AD转换速率是指单位时间内进行的AD转换次数。

在51单片机中,AD转换速率受到时钟频率和采样时间的限制。

因此,在实际应用中需要根据具体情况选择合适的时钟频率和采样时间以满足要求的转换速率。

三、51单片机AD转换代码实现以下为51单片机AD转换代码实现:```#include <reg52.h>sbit IN = P1^0; // 定义输入端口sbit OUT = P2^0; // 定义输出端口void main(){unsigned char result;while (1){ADC_CONTR = 0x90; // 打开ADCADC_CONTR |= 0x08; // 开始采样while (!(ADC_CONTR & 0x10)); // 等待采样完成result = ADC_RES; // 读取结果OUT = result; // 输出结果}}```代码解释:(1)定义输入输出端口:使用sbit关键字定义输入端口和输出端口。

51单片机课程设计 AD转换

51单片机课程设计 AD转换

成绩课程设计报告华中师范大学武汉传媒学院传媒技术学院电子信息工程2011仅发布百度文库,版权所有.AD转换要求:A.使用单片机实现AD转换B.可以实现一位AD转换,并显示(保留4位数字)设计框图:方案设计:AD转换时单片机设计比较重要的实验。

模数转换芯片种类多,可以满足不同用途和不同精度功耗等。

工作原理:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。

此地址经译码选通8路模拟输入之一到比较器。

START上升沿将逐次逼近寄存器复位。

下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。

直到A/D转换完成,EOC 变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。

当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。

硬件原理图:程序流程图:仿真图:制作实物图:AD转换模块:最小系统及显示:整体效果:调试:调试最多的是数码管显示问题扫描太慢显示会太暗和有闪烁问题,通过不断改变延迟来调整达到最佳状态。

心得体会:通过这次的实验设计特别是前期的电路设计,和芯片选择以及后期的实物焊接。

对我们专业的电路认识了很多,学到了很多。

做一个东西要选择你要的芯片的,你必须要先了解一些大体的东西当你选择好后你更要全面了解它的性能。

对于单片机硬件来说要了解芯片,你要如何去驱动他来满足你的要求。

这对于编程和看懂芯片的时序有着高要求。

毕竟现在硬件更新换代太快,必须要学习怎么去设计去编写你要的程序来控制它。

这是我这次实验最深刻的理解。

这次实验也培养了我团队合作能力积极主动沟通,遇到问题一起解决。

对于现在的我们即将走出校门的人来说意义重大。

同时这次实验也大大拓宽了我的视野我还有很多东西要去理解去学习。

原程序:#include <reg51.h> // 引用标准库的头文件#include <intrins.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned intuint temp=0;sbit ST=P3^6; //启动信号sbit EOC=P3^3; //转换结束信号,连到外部中断1口,转换结束后进入外部中断sbit OE=P3^7; //输出使能//sbit ls=P2^7;sbit dig_hc595_sh_dr=P1^7; //数码管的74HC595程序sbit dig_hc595_st_dr=P1^6;sbit dig_hc595_ds_dr=P1^5;void initial_myself();void initial_peripheral();void delay_short(unsigned int uiDelayShort);void delay_long(unsigned int uiDelayLong);//void display_service();void display_drive();void dis_service(int temp);//unsigned char ucDigShow8; //第8位数码管要显示的内容//unsigned char ucDigShow7; //第7位数码管要显示的内容//unsigned char ucDigShow6; //第6位数码管要显示的内容//unsigned char ucDigShow5; //第5位数码管要显示的内容unsigned char ucDigShow4; //第4位数码管要显示的内容unsigned char ucDigShow3; //第3位数码管要显示的内容unsigned char ucDigShow2; //第2位数码管要显示的内容unsigned char ucDigShow1; //第1位数码管要显示的内容unsigned char code dig_table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char ucDigShowTemp=0; //临时中间变量unsigned char ucDisplayDriveStep=1; //动态扫描数码管的步骤变量void dig_hc595_drive(unsigned char ucLedStatusTemp16_09,unsigned char ucLedStatusTemp08_01);main(){initial_myself();//初始化单片机delay_long(100);initial_peripheral(); //初始化外围while(1){P0=0xff;ST=0;ST=1;ST=0;// 启动A/D转换while(EOC==0);OE=1;//EA=0;//temp=0xff;dis_service(temp);//EA=0;display_drive();//显示电压值//delay_long(1);//EA=1;OE=0;}}void dis_service(int temp){int Tp=0;Tp=temp*1.0/255*500;ucDigShow1 = dig_table[Tp / 1000];ucDigShow2 = dig_table[Tp % 1000 / 100] | 0x80;ucDigShow3 = dig_table[Tp % 100 / 10] ;ucDigShow4 = dig_table[Tp % 10 / 1];}void display_drive()//显示电压值{uchar i=1;for(i=1;i<5;i++){ switch(i){case 1: //显示第1位ucDigShowTemp=ucDigShow1;dig_hc595_drive(ucDigShowTemp,0xfe);break;case 2: //显示第2位ucDigShowTemp=ucDigShow2;break;case 3: //显示第3位ucDigShowTemp=ucDigShow3;dig_hc595_drive(ucDigShowTemp,0xfb);break;case 4: //显示第4位ucDigShowTemp=ucDigShow4;dig_hc595_drive(ucDigShowTemp,0xf7);break;/*case 5: //显示第5位ucDigShowTemp=ucDigShow5;dig_hc595_drive(ucDigShowTemp,0xef);break;case 6: //显示第6位ucDigShowTemp=ucDigShow6;dig_hc595_drive(ucDigShowTemp,0xdf);break;case 7: //显示第7位ucDigShowTemp=ucDigShow7;break;case 8: //显示第8位ucDigShowTemp=ucDigShow8;dig_hc595_drive(ucDigShowTemp,0x7f);break; */}}}//数码管的74HC595驱动函数void dig_hc595_drive(unsigned char ucDigStatusTemp16_09,unsigned char ucDigStatusTemp08_01){unsigned char i;unsigned char ucTempData;dig_hc595_sh_dr=0;dig_hc595_st_dr=0;ucTempData=ucDigStatusTemp16_09; //先送高8位for(i=0;i<8;i++){if(ucTempData>=0x80)dig_hc595_ds_dr=1;else dig_hc595_ds_dr=0;dig_hc595_sh_dr=0; //SH引脚的上升沿把数据送入寄存器delay_short(1);dig_hc595_sh_dr=1;delay_short(1);ucTempData=ucTempData<<1;}ucTempData=ucDigStatusTemp08_01; //再先送低8位for(i=0;i<8;i++){if(ucTempData>=0x80)dig_hc595_ds_dr=1;else dig_hc595_ds_dr=0;dig_hc595_sh_dr=0; //SH引脚的上升沿把数据送入寄存器delay_short(1);dig_hc595_sh_dr=1;delay_short(1);ucTempData=ucTempData<<1;}dig_hc595_st_dr=0; //ST引脚把两个寄存器的数据更新输出到74HC595的输出引脚上并且锁存起来delay_short(1);dig_hc595_st_dr=1;delay_short(1);dig_hc595_sh_dr=0; //拉低,抗干扰就增强dig_hc595_st_dr=0;dig_hc595_ds_dr=0;}void delay_short(unsigned int uiDelayShort){unsigned int i;for(i=0;i<uiDelayShort;i++){;}void delay_long(unsigned int uiDelayLong) {unsigned int i;unsigned int j;for(i=0;i<uiDelayLong;i++){for(j=0;j<500;j++){;}}}void initial_myself(){P0=0xff;P1=0xff;P2=0xff;P3=0xff;TMOD=0x02;//T1工作模式2TH0=0x14;TL0=0x00;void initial_peripheral() //初始化外围{IE=0x82; //IE.7位为1表示CPU开放中断,IE.1位也为1,表示允许定时器T0溢出中断TR0=1; //使能定时器P0=0xff; //选择ADC0809的通道7(111)(P1.0~P1.2)//ls=0;ST=0;OE=0;IT1=1; //下降沿触发EX1=1; //使能外部中断1EA=1; //允许全局中断}void counter1(void) interrupt 2 using 2{EX1=0;temp=P0;//temp=0xfe;EX1=1;}。

51单片机ad转换程序解析

51单片机ad转换程序解析

51单片机ad转换程序解析1.引言1.1 概述概述部分旨在介绍本篇文章的主题——51单片机AD转换程序,并对文章的结构和目的进行简要说明。

51单片机是指Intel公司推出的一种单片机芯片,它广泛应用于嵌入式系统中。

而AD转换则是模拟信号转换为数字信号的过程,是嵌入式系统中的重要功能之一。

本文将详细解析51单片机中的AD转换程序。

文章结构分为引言、正文和结论三个部分。

引言部分将给读者介绍本篇文章的内容和结构安排,正文部分将详细讲解51单片机AD转换程序的相关要点,而结论部分将总结正文中各个要点的内容,以便读者能够更好地理解和掌握51单片机AD转换程序的实现原理。

本文的目的在于向读者提供一份对51单片机AD转换程序的详细解析,使读者能够了解51单片机的AD转换功能以及如何在程序中进行相应的设置和操作。

通过本文的学习,读者将掌握如何使用51单片机进行模拟信号的采集和处理,为后续的嵌入式系统设计和开发提供基础。

在下一节中,我们将开始介绍文章的第一个要点,详细讲解51单片机AD转换程序中的相关知识和技巧。

敬请期待!1.2 文章结构文章结构部分主要是对整篇文章的框架和内容进行介绍和归纳,以帮助读者更好地理解文章的组织和内容安排。

本文以"51单片机AD转换程序解析"为主题,结构分为引言、正文和结论三个部分。

引言部分主要包括概述、文章结构和目的三个方面。

首先,通过对单片机AD转换程序的解析,来讲解其实现原理和功能。

其次,介绍文章的结构,帮助读者明确整篇文章的主要内容和组织方式。

再次,阐明文章的目的,即为读者提供关于51单片机AD转换程序的详尽解析和指导,帮助读者深入了解该技术并进行实际应用。

正文部分则分为两个要点,即第一个要点和第二个要点。

第一个要点可以从AD转换的基本概念入手,介绍51单片机AD转换的原理和流程。

包括输入电压的采样、AD转换器的工作原理、ADC的配置和控制等方面的内容。

在此基础上,深入解析51单片机AD转换程序的编写和调用方法,包括编程语言、寄存器的配置、数据的获取和处理等。

基于51单片机实现ADC0808数模转换与显示课程设计

基于51单片机实现ADC0808数模转换与显示课程设计

综合课程设计题目基于51单片机实现ADC0808数模转换与显示毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。

尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。

对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。

作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。

除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。

对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。

本人完全意识到本声明的法律后果由本人承担。

作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。

本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。

涉密论文按学校规定处理。

作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。

51单片机ADDA转换教程

51单片机ADDA转换教程
把量化的结果用代码 (二进制或二 - 十 进制 )表示出来,称为 “ 编码 ” 。
3. 采样 - 保持电路
RF
R1
ui
T
CF
+
uo
UL
当 UL为高电平时, MOS管T导通, ui 经电阻 R1和管T向电容 CF充电 。 当 UL为低电平时, MOS管T截止, 忽略各种漏电流,电容CF上的电压得以保持 。
造成转换误差的原因主要有 : 参考电压 VREF的波动 ; 运算放大器的零点漂移 ; 模拟开关的导通内阻和导通电压 ;
电阻网络中的电阻值偏差 ;…...
10. 2. 4 D/A转换器的主要技术指标
三、D/A转换器的转换速度
为了便于定量地描述D/A转换器的转换 速度 ,定义了建立时间 tS 和转换速率 SR两 个参数 。
10. 3. 1 采样定理
在A / D转换中,因为输入的模拟量在 时间上是连续的,而输出的数字信号是离 散量,所以进行转换时只能在一系列选定 的瞬间 (亦即瞬间坐标轴上的一些规定点) 对输入的模拟信号采样,然后再把这些采 样值转换为输出的数字量 。
A / D 转换过程应包括 :采样、 保持、 量化、 编码 这四个步骤 。
§10.1 概述
模 拟 信 A/D 号
计 算 机
模 拟 D/A 信 号
A / D : Analog to Digital D / A : Digital to Analog
§10. 2 数 / 模 转换器 ( DAC )
10. 2. 1 权电阻网络型 10. 2. 2 权电流型 10. 2. 3 T型电阻网络型 10. 2. 4 D/A变换器的主要技术指标 10. 2. 5 集成 DAC 0832及其应用

基于单片机的AD转换电路与程序设计

基于单片机的AD转换电路与程序设计

基于单片机的AD转换电路与程序设计单片机(MCU)是一种集成了处理器核心、内存、输入输出接口和各种外围设备控制器等功能的集成电路。

MCU通常用于嵌入式系统,广泛应用于各个领域,例如家电、工业控制、汽车电子等。

其中,AD转换是MCU中的一个重要模块,用于将模拟信号转换成数字信号。

在应用中,常常需要将外部的温度、湿度、压力或光照等模拟信号进行转换和处理。

AD转换电路一般由模拟输入端、引脚连接、采样保持电路、比较器、取样调节电路、数字输出端等部分组成。

模拟输入端负责接收外部的模拟量信号;引脚连接将模拟输入信号引到芯片的模拟输入端;采样保持电路负责将引脚输入的模拟信号进行采样和保持,保证AD转换的准确性;比较器用于将模拟信号与参考电压进行比较,判断信号的大小;取样调节电路用于调整模拟信号的边界;数字输出端将模拟信号转换成数字信号输出给MCU。

在程序设计方面,MCU通常使用C语言进行编程。

程序设计分为初始化和数据处理两个步骤。

初始化阶段主要包括设置IO口、初始化外设、设置模拟输入通道等工作。

数据处理阶段主要包括数据采样、数值转换、数据处理和输出等工作。

下面以一个简单的温度采集系统为例进行说明。

首先,在初始化阶段,需要设置IO口和外设,以及设置模拟输入通道。

具体步骤如下:1.设置IO口:根据具体需要配置MCU的引脚功能和工作模式。

2.初始化外设:根据需要初始化ADC模块,包括设置采样频率、参考电压等参数。

3.设置模拟输入通道:选择需要转换的模拟输入通道。

接下来,在数据处理阶段,需要进行数据采样、数值转换和数据处理。

具体步骤如下:1.数据采样:使用ADC模块进行模拟信号的采样,将采样结果保存到寄存器中。

2.数值转换:将采样结果转换成数字信号,可以使用如下公式进行转换:数字信号=(ADC采样结果/采样最大值)*参考电压3.数据处理:根据具体需求进行数据处理,例如计算平均值、最大值或最小值,也可以进行滤波或校正。

我的51单片机之模数转换ADC0804的C语言和汇编编程

我的51单片机之模数转换ADC0804的C语言和汇编编程
//返回数据处理,LED 显示,Frequency 为转换频率 unsigned int DoWitchData(unsigned int Frequency) {
unsigned char AD[2];//存高低字节 unsigned int InputV;//最后处理结果 unsigned char i; InputV=ReadAD(); AD[1]=InputV&0xF0; AD[1]=AD[1]>>4; AD[0]=InputV&0x0F; InputV=ADH[AD[1]]+ADL[AD[0]]; for(i=0;i<Frequency;i++) {
//延时 void delay(unsigned char n) {
unsigned char i; for(i=0;i<n;i++) {
; } }
//AD 转换,P 口取数 unsigned char ReadAD() {
unsigned char ADData; RDA=1; WRA=1; InputPort=0xFF; WRA=0; _nop_(); WRA=1; delay(100); RDA=0; _nop_();_nop_();_nop_();_nop_();_nop_(); ADData=InputPort; _nop_();_nop_();_nop_();_nop_();_nop_(); RDA=1; _nop_(); return (ADData); }
//
{ 0 , 1, 2 , 3 , 4 , 5, 6, 7, 8,
//
9, A , b , C , d, e, f, 点, 息灯, }
sbit RDA=P3^7; sbit WRA=P3^6; sbit INTR=P3^3;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

HEFEI UNIVERSITY单片机课程综述报告主题基于51单片机的模数转换(A/D)实验设计姓名郭丽丽专业通信工程学号 1105021006 班级 11级通信(1)班指导老师汪济洲2014 年 6 月 2 日目录1.实验目的与要求 (1)1.1实验目的 (1)1.2实验要求 (1)2.实验原理 (1)2.1电路原理图 (1)2.2 Proteus7.4 软件简介 (2)3、实验步骤 (6)4、源程序代码 (6)5. 实验结果分析 (10)6.总结 (10)1.实验目的与要求1.1实验目的1.掌握A/D转换与单片机的接口方法2.了解A/D芯片ADC0809转换性能及编程方法3.通过实验了解单片机如何进行数据采集1.2实验要求1.采用查询法或中断法编程进行A/D采集;2.采集0~5V范围的电压信号(以电位器模拟被测信号),使用4位串行数码管显示0~5V数值,小数点保留三位,实现简易电压表功能。

2.实验原理2.1电路原理图熟悉8051的输入输出端口的使用方法, 本实验的电路连接如图1所示。

图1 连接电路2.2 Proteus7.4 软件简介Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。

它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:①实现了单片机仿真和SPICE电路仿真相结合。

具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

②支持主流单片机系统的仿真。

目前支持的单片机类型有:ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。

③提供软件调试功能。

在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2、MPLAB等软件。

④具有强大的原理图绘制功能。

总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。

其操作界面如下图所示:图2 Proteus操作页面2.模数转换(A/D)实验设计ADC0809简介ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。

它是逐次逼近式A/D转换器,可以和单片机直接接口。

图3 ADC0809的内部逻辑结构图4 ADC0809芯片ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

ADC0809的内部逻辑结构:由下图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

图5 ADC0809的内部逻辑结构ADC0809各脚功能如下:D7-D0:8位数字量输出引脚。

IN0-IN7:8位模拟量输入引脚。

VCC:+5V工作电压。

GND:地。

REF(+):参考电压正端。

REF(-):参考电压负端。

START:A/D转换启动信号输入端。

ALE:地址锁存允许信号输入端。

(以上两种信号用于启动A/D转换)EOC:转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。

OE:输出允许控制端,用以打开三态数据输出锁存器。

CLK:时钟信号输入端(一般为500KHz)。

A、B、C:地址输入线。

3、实验步骤1.Proteus软件中绘制单片机实验电路;2.在Keil C软件中编制汇编或C程序,软件调试;3.在Proteus中加载实验程序,观察并记录实验结果。

4、源程序代码#include <reg52.h>//*******************引脚定义********************//sbit dis_ab=P3^0;sbit dis_clk=P3^1;sbit CLK=P3^4;sbit ST=P3^5;sbit EOC=P3^6;sbit OE=P3^7;//*****************7SEG-LED段码表****************//Unsigned char codeLedTab[21]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77, 0x7c,0x39,0x5e,0x79,0x71,0x76,0x73,0x3e,0x00, 0x40};//************************************************//unsigned char data num_1; //存储十六进制转化为两个单十六进制数的值unsigned char data num_2;unsigned char data num_3;unsigned char data num_4;void Delay(unsigned int x);void DispClk(void);void DisplaySerial(unsigned char x);void ClearLed(unsigned char x);void HexToDec(unsigned int x);void main(){unsigned long num;ST=0;OE=0;while(1){ST=1; //发高脉冲启动采样信号ST=0;do{CLK=!CLK;}//提供采样时钟信号,直到采样结束为止while(!EOC);OE=1;num=P1; //读取采样值num=5000*num/255; //将0~#FFH采样值转化为0~5V数值(0~5000)HexToDec(num); //将16进制数据,转换为10进制数据,以便于数码管显示ClearLed(4);DisplaySerial(num_4); //依次从高位到低为显示采样电压值DisplaySerial(num_3);DisplaySerial(num_2);DisplaySerial(num_1);Delay(30000); //采样延时间隔,决定采样频率 }}//********************延时子程序********************//void Delay(unsigned int x){unsigned int j;for(j=0;j<x;j++){};}//********************************//功能:串行模拟时钟注意事项:用到delay.h中的延时子程序形参:无//********************************//void DispClk(void){dis_clk=1;Delay(1);dis_clk=0;Delay(1);}//********************************//功能:发送一个数字到串行LED上形参:unsigned char x:0-20//********************************//void DisplaySerial(unsigned char x){unsigned char i;unsigned char num_serial=LedTab[x];for(i=0;i<8;i++){dis_ab=(bit)(num_serial&0x80);num_serial<<=1;DispClk();}}//********************************//功能:清串行LED显示形参:unsigned char x = 需要清显示的LED数//********************************//void ClearLed(unsigned char x){unsigned char i;for(i=0;i<(x<<3);i++){DispClk();dis_ab=0;}}void HexToDec(unsigned int x) //十六进制转十进制{num_1=x%10; //个位x=x/10;num_2=x%10; //十位x=x/10;num_3=x%10;x=x/10;num_4=x%10;}5.实验结果分析通过改变POT-LIN原件滑片的位置即可调整输入的物理模拟量,可以发现输出的数字信号即观察LED的显示效果的不同。

通过实验,会发现:(1)当POT-LIN原件上的滑片位置位于参考图的上方时,LED会全亮;(2)当POT-LIN原件上的滑片位于最下方时,LED全暗;(3)当POT-LIN原件上的滑片位于上下之间的位置时,则会有其对应的LED 显示效果。

LED显示效果如下图示:图6 LED效果图6.总结通过此次实验,让我学习了A/D 转换与单片机的接口方法。

对A/D 芯片ADC0809 转换性能及编程方法有了深入的了解,通过实验了解单片机如何进行数据采集,锻炼了编程能力。

总的来说,经过这几个星期的单片机课程的学习,使我们对单片机有了一定的了解,老师只是引导我们入门,要想深入学习还得课下花时间自己钻研。

如有侵权请联系告知删除,感谢你们的配合!。

相关文档
最新文档