单片机大作业简易数字电压表

合集下载

简易数字电压表设计,单片机实验。

简易数字电压表设计,单片机实验。
(2) 用 C51 编写代码,实现一个数字式直流电压测量表,将测量到的直流电 压值在 LCD 上显示;
(3) 采用 Keil 和 Proteus 联合调试代码,查看仿真结果; (4) 将编程代码通过 STC-ISP 程序下载到 MCU Flash 中运行,并观察运行结
果。
3. 实训要求
(1) 依照 EDP 实验箱的接口设计,在任务三、四的基础上补充 AD 采集电路 的绘制,可以仿真 EDP 实验箱的相应硬件模块;
lcd1602_com(0x82); lcd1602_Data(0x2e);
lcd1602_com(0x81); lcd1602_Data(DATA[temp/10]);
START=1; START=0; }
} } void delay_1ms() {
int n=100; while(n--); } void lcd1602_com(unsigned char com)
OE=1; temp=P0; temp=temp*a*100; lcd1602_com(0x84); lcd1602_Data(DATA[temp%10]);
temp=temp/10; lcd16DATA[temp%10 ]);
简易数字电压表设计
1. 任务目的
(1) 熟悉 SPI 接口协议; (2) 掌握 TLC1543 A/D 转换器的工作原理及使用方法; (3) 熟悉掌握 TL431 基准电压源的工作原理; (4) 掌握直流电压表的工作原理与实现方法。
2. 实验内容
(1) 参考 EDP 实验箱 AD 模块电路,在 Proteus 中采用 TLC1543 和 TL431 设 计一个 AD 采样电路;
a=0.0196;
OE=0; START=0; START=1; START=0;

基于单片机的简易数字电压表设计(任务书+论文)

基于单片机的简易数字电压表设计(任务书+论文)

任务书摘要本文介绍了基于89c51单片机的一种8路输入电压测量电路,该电路采用ADC0809作为A/D转换元件,测量范围0至5伏,小数点后显示一位。

要求能够依次显示每路通道电压,而且能够通过拨码开关选择输入通道。

使用3位LED 模块显示,前面一位显示通道号,后面两位显示测量电压值。

本系统主要包括四大模块:数据采集模块、控制模块、显示模块、A/D转换模块。

绘制电路原理图与工作流程图,并进行调试,最终设计完成了该系统的硬件电路。

在软件编程上,采用了汇编语言进行编程,开发环境使用WAVE集成开发环境。

开发了显示模块程序、通道切换程序、A/D转换程序。

关键词:ADC0809;A/D转换;LED显示目录1 方法论证 (5)1.1 系统的设计任务 (5)1.2 设计方案 (5)1.3 软硬件开发环境 (6)2 数字电压表硬件设计 (7)2.1 单片机主电路设计 (7)2.1.1 复位电路 (7)2.1.2 晶振电路 (7)2.2 测量、转换电路设计 (8)2.3 按键电路设计 (9)2.4 显示电路设计 (10)2.4.1 LED数码管构成 (10)2.4.2 显示方式 (11)3 软件设计 (14)3.1 主程序设计 (14)3.1.1 工作流程 (14)3.1.2 存储空间定义安排 (15)3.2 模块程序设计 (15)3.2.1 A/D转换测量程序 (15)3.2.2 显示程序 (16)4 系统调试与分析 (18)4.1 调试内容及问题解决 (18)4.2 系统进一步改进方案 (18)附录1:硬件原理图 (20)附录2:程序清单 (21)参考文献 (24)1 方法论证1.1 系统的设计任务设计单片机主电路、数据采集接口电路、LED显示电路、拨码控制电路,能够实现对8路电压值进行测量,能够显示当前测量通道号及电压值,电压精度小数点后1位,可以通过键盘选择循环显示8路的检测电压值和指定通道的检测电压值。

1.2 设计方案将数据采集接口电路输入电压传入ADC0809数模转换元件,经转换后通过D0至D7与单片机P0口连接,把转换完的模拟信号以数字信号的信号的形式传给单片机,信号经过单片机处理从LED数码显示管显示。

单片机课程设计-简易数字电压表

单片机课程设计-简易数字电压表

课程设计报告题目:简易数字电压表课程名称:单片机与接口技术课程设计院系:电子工程学院专业、班级:学生姓名:学生学号:指导老师:目录一、设计目的及设计要求二、总体设计思路三、系统硬件设计四、软件流程图及必要说明五、总结一、设计目的及设计要求1.设计目的:(1).熟悉单片机系统综合设计方法。

(2).掌握数码管的动态显示原理。

(3).掌握ADC0809的工作原理。

2.设计要求:数字电压表的基本原理,是对直流电压进行模数转换,其结果用数字直接显示出来,按其基本工作原理可分为积分式和比较式。

基本要求:简易数字电压表可以测量0-5V的单通道输入电压值,测量值能通过数码管以十进制显示电压值,测量误差约为±0.1V。

二、总体设计思路在598k3综合实验/仿真系统中,用双头线将可调电压区的VOUT接至ADC0809 模数转换区的IN0,此IN0端口作为待测输入电压端口,由ADDA、ADDB、ADDC都为低电平时决定,因此ADC0809 模数转换区的ADDA、ADDB、ADDC接至GND,可调电压区的VIN 接至电源+5V,ADC0809 模数转换区的CS4 接至系统接口区的8000H 端口,ADC0809模数转换区的WR接至系统接口区的/IOWR端口,ADC0809 模数转换去的 RD 接至系统接口区的/IORD, CLK接至单脉冲与时钟区的500K,用8 芯线将数据总线JX0 接至A DC0809模数转换区的JX6,即将ADC0809的输出端接入实验箱系统中8255的输入端。

然后在AT89S51主控芯片的控制下,将8255的PA输出端口作为数码管的位选控制端,PB 输出端口作为数码管的字形控制端。

三、 系统硬件设计1.系统原理框图系统原理框图2.AT89S52引脚说明AD0809 D0~D7 IN0~IN7VREF+ VREF- CLK OEST 、ALEAT89S528255 D0~D7PA0~PA 7PB0~PB7数码管控制线控制线位选段选XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在XTAL1和XTA L2上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一20PF的小电容,可以使系统更稳定,避免噪声干扰而死机。

基于单片机的简易数字电压表设计

基于单片机的简易数字电压表设计

基于单片机的简易数字电压表设计随着电子技术的迅猛发展,数字电压表在实验室、工业和日常生活中的应用越来越广泛。

本文将详细介绍基于单片机的简易数字电压表的设计过程,包括系统设计思路、硬件选型、软件实现以及调试过程。

设计一个简易数字电压表的目标是实现对直流电压的实时测量,并将其以数字形式显示。

