《单片机数字电压表设计LED显示含C源代码.docx》由会员分享,可在线阅读,更多相关《单片机数字电压表设计LED显示含C源代码.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机数字电压表设计LED显示含C源代码 1. 绪论 (2) 1.1 课程设计要求 (2) 1.2 数字电压表介绍 (2) 2. 硬件单元电路设计 (2) 2.1数字电压表结构框图 (2) 2.1.1 AT89C51单片机简介 (3) 2.1.2 ADC0832转换器简介 (4) 2.1.3 时钟电路 (5) 2.1.4 复位电路 (5) 2.1.5 LED显示电路 (6) 3. 软件单元电路设计 (6) 3.1 主程序流程图 (6) 3.2显示子程序流程图 (7) 3.3 A/D转换子程序流程图 (8) 3.4 数据处理子程序流程图 (8) 4. 数字电压表仿真设计图与实物图 (9) 4.1
2、 仿真图 (9) 4.2 器件清单 (9) 4.3 硬件电路实物图 (10) 5. 程序代码 (11) 6. 项目设计总计 (18) 7. 参考文献 (18) 1.绪论 1.1 课程设计要求 使用单片机AT89C51和ADC0832设计一个数字电压表,能够测量05V之间的直流电压值,两位数码显示。在单片机的作用下,能监测两路的输入电压值,用8位串行A/D转换器,8位分辨率,逐次逼近型,基准电压为 5V;能用两位LED进行轮流显示或单路选择显示,显示精度0.1伏。 1.2 数字电压表介绍 数字电压表简称DVM,数字电压表基本原理是将输入的模拟电压信号转化为数字信号,再进行输出显示。而A/D转换器
3、的作用是将连续变化的模拟信号量转化为离散的数字信号,器基本结构是由采样保持,量化,编码等几部分组成。因此AD转换是此次设计的核心元件。输入的模拟量经过AD转换器转换,再由驱动器驱动显示器输出,便得到测量的数字电压。 2.硬件单元电路设计 2.1数字电压表结构框图 结构如(图1)所示 2.1.1 AT89C51单片机简介 AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51
4、引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89C51在众多嵌入式控制应用系统中得到广泛应用。51单 片机内包含以下几个部件: 1) 8位微处理器(CPU)。 2) 数据存储器(128B RAM)。 3) 程序存储器(ROM/EPROM)。 4) 4个8位可编程并行I/O口(P0口,P1口,P2口,P3口)。 5) 1个全双工的异步串行口。 6) 2个16定时器/计数器。 7) 中断系统。 8) 特殊功能寄存器(SFR)。 单片机片内结构如(图2)所示: 图2 2.1.2 ADC0832转换器简介 ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道
5、A/D转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用ADC0832 可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。芯片如下(图3)所示: 图3 芯片接口说明如下: CS_ 片选使能,低电平芯片使能。 CH0 模拟输入通道0,或作为IN+/-使用。 CH1 模拟输入通道1,或作为IN+/-使用。 GND 芯片参考0 电位(地)。 DI 数据信号输入,选择通道控制。 DO 数据信号输出,转换数据输出。 CLK 芯片时钟输入。 Vcc/REF 电源输入及参考电压输入(复用)。 工作原理如下: 正常情况下ADC0832
6、与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选
7、择通道功能。当此2 位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当2 位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正 输入端IN+进行输入。到第3 个脉冲的下沉之后DI 端的输入电平就失去输入作用,此后DO/DI 端则开始利用数据输出DO 进行转换数据的读取。从第4个脉冲下沉开始由DO 端输出转换数据最高位DATA7,随后每一个脉冲下沉DO 端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数
8、据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATD0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D 转换的结束。最后将CS 置高电平禁用芯片,直接将转换后的数据进行处理就可以了。 2.1.3 时钟电路 XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz ,时钟频率就为6MHz 。晶振的频率可以在1MHz-24MHz 内选择。电容取30PF 左右。系统的时钟电路设计是采用的内部方式,即利用芯片内
9、部的振荡电路如下(图4)所示: 2.1.4 复位电路 由电容串联电阻构成,由图并结合电容电压不能突变的性质,可以知道,当系统一上电,RST 脚将会出现高电平,并且,这个高电平持续的时间由电路的RC 值来决定.典型的51单片机当RST 脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC 的取值就可以保证可靠的复位.一般教科书推荐C 取10u,R 取8.2K.当然也有其他取法的,原则就是要让RC 组合可以在RST 脚上产生不少于2个机周期的高电平.至于如何具体定量计算,可以参考电路分析相关书籍.复位电路如下(图5)所示。 图 4 2.1.5 LED显示电路 本项目所用显示屏为4位LED显示
10、屏。本LED显示器为8段(DP为小数点段),每一段为一个发光二极管。发光二极管有共阳极和共阴极两种。本显示器的发光二极管为共阳极数码管。发光二极管的阳极连接在一起,通常在此共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。通过给LED显示器提供不同的代码,是这些不同的LED显示器相应的段发光显示不同的字型,这些代码称为段码。 3.软件单元电路设计 3.1 主程序流程图 主程序流程图如下(图6)所示: 图6 3.2显示子程序流程图 显示子程序流程图如下(图7)所示: 图 7 3.3 A/D 转换子程序流程图 A/D 转换子程序流程图如下(图8)所示: 3.4 数
11、据处理子程序流程图 数据处理子程序流程图,如下(图9)所示: 图8 图9 4. 数字电压表仿真设计图与实物图 4.1 仿真图 如下(图10)所示: 4.2 器件清单 如下(表2)所示 图10 表2 4.3 硬件电路实物图 电路实物图如下(图11)所示: 电路实物图如下(图12)所示: 图 11 图 12 5. 程序代码 #include #include /*端口定义*/ sbit CS = P35; sbit Clk = P33; sbit DATI = P34; sbit DATO = P34; sbit P20=P24 ; /*定义全局变量*/ unsigned char dat = 0
12、x00; /AD值 unsigned char count = 0x00; /定时器计数 unsigned char CH; /通道变量 unsigned char dis = 0x00, 0x00,0x00; /显示数值 /*共阳LED段码表*/ unsigned char code tab=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09; char code tablewe= 0xfd,0xfb,0xf7,0xef,0xdf,0xfe ; /* * 函数功能:AD转换子程序 入口参数:CH 出口参数:dat * */ unsigned char adc0832(unsigned char CH)