基于单片机电压表C语言程序
- 格式:doc
- 大小:17.00 KB
- 文档页数:3
电路原理图程序清单://*******************************头文件及宏定义************************** *#include<REG52.h>#define TIME0H 0x3C#define TIME0L 0xB0#define uchar unsigned char#define uint unsigned int//******************端口设置********** #define OUTPORT P2 //ADC0809数据接口#define LCDPORT P0 //LCD数据接口sbit SET=P1^3; //定义调整键sbit DEC=P1^4; //定义减少键sbit ADD=P1^5; //定义增加键uchar x=0; //计数器sbit LCDRS=P3^5;// 寄存器选择信号sbit LCDRW=P3^6; //读写信号sbit LCDE=P3^7; //片选信号sbit LED1=P1^0; //下限提示灯sbit LED2=P1^1; //上限提示灯sbit START=P3^4;//ATART,ALE接口。
0->1->0:启动AD转换。
sbit EOC=P3^3; //转换完毕由0变1. sbit alarmflag=P1^2;sbit CLK=P3^2;//********************************全局变量***************************** unsigned int shangxian=300; //上限报警温度,默认值为38 unsigned int xiaxian=200; //下限报警温度,默认值为38 unsigned char uc_Clock=0;//定时器0中断计数bit b_DATransform=0; //启动adc0809转换时间到标志,为1是启动A/D转换bit lowflag; //下限标志bit highflag; //上限标志uchar set_st=0; //状态标志bit shanshuo_st; //闪烁间隔标志//******************************函数声明***************************** void vDelay(); // 延时函数void vWriteCMD(unsigned char ucCommand);//把一个命令写入LCD函数void vWriteData(unsigned char ucData); //把一个数据写入LCD函数void vShowOneChar(unsigned char ucChar);//把一个字符写入LCD函数void vShowChar(unsigned char ucaChar[]); //把一组字符写入LCD函数void vShowVoltage(unsigned int uiNumber); //显示函数void vdInitialize(); //LCD初始化函数void Time0(); // 定时器0中断函数unsigned int uiADTransform(); // AD转换函数//*****外部中断0服务程序***** void int0(void) interrupt 0{EX0=0; //关外部中断0if(DEC==0&&set_st==1){vDelay();do{}while(DEC==0&&set_st==1); shangxian=shangxian-5;if(shangxian<xiaxian)shangxian=300;}else if(DEC==0&&set_st==2){ vDelay();do{}while(DEC==0&&set_st==2);xiaxian=xiaxian-5;if(xiaxian<0)xiaxian=0;}}//*****外部中断1服务程序*****void int1(void) interrupt 2{EX1=0; //关外部中断1if(ADD==0&&set_st==1){ vDelay();do{}while(ADD==0&&set_st==1);shangxian=shangxian+5;if(shangxian>500)shangxian=500;}else if(ADD==0&&set_st==2){vDelay();do{}while(ADD==0&&set_st==2);xiaxian=xiaxian+5;if(xiaxian>shangxian)xiaxian=200;}}//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<AD转换函数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> unsigned int uiADTransform(){unsigned int uiResult;OUTPORT=0x00;START=1; //启动AD转换。
目录1. 设计背景 02. 系统总体方案设计 03. 系统硬件电路的设计 (1)3.1 系统控制器的设计 (1)3.2 电压数据采集模块 (3)3.3 LCD1602显示电路 (4)3.4 按键设置模块 (5)3.5 报警电路模块 (6)3.6 上位机通信模块 (6)3.7 温度采集模块 (7)4. 软件电路设计 (7)4.2 量程自动切换子程序流程图 (8)4.3 A/D转换子程序流程图 (9)4.4 温度测量子程序流程图 (10)心得体会 (11)参考文献 (12)附录 (13)基于单片机的电压表设计1. 设计背景随着科学技术的发展,人们对宏观和微观世界逐步了解,越来越多的微弱信号需要被检测,例如:弱磁、弱光、微震动、小位移、心电、脑电等。
测控技术发展到现在,微弱信号检测技术已经相对成熟,基本上采用以下两种方法来实现:一种是先将信号放大滤波,再用低或中分辨率的ADC进行采样,转化为数字信号后,再做信号处理,另一种是使用高分辨率ADC,对微弱信号直接采样,再进行数字信号处理。
两种方法各有千秋,也都有自己的缺点。
前一种方法,ADC要求不高,特别是现在大部分微处理器都集成有低或中分辨率的ADC,大大节省了开支,但是增加了繁琐的模拟电路。
后一种方法省去了模拟电路,但是对ADC性能要求高,虽然∑-△ADC发展很快,已经可以做到24位分辨率,价格也相对低廉,但是它是用速度和芯片面积换取的高精度,导致采样率做不高,特别是用于多通道采样时,由于建立时间长,采样率还会显著降低,因此,它一般用于低频信号的单通道测量,满足大多数的应用场合。
在对采样精度要求不断提升的情况下,科技工作者也在其他方面对智能仪表的发展提出了新的要求,如:良好的人机界面、数据存储和通讯、阈值报警和较低的功耗等,同时还要求仪表具有较高的性价比。
本文主要设计的是基于单片机的量程自动选择的电压表的设计。
用来精确地采集不同等级的电压表。
数字电压表是采用数字化测量技术,把连续的量输入电压转换成不连续离散的数字化形式并加以显示的仪表作为现代电子测量中最基础与核心的一种测量仪器,对其测量精度和功能要求也越来越高,由于电压测量范围广特别是在微电压高电压及待测信号强弱相差极大情况下,既要保证弱信号测量精度又要兼顾强信号的测量范围,传统的手动转换量程的电压表在测量技术上有一定难度同时若量程选择不当不但会造成测量精度下降甚至损坏仪表。
基于单片机的数字电压表制作——ADC0832模数转换应用程序(C语言)主要部件:AT89S51 ADC0832 八段数码管关键字:ADC0832程序C语言数字电压表本文所描述的数字电压表是利用ADC0832模数转换芯片完成的。
该芯片能将0~5V的模拟电压量转换为0说实在话,量程只有5V的电压表没有什么实际的意义,而且也没有人无聊到自己会去做一个没有意义的以后做真正有用的电路打下基础。
而且,对于那些做毕业设计的同学也是一种参考。
这也就是本文的意ADC0832的资料百度一下可以找到一大堆,我就不在这里赘述了。
这里只给出连接图。
以下是程序部分:该程序是本人自编的,经测试可用,但不保证程序的可靠性及稳定性。
若有转载请标明出处。
如果有同学将本程序烧写到单片机里却不能正常工作的,请注意以下三点:1、是否将端口重新定义。
每个单片机开发板的引脚连接都是不一样的,若不加修改直接把程序烧写到2、是否正确选择通道值。
ADC0832有两个模拟输入端口(也就是我说的通道),你要先弄清楚你用的是默认使用0通道,如果0通道不行就改成1通道,反正不是0通道就是1通道。
3、如果你做的电压表在保证电路连接正确且没有以上两点问题的情况下,还是不能正常工作,请将程问题。
我有两个单片机开发板,其中一个必须要把那一行删掉才能工作。
这说明ADC0832读出的前8位与理。
我不知道到底是硬件还是软件出了问题,特此把这种现象标明。
若有哪位同学知道其原因的还请多/***********************************************************************************//*简易数字电压表制作——ADC0832模数转换应用程序(C语言版)*//*目标器件:AT89S51/*晶振:12.000MHZ/*编译环境:Keil uVision2 V2.12/***********************************************************************************//*********************************包含头文件********************************/#include <reg51.h>#include <intrins.h>/*********************************端口定义**********************************/sbit CS = P3^5;sbit Clk = P3^4;sbit DATI = P3^3;sbit DATO = P3^3;/*******************************定义全局变量********************************/unsigned char dat = 0x00; //AD值unsigned char count = 0x00; //定时器计数unsigned char CH; //通道变量unsigned char dis[] = {0x00, 0x00, 0x00}; //显示数值/*******************************共阳LED段码表*******************************/unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/**************************************************************************** 函数功能:AD转换子程序入口参数:CH出口参数:dat****************************************************************************/ unsigned char adc0832(unsigned char CH){unsigned char i,test,adval;adval = 0x00;test = 0x00;Clk = 0; //初始化DATI = 1;_nop_();CS = 0;_nop_();Clk = 1;_nop_();if ( CH == 0x00 ) //通道选择{Clk = 0;DATI = 1; //通道0的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 0; //通道0的第二位_nop_();Clk = 1;_nop_();}else{Clk = 0;DATI = 1; //通道1的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 1; //通道1的第二位_nop_();Clk = 1;_nop_();}Clk = 0;DATI = 1;for( i = 0;i < 8;i++ ) //读取前8位的值{_nop_();adval <<= 1;Clk = 1;_nop_();Clk = 0;if (DATO)adval |= 0x01;elseadval |= 0x00;}for (i = 0; i < 8; i++) //读取后8位的值{test >>= 1;if (DATO)test |= 0x80;elsetest |= 0x00;_nop_();Clk = 1;_nop_();Clk = 0;}if (adval == test) //比较前8位与后8位的值,如果不相同舍去。
单片机设计数字电压表单片机设计数字电压表数字电压表是一种常见的电子测量仪器,它可以用来测量电路中的电压大小。
在本文中,我们将介绍如何使用单片机设计数字电压表。
单片机是一种集成电路,它可以用来控制电子设备的运行。
在数字电压表中,单片机可以用来读取电路中的电压值,并将其显示在数字显示屏上。
设计数字电压表的第一步是选择适当的单片机。
在本文中,我们将使用ATmega328P单片机。
这是一种常见的单片机,它具有多个输入/输出引脚和内置的模拟数字转换器(ADC)。
接下来,我们需要将电路连接到单片机上。
我们将使用一个电压分压器电路来将电路中的电压降低到单片机可以读取的范围内。
电压分压器电路由两个电阻组成,它们将电路中的电压分成两个部分,其中一个部分与单片机连接。
我们将使用10KΩ和1KΩ电阻来构建电压分压器电路。
接下来,我们需要编写单片机程序来读取电路中的电压值并将其显示在数字显示屏上。
我们将使用C语言编写程序,并使用Arduino开发环境来编译和上传程序。
程序将使用单片机的ADC模块来读取电路中的电压值,并将其转换为数字值。
然后,程序将使用数字显示屏库将数字值显示在数字显示屏上。
最后,我们需要将电路和单片机编程板连接起来,并上传程序到单片机。
我们可以使用USB编程器将程序上传到单片机。
在完成上述步骤后,我们就可以使用数字电压表来测量电路中的电压了。
我们只需要将电路连接到电压分压器电路中,然后将数字电压表连接到电压分压器电路中。
数字电压表将显示电路中的电压值。
总结单片机设计数字电压表是一项有趣的项目,它可以帮助我们了解单片机和电路设计的基础知识。
通过使用单片机和电路设计,我们可以构建各种各样的电子设备,从而实现我们的创意和想法。
1 前言 (1)2 总体方案设计 (2)2.1 方案论证 (2)2.2 方案比较及选择 (3)3 硬件电路设计 (4)3.1 AD转换电路 (4)3.2 复位电路 (4)3.3 时钟电路 (5)3.4 显示电路 (6)3.5 特殊器件介绍 (6)3.5.1 主控芯片AT89S51 (6)3.5.2 ADC0808 (7)3.5.3 LED (9)4 软件部分设计 (11)4.1 A/D转换子程序 (11)4.2 显示子程序 (12)5 电路仿真 (13)5.1 软件调试 (13)5.2 显示结果及误差分析 (13)6 系统功能 (17)小结 (18)参考文献 (19)附录1 基于单片机的数字电压表原理图 (20)附录2 基于单片机的数字电压表程序清单 (21)1 前言在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。
而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。
数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。
由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用。
传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。
采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC实时通信。
数字电压表是诸多数字化仪表的核心与基础。
以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。
目前,由各种单片机和A/D转换器构成的数字电压表作全面深入的了解是很有必要的。
最近的几十年来,随着半导体技术、集成电路(IC)和微处理器技术的发展,数字电路和数字化测量技术也有了巨大的进步,从而促使了数字电压表的快速发展,并不断出现新的类型。
本文介绍的是数字电压表的发展背景和利用单片机,A/D 转换芯片结合的方法设计一个直流数字电压表。
它的具体功能是:最高量程为 200V,分三个档位量程,即2V,20V,200V,可以通过调档开关来实现各个档位,当测得电压的数值小于1V时,系统会自动的将电压数值转换为以mV为电压单位的电压值,并且通过按键的方法能够测得后五秒的平均电压值。
单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算,数据传送,中断处理)的微处理器(CPU)。
随着单片机技术的飞速发展,各种单片机蜂拥而至,单片机技术已成为一个国家现代化科技水平的重要标志。
单片机可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。
单片机控制系统能够取代以前利用复杂电子线路或数字电路构成的控制系统,可以软件控制来实现,并能够实现智能化,现在单片机控制范畴无所不在,例如通信产品,家用电器,智能仪器仪表,过程控制和专用控制装置等等,单片机的应用领域越来越广泛。
本毕业设计的课题是"简易数字电压表的设计"。
主要考核我们对单片机技术,编程能力等方面的情况。
观察独立分析,设计单片机的能力,以及实际编程技能。
本课题主要解决A/D转换,数据处理及显示控制等三个模块。
控制系统采用AT89C52单片机,A/D转换采用TLC2543。
关键字介绍:单片机,AT89C52,A/D 转换,TLC2543,数据处理This paper is the background of the development of digital voltmeter and using single chip computer, A/D conversion chip design method of the combination of the party A dc digital voltmeter. It is the specific function of: supreme range for 200 V, divide a gear range, namely 2 V, 20 V, 200 V, can switch to achieve each by shifting gear gear, when the voltage of the numerical less than 1 V, the system will automatically will convert to mV voltage values for the voltage is the voltage unit, and through the key method can measure five seconds after the average voltage.MCU is a kind of integrated circuit chip, using the technology with large scale data processing ability (such as the art operations, logic operations, data transfer, interrupt handling) of the microprocessor (CPU). With the rapid development of the single chip microcomputer, all kinds of single chip in great Numbers, microcontroller technology has become a national modernization level of science and technology.SCM can complete modern industrial control alone for the intelligent control function, it is the greatest feature of single chip microcomputer. Single-chip microcomputer control system can be replaced by complex electronic circuit or before digital circuit consists of the control system system, can control software to achieve, and to realize intelligent, now single-chip microcomputer control category is everywhere, such as communication products, household appliances, intelligent instruments, process control and special control device and so on, the application field of single chip microcomputer more and more widely.This graduate design topic is "simple digital voltmeter design". We mainly examine of single-chip processor technology technique, the programming ability, etc. Observe independent analysis, design of the single chip microcomputer ability, and the actual programming skills.This subject mainly to solve A/D conversion, data processing and display control and so on three modules. The control system adopts AT89C52 single chip microcomputer, A/D conversion using ADC0809.Keywords: A single-chip microcomputer, AT89C52, A/D conversion,ADC0809, data processing目录摘要 (1)Abstract (2)目录 (3)第一章数字电压表简介 (4)1.1设计背景 (4)1.2设计意义 (5)第二章数字电压设计两种方案简介 (6)2.1 由数字电路及芯片构建 (6)2.2 由单片机系统及 A/D 转换芯片构建 (6)第三章单片机简介及本设计单片机的选择 (7)3.1 常用单片机的特点比较及本设计单片机的选择 (7)3.2 本设计使用的单片机的简介 (7)第四章各种显示器件的介绍和选择 (8)4.1 常用显示器件简介 (8)4.2 1602液晶的参数资料 (8)第五章模数(A/D)转换芯片的选择 (11)5.1 常用的A/D芯片简介 (11)5.2 模数(A/D)芯片 TLC2543 的资料 (11)引脚说明: (12)第六章总体设计 (14)6.1 技术要求 (14)6.2 设计方案 (14)第七章硬件电路系统模块的设计 (15)7.1 单片机系统 (15)7.2 输入电路 (15)7.3 A/D 转换芯片与单片机的连接 (16)7.4 1602 液晶与单片机连接 (16)7.5 键盘与单片机的连接如下 (17)第八章系统软件的设计 (18)8.1 汇编语言和 C 语言的特点及选择 (18)8.2 主程序设计 (18)第九章系统的调试 (26)9.1 硬件调试 (26)9.2 软件调试 (26)第十章总结与展望 (27)参考文献 (28)第一章数字电压表简介数字电压表(Digital Voltmeter)简称DVM,作为智能仪表的一种,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转化成不连续,离散的数字形式并加以显示的仪表,传统的指针式电压表功能单一,精度低,不能满足数字化时代的需求采用单片机的数字电压表,精度高,抗干扰能力强,可扩展性强,集成方便。
电⼦测量⼤作业(基于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⼯作。
基于单片机的数字电压表设计在当今的电子世界中,电压表是一种必不可少的测量工具。
随着技术的进步,数字电压表因其精度高、易于读取、稳定性好等优点逐渐取代了传统的模拟电压表。
本文将探讨如何基于单片机设计数字电压表。
一、硬件设计1、1传感器模块传感器模块是数字电压表的重要组成部分,负责将输入的模拟电压转化为可被单片机处理的数字信号。
通常,我们使用ADC(模数转换器)来实现这一功能。
ADC的精度直接决定了电压表的测量精度。
1、2单片机模块单片机是数字电压表的“大脑”,负责控制整个系统的运行。
我们选择具有较高性能和可靠性的单片机,如Arduino、STM32等。
这些单片机都具有丰富的外设接口,便于实现复杂的控制逻辑。
1、3显示模块显示模块负责将单片机的处理结果呈现给用户。
常用的显示模块包括LED数码管、LCD液晶屏等。
选择适合的显示模块,可以大大提升电压表的易用性。
二、软件设计2、1数据采集与处理软件首先通过ADC从传感器模块读取模拟电压,然后对其进行处理,得到实际的电压值。
这一步的关键在于选择合适的ADC算法和设置合适的参考电压。
2、2数据输出与存储处理后的电压值需要被输出并存储起来。
通常,我们使用LCD液晶屏将电压值实时显示出来,同时也可以通过串口将数据传输到计算机或云端进行存储和分析。
三、精度与稳定性优化3、1硬件校准为了提高电压表的测量精度,我们可以在生产过程中对每一块电压表进行硬件校准。
通过调整ADC的参考电压或者在软件中进行校准算法的优化,可以有效提高电压表的测量精度。
3、2软件滤波在实际应用中,由于各种噪声和干扰的存在,电压表的读数可能会出现波动。
我们可以通过软件滤波算法,如平均滤波、卡尔曼滤波等,来减小这些干扰对测量结果的影响。
四、应用与扩展基于单片机的数字电压表不仅可以在实验室或工业现场使用,还可以扩展出更多的应用场景。
例如,通过加入无线通信模块,我们可以实现远程监控;通过加入更多的传感器,我们可以实现多通道的电压测量;通过与计算机或云端进行数据交互,我们可以实现大数据分析和预测。
1. 绪论............................... 错误!未定义书签。
1.1 课程设计规定...................... 错误!未定义书签。
1.2 数字电压表简介.................... 错误!未定义书签。
2. 硬件单元电路设计................... 错误!未定义书签。
2.1数字电压表构造框图................. 错误!未定义书签。
2.1.1 AT89C51单片机简介............ 错误!未定义书签。
2.1.2 ADC0832转换器简介............ 错误!未定义书签。
2.1.3 时钟电路..................... 错误!未定义书签。
2.1.4 复位电路..................... 错误!未定义书签。
2.1.5 LED显示电路.................. 错误!未定义书签。
3. 软件单元电路设计................... 错误!未定义书签。
3.1 主程序流程图...................... 错误!未定义书签。
3.2显示子程序流程图................... 错误!未定义书签。
3.3 A/D转换子程序流程图............... 错误!未定义书签。
3.4 数据解决子程序流程图.............. 错误!未定义书签。
4. 数字电压表仿真设计图与实物图....... 错误!未定义书签。
4.1 仿真图............................ 错误!未定义书签。
4.2 器件清单.......................... 错误!未定义书签。
4.3 硬件电路实物图.................... 错误!未定义书签。
5. 程序代码.............................. 错误!未定义书签。