该系统的核心是单片机,它负责数据采集、处理及结果显示。

选用单片机的原因在于其体积小、成本低、易于编程等优点。

在硬件设计方面,系统主要由输入电路、单片机、显示模块和电源模块组成。

输入电路的作用是将待测电压信号转化为单片机可处理的电信号。

一般采用分压电路,通过电阻分压的方法,将高电压降低至单片机的可接受范围。

还需考虑输入电压的范围,以确保测量精度和系统安全。

选用的单片机需具备一定的模拟输入功能,以便对电压进行采样。

常用的单片机型号有51系列、AVR系列及STM32系列等,其中STM32系列因其较高的性能和丰富的外设而受到广泛关注。

在设计中,应根据具体需求选择合适的单片机,并进行必要的引脚配置。

显示模块的选择是系统设计的重要环节,常用的有液晶显示屏(LCD)和七段数码管。

液晶显示屏具有显示内容丰富、可视角度广等优势,但其功耗相对较高。

而七段数码管则以其简洁明了的特性广泛应用于数字电压表中。

在本设计中,建议使用LCD显示模块,以便于显示多位数值及相关信息。

电源模块的设计需确保系统的稳定运行。

一般采用稳压电源,为单片机及其他外设提供稳定的电压供应。

需考虑电源的功耗及散热问题,确保系统在长期工作中不会出现故障。

数据处理模块是整个系统的核心,其主要任务是将采集到的模拟电压信号转换为相应的数字值。

可采用模数转换(ADC)技术,将模拟信号转换为数字信号,并进行必要的线性化处理。

处理过程中,应考虑量化误差及噪声对测量结果的影响。

数据显示模块负责将处理后的电压值通过LCD显示出来。

在这一过程中,需要对显示内容进行格式化,以确保信息的清晰易读。

单片机--简易数字电压表

单片机--简易数字电压表

单片机课程设计设计课题简易数字电压表学院电气工程与电子信息工程学院学号专业班级指导教师设计时间2013年6月13日目录一、设计目的 (2)二、课程设计的基本要求 (2)三、课程设计内容 (2)四、硬件电路说明 (3)五、软件流程设计说明 (3)1、程序设计总方案 (3)2、系统子程序设计 (4)3、显示子程序 (5)六、调试过程出现的问题和解决的办法 (5)七、实验现象 (6)八、本次课程设计的体会 (11)九、参考文献 (12)附录 (12)一、设计目的:随着单片机应用的日益广泛,在校学生加强对单片机动手实践能力的培养,已经是非常重要的一项锻炼。

课程设计就是为加强实践机会、培养学生动手能力的一个重要环节,将理论知识与实际联系起来的一个关键机会。

二、课程设计的基本要求:(1)熟练掌握8051单片机的原理,并结合具体项目应用,初步掌握实际工程中单片机硬件和软件的开发过程,以及代码量较大的单片机程序的编制和调试技巧。

(2)学习并熟练掌握Keil C51软件、PROTEUS软件的使用。

三、课程设计内容:(1)实现0-5V 的电压测量,IO 接要测量的电压,经AD 转换后,计算出当前电压值,在数码管(液晶)上显示当前电压。

(2)可适当根据实际需求增加扩展功能。

(3)利用PROTEUS软件画出电路图,根据以上功能编写软件,并在硬件电路上成功运行或仿真。

四、硬件电路说明图1简易数字电压表电路图该电路主要由三个模块组成:A/D转换模块,数据处理模块及显示模块。

A/D 转换主要由芯片ADC0808来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。

数据处理则由芯片AT89C51来完成,其负责把ADC0808传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着ADC0808芯片工作。

五、软件流程设计说明1、程序设计总方案根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图2所示。

基于_单片机的简易数字直流电压表毕业设计

基于_单片机的简易数字直流电压表毕业设计

基于MCS-51单片机的简易数字直流电压表设计设计一个简易数字直流电压表。

(量程0V-2V、测量速度为大于等于2 次/秒、测量误差在±0.05V以内,有超限报警、数码管显示。

)1:系统设计(1)分析任务要求,写出系统整体设计思路从试题的要求分析,主要包括的内容为ADC 转换电路的控制、采用定时器定时读取ADC 转换器的数据、将ADC 转换器的数据计算为对应的电压值,最后在数码管上显示出来。

整体设计思路:硬件采用单片机的P0 输出数码管的7 段码,P2 口输出数码管的位控信号。

用P1 的三个I/O 管脚连接ADC 转换器的接口,通过查询定时器T0 中断标志是否有效来启动ADC 转换器的工作,并读取ADC 转换器的转换结果。

然后,根据ADC 转换器的参考电压将ADC 转换器的转换结果计算为对应的电压值,并在数码管上显示出来。

(2)选择单片机型号和所需外围器件型号,设计单片机硬件电路原理图采用MCS51 系列单片机At89S51 作为主控制器,外围电路器件包括数码管驱动、AD 转换器TLC549、基准电压TL431 等。

数码管驱动采用2 个四联共阴极数码管显示,由于单片机驱动能力有限,采用74HC244 作为数码管的驱动。

在74HC244 的7 段码输出线上串联100 欧姆电阻起限流作用。

AD 转换器的参考电压由精密基准电源TL431 提供,标准参考电压Vref+为2.5 伏, Vref-为0 伏。

由于0V-2V 内的测量误差控制在±0.05V 内,因此8 位A/D 转换器即可满足要求。

AD 转换器TLC549是以8 位开关电容逐次逼近A/D 转换器为基础而构造的CMOS A/D 转换器。

它们设计成能通过3态数据输出和模拟输入与微处理器或外围设备串行接口。

TLC549 仅用输入/输出时钟(I/O CLOCK)和芯片选择(CS)输入作数据控制。

TLC549 的IO CLOCK 输入频率最高可达1.1MHz。

基于单片机实现简易数字电压表的设计.

基于单片机实现简易数字电压表的设计.

基于单片机实现简易数字电压表的设计任务的功能要求:1. 可以选择8路0~5V的输入电压值;2. 可以轮流显示或是单路选择显示;3. 测量显示的最小分辨率为0.01V,测量误差正负0.02V;4. 具有电压过低、过高的声光报警功能。

在此我们选择的单片机为STC89C52芯片、ADC0809数模转换器(因仿真软件没有,故选用ADC0808替代,其实差不多的,就是输出管脚的排序问题)、LCD1602液晶屏(接线相对与数码管简单多了)。

在protel软件中的仿真电路图如下:P2.7的开关的选择是选择显示1,2,3,4路或是5,6,7,8路。

下面的单片机的C程序长是长了点,但确实运行有效,主要花费在8路的数据实现上了,另外其中的报警设置也是思路中有一路需要报警也即报警的。

