(完整版)基于单片机KL25的数字电压表

  • 格式:doc
  • 大小:16.26 MB
  • 文档页数:16

课程设计报告课程名称:单片机原理与应用学院:信息工程学院专业:电子信息工程班级: 15电子2班姓名:夏莹学号: 20150304251指导教师:袁静成绩:开课时间:2016-2017 学年 2 学期基于单片机KL25的数字电压表[摘要]数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。

传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。

目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。

与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。

本章重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。

关键词:数字电压表 A/D 转换器 PC 电压测量The Design of Digital VoltmeterAbstract Digital voltage meter (Digital Voltmeter) referred to as DVM, it is the use of digital measuring technology, the continuous analog (DC input voltage) into a non-continuous, discrete digital form and to display the instrument.Analog voltage meter features a traditional single, low accuracy, can not meet the digital age, using the single chip digital voltage meter, from the high precision, anti-interference ability, scalability, Ji Cheng convenience, and PC can communicate in real time.At present, by a variety of single A / D converter consisting of digital voltage meter, has been widely used in electronic and electrical measurement, industrial automation, instrumentation, automated test systems, intelligent measurement, showing strong vitality.At the same time, the DVM extension to the various general and specific digital instruments, but also the power and non-power measurement up to a new level.This chapter focuses on single-chip A / D converter, and they form by the microcontroller-based digital voltmeter works.Key words Digital voltmeter A/Dconverter PC Voltage measurement目录第一章系统概要 (5)1.1 课题研究背景 (5)1.2数字电压表的分类 (5)1.3系统功能 (5)第二章设计总方案 (6)2.1 设计题目 (6)2.2 设计内容及要求 (6)2.3 设计原理及方案 (6)第三章硬件设计 (7)3.1 A/D转换电路 (7)3.2LED显示电路 (7)第四章系统软件设计 (8)4.1主程序(main.c) (8)4.2 中断子程序(Isr.c) (9)4.3 LED子程序(LED.c) (10)第五章系统测试 (13)5.1 运行界面调试 (13)5.2 运行结果图 (14)第六章总结 (15)6.1结论 (15)6.2展望 (15)6.3致谢 (15)6.4参考文献 (16)第一章系统概要1.1 课题研究背景数字电压表(Digital Voltmeter)简称DVM,它采用的是数字化测量技术,把连续的模拟量,也就是连续的电压值转变为不连续的数字量,加以数字处理然后再通过显示器件显示,由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受青睐,数字式电压表就是基于这种需求而发展起来的.。

而采用单片机的数字电压表由于测量精度高、速度快,读数时也非常方便,抗干扰能力强,可扩展性强等优点已被广泛的应用于电子及电工的测量、工业自动化仪表、自动测试系统等智能化测量领域,显示出强大的生命力。

1.2数字电压表的分类目前实现电压数字化测量的方法仍然模-数(A/D)转换的方法,而数字电压表种类繁多,型号新异,目前国际仍未有统一的分类方法。

而常用的分类方法有如下几种:1.按用途来分:有直流数字电压表,交、直流数字电压表,交直流万用表等。

2.按显示位数来分:有4位,5位,6位,7位,8位等。

3.按测量速度来分:有低准确度,中准确度,高准确度等。

4.按测量速度来分:有低速,中速,高速,超高速等。

1.3系统功能将被测电压信号,送入A/D转换器进行转换,然后送到单片机中进行数据处理,处理后得到的电压值再送到LED中显示。

第二章设计总方案2.1 设计题目数字电压表2.2 设计内容及要求利用单片机与A/D转换器件设计一个数字电压表,能够测量0~5V之间的直流电压值,并用4位数码管实时显示该电压值。

2.3 设计原理及方案第三章 硬件设计3.1 A/D 转换电路3.2LED 显示电路此系统是在LED 驱动电路的设计上,利用单片机P0口上外接的上拉电阻来实现,即将LED 的A-G 段显示引脚和DP 小数点显示引脚并联到P0口与上拉电阻之间,这样,就可以加大P0口作为输出口的驱动能力,使得LED 能按照正常的亮度显示出数字。

