基于单片机KL25的数字电压表Word文档格式.docx
《基于单片机KL25的数字电压表Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机KL25的数字电压表Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
AbstractDigitalvoltagemeter(DigitalVoltmeter)referredtoasDVM,itistheuseofdigitalmeasuringtechnology,thecontinuousanalog(DCinputvoltage)intoanon-continuous,discretedigitalformandtodisplaytheinstrument.Analogvoltagemeterfeaturesatraditionalsingle,lowaccuracy,cannotmeetthedigitalage,usingthesinglechipdigitalvoltagemeter,fromthehighprecision,anti-interferenceability,scalability,JiChengconvenience,andPCcancommunicateinrealtime.Atpresent,byavarietyofsingleA/Dconverterconsistingofdigitalvoltagemeter,hasbeenwidelyusedinelectronicandelectricalmeasurement,industrialautomation,instrumentation,automatedtestsystems,intelligentmeasurement,showingstrongvitality.Atthesametime,theDVMextensiontothevariousgeneralandspecificdigitalinstruments,butalsothepowerandnon-powermeasurementuptoanewlevel.Thischapterfocusesonsingle-chipA/Dconverter,andtheyformbythemicrocontroller-baseddigitalvoltmeterworks.
KeywordsDigitalvoltmeterA/DconverterPCVoltagemeasurement
第一章系统概要
1.1课题研究背景
数字电压表(DigitalVoltmeter)简称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.1A/D转换电路
No
Yes
3.2LED显示电路
此系统是在LED驱动电路的设计上,利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP小数点显示引脚并联到P0口与上拉电阻之间,这样,就可以加大P0口作为输出口的驱动能力,使得LED能按照正常的亮度显示出数字。
第四章系统软件设计
4.1主程序(main.c)
//说明见工程文件夹下的Doc文件夹内Readme.txt文件
//========================================================
#include"
includes.h"
//包含总头文件
intmain(void)
{
//1.声明主函数使用的局部变量
uint_32run_counter;
uint_16ADCResult;
uint_16d;
//ADCResult计算后的值
uint_16c;
//
uint_16LEDindex;
//
uint_16Dtable[4];
uint_16A;
uint_16B;
//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,波特率9600
adc_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,"
ThisisADCTest!
\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_if
d=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
//主循环结束=============================================================
return0;
}
4.2中断子程序(Isr.c)
//=====================================================================
//文件名称:
isr.c
//功能概要:
中断底层驱动构件源文件
//版权所有:
苏州大学飞思卡尔嵌入式中心()
//更新记录:
2013-4-7
//========================测试===============================
//串口1接收中断服务例程
voidisr_uart1_re(void)
uint_8ch;
uint_8flag=1;
ch=uart_re1(UART_TEST,&
flag);
if(0==flag)
uart_send1(UART_TEST,ch);
exit_critical();
4.3LED子程序(LED.c)
//文件名称:
led.c
//功能概要:
led构件源文件
//版权所有:
苏州大学飞思卡尔嵌入式中心()
//版本更新:
2013-04-18V1.2
led.h"
//led位选端口
structGPIOled_cs[4]=
{LED_CS0_PORT,LED_CS0},
{LED_CS1_PORT,LED_CS1},
{LED_CS2_PORT,LED_CS2},
{LED_CS3_PORT,LED_CS3},
};
//led数据端口
structGPIOled_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初始化。
voidLEDInit()
{
uint_8i=0;
//定义8根数据线为输出,初始输出0
for(i=0;
i<
8;
i++)
gpio_init(led_d[i].gpio_port,led_d[i].gpio_pin,1,0);
//定义4位选线定义为输出,初始输出0
4;
gpio_init(led_cs[i].gpio_port,led_cs[i].gpio_pin,1,0);
LEDshow1
i:
指定LED哪一位显示,c:
显示的内容
指定LED的第i位显示c。
voidLEDshow1(uint_8i,uint_8c)
uint_8temp;
uint_8j;
//位选全部置0
for(j=0;
j<
j++)
gpio_set(led_cs[j].gpio_port,led_cs[j].gpio_pin,0);
//数据上线
=7;
temp=(c>
j)&
0x01;
gpio_set(led_d[j].gpio_port,led_d[j].gpio_pin,temp);
//选择的位选置1
gpio_set(led_cs[i].gpio_port,led_cs[i].gpio_pin,1);
//显示码表
constuint_8Dtable[24]=
//0123456789
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
//10111213141516171819
//0.1.2.3.4.5.6.7.8.9.
0xBF,0x86,0xDB,0x4F,0x66,0x6D,0x7D,0x07,0xFF,0x6F,
//202122(全亮)23(全灭)
//EF
0x79,0x3E,0xFF,0x00};
LEDchangeCode
返回数据num对应的显示码
num:
需要转换成显示码的数字
数字转成显示码
//=====================================================================
uint_8LEDchangeCode(uint_8num)
returnDtable[num];
第五章系统测试
5.1运行界面调试
图一
图二
5.2运行结果图
第六章总结
6.1结论
经过一个多星期的努力,简易数字电压表基本完成。
但设计中的不足之处仍然存在。
通过这次设计我学会了CodeWarriorDevelopmentStudio软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计等内容,积累了不少经验。
数字电压表使用性强、结构简单、成本低、外接元件少。
通过本次设计,我对单片机这门课有了进一步的了解。
,在调试过程中遇到很多问题,发现自己在硬件上的理论知识学得不够扎实。
在以后的实践中,我将继续努力学习这方面的理论知识,并理论联系实际,争取在电路设计方面能有所提升。
6.2展望
一个多星期的课程设计,让我知道了什么是理论与实践相结合。
这次课程设计,使我对单片机这门课更加感兴趣。
做好这个课程设计,首先要提高自己的能力。
不打好专业基础是很难完成实验的,所以日常的学习不能马虎,不能随便敷衍。
其次是团队合作。
世界上没有相同的叶子,当然也没有两个不存在差异的人。
在一起的时候多多少少有矛盾,所以,与人交流很重要,这样可以使团队作用发挥到极致。
也便于认清自己和他人的性格,这样可以更好的找到友好并且高效的合作方法,合理分配任务,合力达成目标。
6.3致谢
实习期间,我收获很多书本上学不到的知识。
首先感谢老师给我们这次课程设计的机会,让我们对书本知识有了更熟练的掌握。
在此,非常感谢指导老师袁老师,感谢您在课程设计上给予我们的指导、提供给我们的帮助。
袁老师您严谨细致、一丝不苟的作风一直是我学习的榜样。
您循循善诱的教导和不拘一格的思路给予我无尽的启迪,课设的成功离不开您的悉心指导。
在此,向老师您致以诚挚的谢意和崇高的敬意。
同时从您身上我也学到了许多做人的道理,所有这些都将使我在今后的生活和工作中得到很多帮助。
其次还要感谢我的同学。
刚开始调试不出我们想要的结果,后来经过你们的指点,我尝试着去找错误,最终才得以完成。
所以说这个过程累并快乐着。
谢谢你们给予的帮助,让我能够顺利完成每一阶段的任务。
因为你们,我们才能组成电子班这个大家庭。
6.4参考文献
[1]王宜怀、郭芸等.嵌入式技术基础与实践(第三版).北京:
清华大学出版社.2013
[2]张越等.温度传感器的数字温度计[J].微电子学.2007
[3]李朝青.单片机原理及接口技术(简明修订版).杭州:
北京航空航天大学出版社.1998
[4]李广弟.单片机基础[M].北京:
北京航空航天大学出版社.1994
[5]田泽.嵌入式系统开发与应用.北京:
北京航天航空大学出版社.2006
[6]田泽.嵌入式系统开发与应用教程.北京:
[7]王粉花、王志良.嵌入式系统与单片机实践教程.北京:
清华大学出版社.2010