关于各个芯片及液晶的资料自己去网上找就好了。

另外P0端口必须接上拉电阻!lcd1602的3脚管必须接可调电阻!单片机的C程序清单:#include <reg52.h>#include <intrins.h>#include<string.h>#define dat_port P0#define uchar unsigned char #define uint unsigned int#define delay4us() {_nop_();_nop_();_nop_();_nop_();}sbit AB1=P3^2;sbit AB2=P3^1;sbit AB3=P3^0;sbit AB5=P3^3;sbit AB4=P2^7;sbit RS=P2^0;//RS=1 数据 RS=0 命令sbit RW=P2^1;//RW=1 读取 RW=0 写入sbit E=P2^2;//E 使能信号sbit EOC=P2^4;sbit OE=P2^5;sbit START=P2^3;sbit CLOCK=P2^6;uchar X[4]={"0000"};void Refresh_show();void delay50us(uint m){uint n,k;for(n=m;n>0;n--)for(k=25;k>0;k--);}void Write_LCD_Command(uchar cmd);//向LCD写入命令void Write_LCD_Data(uchar dat); //向LCD写入一个字节的数据函数 void Initialize_LCD1602(); //液晶初始化函数void LCD_Display(uchar *str);//在LCD上显示字符串//---------------忙检查-------------------//uchar LCD_Busy_Check(){uchar LCD_Status;RS = 0;RW = 1;E = 1;delay50us(4);LCD_Status = P0;E = 0;return LCD_Status;}//--------------向LCD写入命令--------------------//void Write_LCD_Command(uchar cmd){while((LCD_Busy_Check()& 0x80)==0x80); //忙等待RS = 0;RW = 0;E = 0;P0 = cmd;delay4us();E = 1;delay4us();E = 0;}//-----------向LCD写入一个字节的数据函数-----------------*/void Write_LCD_Data(uchar dat){while((LCD_Busy_Check()&0x80)==0x80);RS = 1;RW = 0;E = 0;P0 = dat;delay4us();E = 1;delay4us();E = 0;}//-----------LCD初始化-----------------*/void Initialize_LCD1602() //液晶初始化函数{Write_LCD_Command(0x38);delay50us(10); //功能设置,数据长度为8位,双行显示,5×7点阵字体Write_LCD_Command(0x0C);delay50us(10); // 显示开,关光标Write_LCD_Command(0x06);delay50us(10); //字符进入模式:屏幕不动,字符后移Write_LCD_Command(0x01); delay50us(10);//清屏}//-----------在LCD上显示字符串-----------------*/void LCD_Display(uchar *str){uchar i;for(i=0;i<strlen(str);i++){Write_LCD_Data(str[i]);delay50us(100);}}unsigned long dat_adc0808;uchar display_buffer[][16]={{"DC1=0.00DC2=0.00"}, {"DC3=0.00DC4=0.00"}};uchar display1_buffer[][16]={{"DC5=0.00DC6=0.00"}, {"DC7=0.00DC8=0.00"}};uint adc0808_init() // AD初始化{START=0;OE=0;START=1;START=0;while(EOC==0);OE=1;dat_adc0808=P1;OE=0;return dat_adc0808;}void Refresh_show0() //刷新显示{uint t=dat_adc0808*500.0/255; //if(t>400||t<100)X[0]=1;elseX[0]=0;display_buffer[0][4] = t/100+'0'; //整数位display_buffer[0][6] = t/10%10+'0'; //两个小数位 display_buffer[0][7] = t%10+'0'; }void Refresh_show1() //刷新显示{uint t=dat_adc0808*500.0/255; //if(t>400||t<100)X[1]=1;elseX[1]=0;display_buffer[0][12] = t/100+'0'; //整数位display_buffer[0][14] = t/10%10+'0'; //两个小数位 display_buffer[0][15] = t%10+'0'; }void Refresh_show2() //刷新显示{uint t=dat_adc0808*500.0/255; //if(t>400||t<100)X[2]=1;elseX[2]=0;display_buffer[1][4] = t/100+'0'; //整数位display_buffer[1][6] = t/10%10+'0'; //两个小数位 display_buffer[1][7] = t%10+'0'; }void Refresh_show3() //刷新显示{uint t=dat_adc0808*500.0/255; //if(t>400||t<100)X[3]=1;elseX[3]=0;display_buffer[1][12] = t/100+'0'; //整数位display_buffer[1][14] = t/10%10+'0'; //两个小数位 display_buffer[1][15] = t%10+'0';}void Refresh1_show0() //刷新显示{uint t=dat_adc0808*500.0/255; //if(t>400||t<100)X[0]=1;elseX[0]=0;display1_buffer[0][4] = t/100+'0'; //整数位display1_buffer[0][6] = t/10%10+'0'; //两个小数位 display1_buffer[0][7] = t%10+'0';}void Refresh1_show1() //刷新显示{uint t=dat_adc0808*500.0/255; //if(t>400||t<100)X[1]=1;elseX[1]=0;display1_buffer[0][12] = t/100+'0'; //整数位display1_buffer[0][14] = t/10%10+'0'; //两个小数位 display1_buffer[0][15] = t%10+'0'; }void Refresh1_show2() //刷新显示{uint t=dat_adc0808*500.0/255; //if(t>400||t<100)X[2]=1;elseX[2]=0;display1_buffer[1][4] = t/100+'0'; //整数位display1_buffer[1][6] = t/10%10+'0'; //两个小数位 display1_buffer[1][7] = t%10+'0';}void Refresh1_show3() //刷新显示{uint t=dat_adc0808*500.0/255; //if(t>400||t<100)X[2]=1;elseX[2]=0;display1_buffer[1][12] = t/100+'0'; //整数位display1_buffer[1][14] = t/10%10+'0'; //两个小数位 display1_buffer[1][15] = t%10+'0'; }void main(){TMOD=0x02;TH0=0x14;TL0=0x00;IE=0x82;TR0=1;Initialize_LCD1602();delay50us(10);while(1){if(AB4==1){AB1=0;AB2=0;AB3=0;adc0808_init();Refresh_show3();Write_LCD_Command(0x80);//设置显示的初始位置LCD_Display(display_buffer[0]); //显示测得的数据AB1=0;AB2=0;AB3=1;adc0808_init();Refresh_show0();Write_LCD_Command(0x80);//设置显示的初始位置LCD_Display(display_buffer[0]); //显示测得的数据 AB1=0;AB2=1;AB3=0;adc0808_init();Refresh_show1();Write_LCD_Command(0xC0);//设置显示的初始位置LCD_Display(display_buffer[1]); //显示测得的数据 AB1=0;AB2=1;AB3=1;adc0808_init();Refresh_show2();Write_LCD_Command(0xC0);//设置显示的初始位置LCD_Display(display_buffer[1]); //显示测得的数据 if(X[0]||X[1]||X[1]||X[2]==1) AB5=1;elseAB5=0;}else{AB1=1;AB2=0;AB3=0;adc0808_init();Refresh1_show3();Write_LCD_Command(0x80);//设置显示的初始位置LCD_Display(display1_buffer[0]); //显示测得的数据 AB1=1;AB2=0;AB3=1; adc0808_init();Refresh1_show0();Write_LCD_Command(0x80);//设置显示的初始位置LCD_Display(display1_buffer[0]); //显示测得的数据 AB1=1;AB2=1;AB3=0; adc0808_init();Refresh1_show1();Write_LCD_Command(0xC0);//设置显示的初始位置LCD_Display(display1_buffer[1]); //显示测得的数据 AB1=1;AB2=1;AB3=1; adc0808_init();Refresh1_show2();Write_LCD_Command(0xC0);//设置显示的初始位置LCD_Display(display1_buffer[1]); //显示测得的数据 if(X[0]||X[1]||X[1]||X[2]==1) AB5=1;elseAB5=0;}}}void Timer0_INT() interrupt 1 {CLOCK=!CLOCK; }。