第四章系统软件设计4.1主程序(main.c)//说明见工程文件夹下的Doc文件夹内Readme.txt文件//========================================================#include "includes.h" //包含总头文件int main(void){//1.声明主函数使用的局部变量uint_32 run_counter;uint_16 ADCResult;uint_16 d;//ADCResult计算后的值uint_16 c;//uint_16 LEDindex;//uint_16 Dtable[4];uint_16 A;uint_16 B;//2.关总中断enter_critical(); // 进入临界区//3.初始化模块LEDInit(); //LED初始化light_init(LIGHT_PORT, LIGHT_PIN_RED, LIGHT_ON); //指示灯初始化light_init(LIGHT_PORT, LIGHT_PIN_BLUE, LIGHT_OFF);uart_init (UART_TEST,BUSCLK,9600); //串口1初始化, 总线时钟24000Khz,波特率9600adc_init(SingleEND,10,SAMPLE32); //ADC0初始化单端输入,10位采样精度,32次硬件均值//4.全局变量及主函数局部变量赋初值run_counter=0;ADCResult=0;//5.使能模块中断及总中断uart_enable_re_int(UART_TEST);init_critical(); //开总中断uart_send_string(UART_TEST, "This is ADC Test!\r\n");//进入主循环//主循环开始============================================================= for(;;){run_counter++;//循环计数到一定的值,使小灯的亮、暗状态切换if (run_counter > RUN_COUNTER_MAX){run_counter = 0;//指示灯的亮、暗状态切换light_change(LIGHT_PORT, LIGHT_PIN_RED);light_change(LIGHT_PORT, LIGHT_PIN_BLUE);//进行一次模块0通道14采样ADCResult = adc_read(14);//将采集的A/D值通过串口发送到PC//uart_send1 (UART_TEST ,(uint_8)(ADCResult>>8));//uart_send1 (UART_TEST ,ADCResult);} // end_ifd=ADCResult*5/4096;A=d*10/10;B=d*10%10;Dtable[0]=0;Dtable[1]=A+10;Dtable[2]=B;Dtable[3]=21;for(LEDindex=0;LEDindex<=3;LEDindex++){if(LEDindex>=4){LEDindex=0;}c=LEDchangeCode(Dtable[LEDindex]);LEDshow1(LEDindex,c);}} // end_while//主循环结束============================================================= return 0;}4.2 中断子程序(Isr.c)//===================================================================== //文件名称:isr.c//功能概要:中断底层驱动构件源文件//版权所有:苏州大学飞思卡尔嵌入式中心()//更新记录:2013-4-7//===================================================================== #include "includes.h"//========================测试===============================//串口1接收中断服务例程void isr_uart1_re(void){uint_8 ch;uint_8 flag = 1;enter_critical();ch = uart_re1(UART_TEST, &flag);if (0 == flag){uart_send1(UART_TEST, ch);}exit_critical();}4.3 LED子程序(LED.c)//===================================================================== // 文件名称:led.c// 功能概要:led构件源文件// 版权所有: 苏州大学飞思卡尔嵌入式中心()// 版本更新: 2013-04-18 V1.2//===================================================================== #include "led.h"//led位选端口struct GPIO led_cs[4]={{LED_CS0_PORT,LED_CS0},{LED_CS1_PORT,LED_CS1},{LED_CS2_PORT,LED_CS2},{LED_CS3_PORT,LED_CS3},};//led数据端口struct GPIO led_d[8]={{LED_D1_PORT,LED_D1},{LED_D2_PORT,LED_D2},{LED_D3_PORT,LED_D3},{LED_D4_PORT,LED_D4},{LED_D5_PORT,LED_D5},{LED_D6_PORT,LED_D6},{LED_D7_PORT,LED_D7},{LED_D8_PORT,LED_D8},};//===================================================================== //函数名称:LEDInit//函数返回:无//参数说明:无//功能概要:LED初始化。