《单片机应用技术(C语言)》实训课件—7.1 简易数字电压表设计

《单片机应用技术(C语言)》实训课件—7.1 简易数字电压表设计

}
开始 变量声明 初始化 ADC
读取 AD 转换 数据处理 数据显示
//函数名: ADC_STC12C5
//函数功能:取AD结果函数
//形式参数:第ch路通路
//返回值:A/D转换结果0~255
unsigned char ADC_STC12C5(unsigned char ch)
{
ADC_RES = 0;
三、数字电压表控制程序设计
//声明与ADC 有关的特殊功能寄存器
sfr P1_ASF = 0x9D; //A/D转换模拟功能控制寄存器
sfr ADC_CONTR = 0xBC; //A/D转换控制寄存器
sfr ADC_RES = 0xBD;
//A/D转换结果寄存器
sfr ADC_RESL = 0xBE;
//形式参数:输入数据
//返回值:无,实际电压值分离后存放在全局数组disp[]中
void data_process(unsigned char value)
{ unsigned int temp;
为什么?
temp = value *196;
//0~255转换为0~50000
disp[3]=temp/10000;
模拟信号输入
硬 件 电 路 图
三极管8050起到 开关作用,并为 每个数码管提供 必要的驱动电流。
数字信号显示
0 5 4 0 Q8 5 + vcc 6 0 5 3 0 Q8 vcc 8 0 DISPLAY 5 2 0 Q8 vcc 9 0 5 1 0 Q8 vcc 1 2 P fgedcDba 512437 01 11 6543210 11111119 0 0 1 1 R 1K×4 12345678 V 5 + 09098765432123456781 42333333333222222223 C A N E E C ALE S P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7 V P STC12C5A60S2 D N12 GRSTXXP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7 912345678 09801234567 21111111111 12MHz VV FF 55 pp 32 ++ K 22 P F CC 0 22 K 2 R u 1 1 0 2 R 1C 2

简易数字电压表 实验报告

简易数字电压表 实验报告

简易数字电压表设计实验报告姓名陈秀秀学号 201203870404指导教师贾立新专业班级电气1202 学院信息工程学院一.实验要求采用C8051F360单片机最小系统设计一简易数字电压表,实现对0~3.3V直流电压的测量,原理框图如图3-1所示。

模拟输入电压通过一只1 kΩ电位器产生,ADC0将模拟电压转换成数字量后换算成电压值,用十进制的形式在LCD上显示。

进一步,将单片机最小系统与PC通过RS-232通信电缆连接,将A/D转换的数字量在PC终端显示。

图3-1二.实验设计设计方案:由主程序、T0中断服务程序、ADC0中断服务程序组成。

具体流程图如下图3-2所示。

图3-2三.具体设计1.简易数字电压表设计F360初始化及LCD初始化(详细程序代码见附录)①内部振荡器初始化:OscInit()②I/O端口初始化:PortIoInit()③外部数据存储器接口初始化:XramInit()④定时器初始化:TimerInit()⑤中断系统初始化:Int0Init()⑥ADC0初始化:ADC_Init()⑦PCA初始化:PcaInit()2.电压转换方式(将电压转换为十进制)ADCDAT=ADC0H*256+ADC0L;VOLT=ADCDAT*2.4/1024=ADCDAT*0.002344;VOLTOUT=VOLT*1000;for(i=0;i<4;i++){VOLTBCD[i]=VOLTOUT%10;VOLTOUT=VOLTOUT/10;}3.LCD显示程序设计①检查LCD是否空闲子程序void CheckLcd(){uchar temp=0x00;uchar xdata *addr;while(1){addr=RCOMADDR;temp=*addr;temp&=0x80;if(temp==0x00)break;}}②电压值显示WriteCom(0x9C);WriteData(VOLTBCD[3]+0x30);WriteData(0x2E);WriteData(VOLTBCD[2]+0x30);WriteData(VOLTBCD[2]+0x30);WriteData(VOLTBCD[0]+0x30);WriteData(0x56);4.实验中AD转换方式选用逐次逼近型,A/D转换完成后得到10位数据分为高低字节存放在寄存器ADCOH和ADC0L中,此处选择右对齐,转换时针为2MHZ。

单片机课程设计报告-简易数字电压表

单片机课程设计报告-简易数字电压表

课程设计报告课程名称:单片机原理及应用设计题目:简易数字电压表设计系别:专业:班级:学生姓名:学号:起止日期:指导教师:教研室主任:摘要本文介绍了一种基于单片机STC89C52的简易数字电压表的设计。

该设计主要由三个模块组成:A/D转换模块,数据处理模块及显示模块。

A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量然后传送到数据处理模块。

数据处理则由芯片AT89C52来完成,其负责把ADC0808传送来的数字量经过一定的数据处理,产生相应的显示码并通过8255芯片送到数码管进行显示;此外,它还控制着ADC0809芯片工作。

该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。

此数字电压表可以测量0-5V的4路模拟直流输入电压值,并通过共阳极7段数码管显示出来。

关键词:STC89C52;ADC0809;8255;电压表;单片机目录设计要求 (1)1、前言 (1)2、方案选择与论证 (2)2.1方案一 (2)2.2方案二 (3)2.3方案对比与选择 (4)3 单元电路设计 (5)3.1单片机系统 (5)3.2时钟电路 (6)3.3电源电路 (6)3.4复位电路 (7)3.5 A/D 转换电路 (7)3.6 显示电路设计 (8)3.7 总体电路设计 (10)4、程序设计与调试 (11)4.1 程序设计总方案 (11)4.2 程序调试 (11)5、结果显示及误差分析 (12)5.1 结果显示 (12)5.2 误差分析 (14)6、设计总结 (15)7、主要芯片资料 (16)7.1 STC89C52 (16)7.2 ADC0809 (17)7.3 8255A (18)8、参考文献 (19)9、致谢 (20)10、附录 (21)简易数字电压表设计设计要求设计要求:1)能用数码管显示电压值2)可以测量0~5V范围内的4路输入电压值3)其测量最小分辨率为0.02V4)在4位LED数码管上轮流显示或者单路显示1、前言随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成运算部件、控制部件、数据存储器、程序存储器、定时器/计数器中断系统,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。

单片机课程设计报告-简易数字电压表

单片机课程设计报告-简易数字电压表

TLC0834
P87C52X2
图1
1) A/D 转换部分
1.1 TLC0834 AD 转换器 TLC0834 的启动和转换可以由软件自由控制。根据 TLC0834 的工作时序图,
图 2 控制逻辑表
图 3 时序图
其转换过程是: 片选 置 CS 为低(保证 CS 有一个从高到低的跳变),该电
平能使所有的逻辑功能有效, CS 引脚在整个转换过程中应保持 低电平。此时 DO 端为高阻,DI 端等待指令 起始 向 DI 端输出第一个逻辑高,表示起始位。由于 DI 端
;调用数据转换子程序 LCALL TURN_SUB ;调用显示子程序 LCALL DISP_SUB ;转换成通道 1 CH1: CLR P1.6 ;清时钟 CLR P1.5 SETB P1.7 ;CS=1 CLR P1.7 ;CS=0 SETB P1.5 ;置 1 启动位 SETB P1.6 CLR P1.6 SETB P1.5 ;1 写 SGL SETB P1.6;时钟 0-1 跳变 CLR P1.6 SETB P1.5 ;1 写 ODD SETB P1.6 CLR P1.6 CLR P1.5 ;0 写 SELECT BIT1 SETB P1.6 CLR P1.6 ;通道 0,单端输入 SETB P1.6
C3
10uF
9
RST
R2
10k 29 30 31 PSEN ALE EA
RV3
58%
U5
1 2 3 4 5 6 7 8 V+ CS CH0 CH1 CH2 CH3 DGND AGND ADC0834 CLK SARS 12 11
RV1
58%
1k
DI DO VCC VREF
13 10 14 9

电子测量大作业(基于C51单片机的简单数字电压表)

电子测量大作业(基于C51单片机的简单数字电压表)

电⼦测量⼤作业(基于C51单⽚机的简单数字电压表)基于单⽚机的简易数字电压表的设计⼀、概述本课题设计是⼀种基于单⽚机的简易数字电压表的设计。

该设计主要由三个模块组成:A/D转换模块,数据处理模块及显⽰模块。

A/D转换主要由芯⽚ADC0808来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。

数据处理则由芯⽚AT89C51来完成,其负责把ADC0808传送来的数字量经过⼀定的数据处理,产⽣相应的显⽰码送到显⽰模块进⾏显⽰;此外,它还控制着ADC0808芯⽚⼯作。

⼆、主要芯⽚1、ADC0808 主要特性ADC0808是CMOS单⽚型逐次逼近式A/D转换器,带有使能控制端,与微机直接接⼝,⽚内带有锁存功能的8路模拟多路开关,可以对8路0-5V输⼊模拟电压信号分时进⾏转换,由于ADC0808设计时考虑到若⼲种模/数变换技术的长处,所以该芯⽚⾮常适应于过程控制,微控制器输⼊通道的接⼝电路,智能仪器和机床控制等领域。

ADC0808主要特性:8路8位A/D转换器,即分辨率8位;具有锁存控制的8路模拟开关;易与各种微控制器接⼝;可锁存三态输出,输出与TTL兼容;转换时间:128µs;转换精度:0.2%;单个+5V电源供电;模拟输⼊电压范围0- +5V,⽆需外部零点和满度调整;低功耗,约15mW。

ADC0808芯⽚有28条引脚,采⽤双列直插式封装,其引脚图如图3所⽰。

图1 ADC0808引脚图下⾯说明各个引脚功能:IN0-IN7(8条):8路模拟量输⼊线,⽤于输⼊和控制被转换的模拟电压。

地址输⼊控制(4条):ALE: 地址锁存允许输⼊线,⾼电平有效,当ALE为⾼电平时,为地址输⼊线,⽤于选择IN0-IN7上那⼀条模拟电压送给⽐较器进⾏A/D转换。

ADDA,ADDB,ADDC: 3位地址输⼊线,⽤于选择8路模拟输⼊中的⼀路,其对应关系如表1所⽰:表1 ADC0808通道选择表START:START为“启动脉冲”输⼊法,该线上正脉冲由CPU送来,宽度应⼤于100ns,上升沿清零SAR,下降沿启动ADC⼯作。

单片机课程设计-简易数字电压表的设计

单片机课程设计-简易数字电压表的设计

单片机课程设计-----------简易数字电压表的设计RTX2011-7湖北::汽院::电系简易数字电压表的设计1.功能要求简易数字电压表的设计可以测量0~5V的8路输入电压值,并在四位上轮流显示或单路选择显示。

测量最小分辨率为0.019V,测量误差为±0.02V。

2.硬件图硬件图分解:简化图3.算法ADC0809的模拟数量与数字输出量的对应关系用整数运算实现实数运算(上图中的对应关系)的结果4.程序代码:ORG 0000HLJMP STARTPress EQU 30HORG 0050HSTART: MOV P1,#0FFH; 效果:’8.’从右→左移动(一次)MOV R0,#11110111BMOV R3,#4Retest: MOV R6,#0FFHTest: MOV P0,#0FFHMOV A,R0MOV P1,ACALL D10msMOV P1,#0FFHDJNZ R6,TestCALL D10msRR AMOV R0,ADJNZ R3,Retest ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV P1,#0FFH; ; 效果:显示’H.E.L.P.’一段时间;MOV R0,#11111110BMOV R6,#0FFHREHLP: MOV DPTR,#HelpMOV R0,#11111110B;;;;;;;;;;;;;MOV R3,#4HLP: CLR AMOVC A,@A+DPTRMOV P0,AMOV A,R0MOV P1,ACALL D10ms;MOV P1,#0FFHINC DPTRRL AMOV R0,ADJNZ R3,HLPDJNZ R6,REHLP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV P1,#0FFH; 效果:显示’1.0-0.’一段时间;MOV R0,#11111110BMOV R6,#0FFHREMOD11: MOV DPTR,#MOD1MOV R0,#11111110B;;;;;;;;;;;;;MOV R3,#4MOD11: CLR AMOVC A,@A+DPTRMOV P0,AMOV A,R0MOV P1,ACALL D10ms;MOV P1,#0FFHINC DPTRRL AMOV R0,ADJNZ R3,MOD11DJNZ R6,REMOD11 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV P1,#0FFH; 效果:显示’2.0-7.’一段时间;MOV R0,#11111110BMOV R6,#0FFHREMOD21: MOV DPTR,#MOD2MOV R0,#11111110B;;;;;;;;;;;;;MOV R3,#4MOD21: CLR AMOVC A,@A+DPTRMOV P0,AMOV A,R0MOV P1,ACALL D10ms;MOV P1,#0FFHINC DPTRRL AMOV R0,ADJNZ R3,MOD21DJNZ R6,REMOD21 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV P1,#0FFH; 等待键入选择WaitPress: MOV A,P1CPL AJZ WaitPressMOV A,P1CALL D10msMOV Press,P1CJNE A,Press,WaitPress;去抖动ANL A,#00010000B;S1: 模式(MODE1)JZ MODE1MOV A,PressANL A,#00100000B;S2: 模式(MODE2)JZ MODE2MOV P1,#0FFH; S3,S4未定义JMP WaitPress ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MODE1: MOV P1,#0FFH ;模式1:IN0:单道电压显示CLR EAMOV DPTR,#7FF8H; P2.7=0,IN0MOVX @DPTR,A; P2=7FH,P0=F8H,写(/WR=0,/RD=1)Waiting1: JNB P3.3,Waiting1MOVX A,@DPTR; P2=7FH,P0=F8H,读(/RD=0,/WR=1)Conver1: MOV B,#51DIV ABMOV DPTR,#LEDMOVC A,@A+DPTRADD A,#10000000B; 第1个LED的小数点dp亮MOV P0,ACLR P1.0; 第1个LED亮MOV R0,#11111110BMOV R1,#3NEXT1: CALL D10msMOV P1,#0FFH;MOV A,BMOV B,#10MUL AB;这之后B不是’1’就是’0’:最大50*10=01f4HJB PSW.2,BEQU11; PSW.2就是OVMOV B,#51DIV ABJMP DISP1BEQU11: INC AMOV B,#51DIV ABADD A,#5DISP1: MOV DPTR,#LEDMOVC A,@A+DPTRMOV P0,AMOV A,R0RL AMOV R0,AMOV P1,ACALL D10msDJNZ R1,NEXT1; 显示完4位LED为止MOV P1,#0FFHJMP MODE1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MODE2: MOV P1,#0FFH ;模式2:IN0-IN7:多道电压循环显示CLR EAMOV DPTR,#7FF8H;P2.7=0MOV R7,#00H; R7为通道NEXT2In: MOV R6,#0FFHThisIn: MOVX @DPTR,A; IN0时P2=7FH,P0=F8H,写(/WR=0,/RD=1)Waiting2: JNB P3.3,Waiting2MOVX A,@DPTR; IN0时P2=7FH,P0=F8H,读(/RD=0,/WR=1)MOV R2,A; R2为0809的二进制转换结果Conver2: MOV A,R7MOV DPTR,#LEDMOVC A,@A+DPTRMOV P0,ACLR P1.0CALL D10msMOV P1,#0FFHMOV A,R2MOV B,#51DIV ABMOV DPTR,#LEDMOVC A,@A+DPTRADD A,#10000000B; 第2个LED的小数点dp亮MOV P0,ACLR P1.1; 第2个LED亮MOV R0,#11111101B; R0控制LEDMOV R1,#2NEXT2: CALL D10msMOV P1,#0FFH;MOV A,BMOV B,#10MUL ABJB PSW.2,BEQU12MOV B,#51DIV ABJMP DISPBEQU12: INC AMOV B,#51DIV ABADD A,#5DISP: MOV DPTR,#LEDMOVC A,@A+DPTRMOV P0,AMOV A,R0RL AMOV R0,AMOV P1,ACALL D10msDJNZ R1,NEXT2; 显示完4位LED为止CALL D10msMOV P1,#0FFH;MOV A,R2MOV A,R7; 还原DPTRADD A,#0F8H; 相加之和最大为0FFHMOV DPL,AMOV DPH,#7FHDJNZ R6,ThisInCALL D1s;MOV A,R7;ADD A,#0F8H;MOV DPL,A;MOV DPH,#7FHINC DPTRINC R7MOV A,R7CLR CSUBB A,#8JZ MODE2JMP NEXT2In ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; D10ms: MOV R4,#01H ;延时10msD1ms: MOV R5,#249DL: NOPNOPDJNZ R5,DLDJNZ R4,D1msRET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; D1s: MOV R3,#100 ;延时1sD:CALL D10msDJNZ R3,D RET;;;;;;;;;;;;;;;;;;;;;;;;;;;共阴极;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LED:DB 3FH,06H,5BH,4FH,66H ;0-4DB 6DH,7DH,07H,7FH,6FH ;5-9 Help:DB 0F6H,0F9H,0B8H,0F3H ;H.E.L.P MOD1:DB 86H,3FH,40H,3FH ;1.0-0 MOD2:DB 0DBH,3FH,40H,07H ;2.0-7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; END实验效果图模式1:IN0模式2:IN0->IN7IN0IN1…………IN5………提示:按复位键可以重新进行模式选择。

单片机简易数字电压表课程设计

单片机简易数字电压表课程设计

课程名称单片机原理与应用课题名称简易数字电压表专业自动化班级学号姓名指导教师2012年6月18日目录第一章:设计任务和性能指标 (7)1.1课程设计的要求、目的及意义 (7)1.2简易数字电压表的系统转 (8)1.3 课程设计器材 (8)第二章:设计方案 (8)第三章:硬件设计(各模块详细介绍) (8)3.1 AT89C51 的管脚说明 (8)3.2 模数转换模块(ADC0809) (11)3.2.1 ADC0809中文资料 (11)3.3可调电压及选通道模块 (11)3.4一位及四位 LED 数码显示器 LED (12)3.4.1 LED基本结构 (12)3.4.2 LED显示器的选择 (13)3.4.3LED译码方式 (14)3.4.4LED显示器与单片机接口设计 (15)第四章 : 软件设计(程序设计) (16)4.1程序设计总方案 (16)4.2程序子程序设计 (16)4.2.1初始化程序 (16)4.2.2 AD转换程序 (16)4.2.3显示程序 (17)第5章:仿真 (18)5.1 软件调试 (18)第6章:课程设计体会 (18)参考文献 (19)附录 (20)1系统原理图 (20)2源程序代码 (20)第一章设计任务和性能指标拿到任务书之后,我们组仔细阅读了任务要求,由于有关 A/D 转换的内容,老师在上课时并没有讲到,我们组先仔细阅读分析了课本第六章A/D 与 D/A 转换接口的内容。

开始的时候,我们组想参考课本的内容进行课程设计,但事实证明,课本的程序总是报错,而且电路要求也与我们的任务书有很大区别。

然后我们放弃该计划,决定参考图书馆的书本和网上的资料,从网址: http: 和图书馆的课本《8051 单片机实践与应用》获取相关内容,制定任务计划,我们组制定的任务计划如下: 1. 分析画电路所需的器材,查询所需器材的代码,初步画出功能电路图。

2. 通过查阅资料,详细了解有关各模块的功能及接法。

单片机课设 简易数字电压表

单片机课设  简易数字电压表

1.总体设计方案选择与说明要实现电压的测量有多种方案,其中两种比较简单的且精度比较高的方法,分别采用并行ADC0808芯片和和TLC1543/TLC2543芯片。

方案一:用ADC0808芯片做模数转换采样芯片,占用的单片机I/O口线多,占用的板子面积较大,但是可以循环采样8路模拟通道,编程相对简单。

方案二:用TLC1543/TLC2543芯片做模数转换采样芯片,占用的单片机I/O口线少,且占用电路面积小,但是编程比较复杂。

我采用方案一,因为方案一所用到的芯片我们都比较熟悉,采用常用的51单片机作为控制芯片,ADC0808芯片的CLOCK脚(时钟脉冲输入端)接单片机的P2.4脚,DATA OUT接单片机的P0.0-P0.7脚;ADD A-ADD C脚(3位地址输入线)接单片机的P1.0-P1.2;ALE脚(地址锁存允许信号)接单片机的P2.5;OE脚(数据输出允许信号)接单片机的P2.7;IN0-INT7接输入电压(及测试电压),ADC0808通过采样进来的数据信号送给单片机,通过计算再送入显示电路将其电压值显示出来。

电压的范围是0-5V。

2.系统结构框图与工作原理2图1.1 系统结构框图 2.2系统工作原理数字电压表工作原理:这里主要是利用ADC0808并行接口芯片,ADC0808芯片的基准电压脚外接电压为+5V ,则最大可以测得的电压为5V ,ADC0808芯片的模拟输入脚通过电位器接+5V 电压,进行模拟采样,通过调整电位器的值改变模拟量。

输入的模拟量经ADC0808芯片的内部8位开关电路逐次逼近A/D 转换器,转换成8位二进制数,其最小的分辨率为0.0196(V R E F =0.0196V),D 为转化的数字量,再通过 255/V V REF IN D ⨯=可以求得模拟电压,最后输入四位LED 显示器就可将所测得电压显示出来。

3.硬件电路设计及说明3.1键盘接口电路独立式键盘:独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。

MCS-51单片机简易直流数字电压表

MCS-51单片机简易直流数字电压表

MCS-51单片机简易直流数字电压表目录第一部分课程设计任务书 (1)一、课程设计题目 (1)二、课程设计时间 (1)三、课程设计提交方式 (1)四、设计要求 (1)第二部分课程设计报告 (2)一、单片机发展概况 (2)二、MCS-51单片机系统简介 (3)三、设计思想 (4)四、硬件电路设计 (4)五、软件设计框图 (5)六、实验结果 (7)七、程序源代码 (8)八、结束语 (10)九、参考文献 (11)第一部分课程设计任务书一、课程设计题目MCS-51单片机简易直流数字电压表二、课程设计时间一周三、课程设计提交方式提交打印课程设计报告以及发送电子版四、设计要求本实验要使用单片机设计一个简易直流数字电压表。

用AT89S51单片机和ADC0809组成一个数字电压表,要求能够测量0~5V的直流电压值,并用四位数码管显示,并要求所用元器件最少。

第二部分课程设计报告一、单片机发展概况单片机是在一片半导体硅片集成中央处理单元(CPU)、存储器(RAM、ROM)、并行I/O、串行I/O、定时器/计数器、中断系统、系统时钟电路及系统总线的微型计算机。

主要应用于测控领域。

单片机使用时,通常是处于测控系统的核心地位并嵌入其中,所以国际上通常把单片机称为嵌入式控制器(EMCU,Embedded MicroController Unit),或微控制器(MCU,MicroController Unit)。

我国习惯于使用“单片机”这一名称。

单片机是计算机技术发展史上的一个重要里程碑,标志着计算机正式形成了通用计算机系统和嵌入式计算机系统两大分支。

其发展大致分为4个阶段。

第一阶段(1974年~1976年):单片机初级阶段。

因工艺限制,单片机采用双片的形式而且功能比较简单。

1974年12月,仙童公司推出了8位的F8单片机,实际上只包括了8位CPU、64B RAM和2个并行口。

第二阶段(1976年~1978年):低性能单片机阶段。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

宁波理工学院课程设计(论文)题目基于C51单片机的简易电压表姓名学号专业班级通信工程112班学院信息科学与工程学院完成日期 2013年12月15日摘要【目的】本文介绍了一种基于单片机的简易数字电压表的设计。

【方法】该设计主要由三个模块组成:A/D转换模块,数据处理模块及显示模块。

A/D转换主要由芯片ADC0808来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。

数据处理则由芯片AT89C51来完成,其负责把ADC0808传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着ADC0808芯片工作。

该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。

此数字电压表可以测量0-5V的1路模拟直流输入电压值,并通过一个四位一体的7段数码管显示出来。

【结论】该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。

此数字电压表可以测量0-5V的1路模拟直流输入电压值,并通过一个四位一体的7段数码管显示出来。

关键词:单片机;数字电压表;A/D转换;AT89C51;ADC0808目录摘要 I概述 2第1章设计总方案 31.1 设计要求 31.2 设计思路 31.3 设计方案 3第2章硬件电路设计 42.1 A/D转换模块 42.1.1 逐次逼近型A/D转换器原理 4 2.1.2 ADC0808 主要特性 52.1.3 ADC0808的外部引脚特征 5 2.2 单片机系统 72.2.1 AT89C51各引脚功能 72.3 复位电路和时钟电路 92.3.1 复位电路设计 92.3.2 时钟电路设计 102.4 LED显示系统设计 112.4.1 LED引脚 112.4.2 LED译码方式 112.5 总电路图 12第3章程序设计 133.1 程序设计总方案 133.2 子程序设计 133.2.1 A/D转换子程序 133.2.2 显示子程序 14参考文献 14附录系统源程序 15概述在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。

而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。

数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。

由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用。

传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。

采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC实时通信。

数字电压表是诸多数字化仪表的核心与基础。

以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。

目前,由各种单片机和A/D转换器构成的数字电压表作全面深入的了解是很有必要的。

最近的几十年来,随着半导体技术、集成电路(IC)和微处理器技术的发展,数字电路和数字化测量技术也有了巨大的进步,从而促使了数字电压表的快速发展,并不断出现新的类型。

数字电压表从1952年问世以来,经历了不断改进的过程,从最早采用继电器、电子管和形式发展到了现在的全固态化、集成化(IC 化),另一方面,精度也从0.01%-0.005%。

目前,数字电压表的内部核心部件是A/D转换器,转换的精度很大程度上影响着数字电压表的准确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面。

本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:转换模块、数据处理模块及显示模块。

其中,A/D转换采用ADC0808对输入的模拟信号进行转换,控制核心AT89C51再对转换的结果进行运算处理,最后驱动输出装置LED显示数字电压信号。

第1章设计总方案1.1 设计要求⑴以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表。

⑵采用1路模拟量输入,能够测量0-5V之间的直流电压值。

⑶电压显示用4位一体的LED数码管显示,至少能够显示两位小数。

⑷尽量使用较少的元器件。

1.2 设计思路⑴根据设计要求,选择AT89C51单片机为核心控制器件。

⑵A/D转换采用ADC0808实现,与单片机的接口为P1口和P2口的高四位引脚。

⑶电压显示采用4位一体的LED数码管。

⑷LED数码的段码输入,由并行端口P0产生:位码输入,用并行端口P2低四位产生。

1.3 设计方案硬件电路设计由6个部分组成; A/D转换电路,AT89C51单片机系统,LED显示系统、时钟电路、复位电路以及测量电压输入电路。

硬件电路设计框图如图1所示。

图1 数字电压表系统硬件设计框图第2章硬件电路设计2.1 A/D转换模块现实世界的物理量都是模拟量,能把模拟量转化成数字量的器件称为模/数转换器(A/D转换器),A/D转换器是单片机数据采集系统的关键接口电路,按照各种A/D芯片的转化原理可分为逐次逼近型,双重积分型等等。

双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点。

与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0809、ADC0808等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送到单片机进行分析和显示。

一个n位的逐次逼近型A/D转换器只需要比较n次,转换时间只取决于位数和时钟周期,逐次逼近型A/D转换器转换速度快,因而在实际中广泛使用[1]。

2.1.1 逐次逼近型A/D转换器原理逐次逼近型A/D转换器是由一个比较器、A/D转换器、存储器及控制电路组成。

它利用内部的寄存器从高位到低位一次开始逐位试探比较。

转换过程如下:开始时,寄存器各位清零,转换时,先将最高位置1,把数据送入A/D转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的二进制数字量。

其原理框图如图2所示:图2 逐次逼近式A/D转换器原理图2.1.2 ADC0808 主要特性ADC0808是CMOS单片型逐次逼近式A/D转换器,带有使能控制端,与微机直接接口,片内带有锁存功能的8路模拟多路开关,可以对8路0-5V输入模拟电压信号分时进行转换,由于ADC0808设计时考虑到若干种模/数变换技术的长处,所以该芯片非常适应于过程控制,微控制器输入通道的接口电路,智能仪器和机床控制等领域。

ADC0808主要特性:8路8位A/D转换器,即分辨率8位;具有锁存控制的8路模拟开关;易与各种微控制器接口;可锁存三态输出,输出与TTL兼容;转换时间:128μs;转换精度:0.2%;单个+5V电源供电;模拟输入电压范围0- +5V,无需外部零点和满度调整;低功耗,约15mW。

2.1.3 ADC0808的外部引脚特征ADC0808芯片有28条引脚,采用双列直插式封装,其引脚图如图3所示图3 ADC0808引脚图下面说明各个引脚功能:IN0-IN7(8条):8路模拟量输入线,用于输入和控制被转换的模拟电压。

地址输入控制(4条):ALE:地址锁存允许输入线,高电平有效,当ALE为高电平时,为地址输入线,用于选择IN0-IN7上那一条模拟电压送给比较器进行A/D转换。

ADDA,ADDB,ADDC:3位地址输入线,用于选择8路模拟输入中的一路,其对应关系如表1所示:表1 ADC0808通道选择表START:START为“启动脉冲”输入法,该线上正脉冲由CPU送来,宽度应大于100ns,上升沿清零SAR,下降沿启动ADC工作。

EOC: EOC为转换结束输出线,该线上高电平表示A/D转换已结束,数字量已锁入三态输出锁存器。

D1-D8:数字量输出端,D1为高位。

OE:OE为输出允许端,高电平能使D1-D8引脚上输出转换后的数字量。

REF+、REF-:参考电压输入量,给电阻阶梯网络供给标准电压。

Vcc、GND: Vcc为主电源输入端,GND为接地端,一般REF+与Vcc连接在一起,REF-与GND连接在一起.CLK:时钟输入端。

[2]2.2 单片机系统AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含有4KB的可反复擦写的只读程序存储器和128字节的随机存储器。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,它为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51功能性能:与MCS-51成品指令系统完全兼容;4KB可编程闪速存储器;寿命:1000次写/擦循环;数据保留时间:10年;全静态工作:0-24MHz;三级程序存储器锁定;128*8B内部RAM;32个可编程I/O口线;2个16位定时/计数器;5个中断源;可编程串行UART通道;片内震荡器和掉电模式[3]。

2.2.1 AT89C51各引脚功能AT89C51提供以下标准功能:4KB的Flash闪速存储器,128B内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时,AT89C51可降至0Hz静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作,掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有工作直到下一个硬件复位。

AT89C51采用PDIP封装形式,引脚配置如图5所示[4]。

图5 AT89C51的引脚图AT89C51芯片的各引脚功能为:P0口:这组引脚共有8条,P0.0为最低位。

这8个引脚有两种不同的功能,分别适用于不同的情况,第一种情况是89C51不带外存储器,P0口可以为通用I/O 口使用,P0.0-P0.7用于传送CPU的输入/输出数据,这时输出数据可以得到锁存,不需要外接专用锁存器,输入数据可以得到缓冲,增加了数据输入的可靠性;第二种情况是89C51带片外存储器,P0.0-P0.7在CPU访问片外存储器时先传送片外存储器的低8位地址,然后传送CPU对片外存储器的读/写数据。

P0口为开漏输出,在作为通用I/O使用时,需要在外部用电阻上拉。

P1口:这8个引脚和P0口的8个引脚类似,P1.7为最高位,P1.0为最低位,当P1口作为通用I/O口使用时,P1.0-P1.7的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。

相关文档
最新文档