您的当前位置:首页数字电压表,基于MSP430单片机的简易数字电压表论文

数字电压表,基于MSP430单片机的简易数字电压表论文

来源:小侦探旅游网


课 程 设 计

基于MSP430单片机的简易数字电压表论文

学院:电气自动化与电子信息工程学院 班级: 指导老师: 小组人员:

摘 要

单片计算机即单片微型计算机。(Single-Chip Microcomputer),是集

CPU ,RAM ,ROM 定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。近年来随着计算机在社会领域的渗透, 单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。而16位MSP430系列单片机正成为单片机的主流。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。

简易电压表是利用模拟量转换成数字量经MSP430内部自带的12位数模转换器采样处理后,经过计算反映在显示器上,它可以分析0-2.5V的电压。

一、 设计要求:

1、输入范围::0~+2.5V; 2、精度:高于0.2%; 3、通道数:1路 4、采样频率:100HZ

5、显示器:1602LCD液晶显示器。

二、 核心芯片介绍:

1、MSP430F247

它是一种超低功耗、具有强大的处理能力,单周期指令周期、并且带硬件乘法起、具有温度适应范围广,抗干扰能力强,小巧灵活,性价比高的芯片。 下面是MSP430F247芯片所有的硬件资源:

基本时钟系统(片内DCO、16MHZ或32KHZ可选);

Timer_A3(带3个比较/捕获寄存器和PWM输出的16位定时器); 在线比较器/斜边A/D转换; 看门狗定时器/通用定时器;

4个I/O端口,其中1、2端口有中断功能; USI、USCI;

16位A/D转换器;

1~32Kbde Flash存储容量; 程序代码保护; 2个配置放大器。 2、LCD1602

现在字符型液晶模块已经是单片机应用中最常见的显示器件了,它具有

体积小、功耗低、显示内容丰富等特点。 1602型LCD可以显示2行16个字符,有8位数据总线D0~D7和RS、R/W、

EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光灯功能。

1

三、方案设计:

利用MSP430F247内部的12位ADC模数转换器,对被测量的模拟电压进行单通道单次采样,然后编写对应的采样、量化程序使单片机能够输出数字电压,然后通过对LCD1602进行初始化等一系列的设置在屏幕是显示单片机输出的电压值。

四、硬件设计:

1、 JTAG下载盒的制作:

2、 5V电源的制作:

2

3、 MSP430F247开发板的制作:

五、软件设计

1、 流程图

开始LCD1602初始化ADC12初始化中断开始采样、数据处理液晶显示结束 3

2、 程序清单

#include \"msp430.h\"

/******************宏定义**************************/ #define DataDir P4DIR #define DataPort P4OUT #define CtrlDir P3DIR

#define CLR_RS P3OUT &=~BIT0; #define SET_RS P3OUT |=BIT0; #define CLR_RW P3OUT &=~BIT1; #define SET_RW P3OUT |=BIT1; #define CLR_EN P3OUT &=~BIT2; #define SET_EN P3OUT |=BIT2; #define uint unsigned int #define uchar unsigned char static uchar adc_flag=0; uint AD_TEMP;

unsigned char *str1=\"Voltage is\"; unsigned char str2[15]; int vlt;

/*******************延时5ms**************************/ Delay5ms() {

unsigned int i; for(i=0;i<400;i++); }

/****************** 写指令**************************/ void wr_com(unsigned char com) { Delay5ms(); CtrlDir=0X07; CLR_RS; CLR_RW; CLR_EN;

DataDir=0XFF; DataPort=com; Delay5ms(); SET_EN; Delay5ms(); CLR_EN; }

/*******************写数据**************************/

4

void wr_dat(unsigned char dat) { Delay5ms(); CtrlDir=0X07; SET_RS; CLR_RW; CLR_EN;

DataDir=0xFF; DataPort=dat; Delay5ms(); SET_EN; Delay5ms(); CLR_EN }

/*****************初始化**************************/ void lcd_in(void) { wr_com(0x38); wr_com(0x08); wr_com(0x01); wr_com(0x06); wr_com(0x0c); }

void display(unsigned char *p)//显示// {

while(*p!='\\0') { wr_dat(*p); p++;

Delay5ms(); } }

void int_adc() {

P6SEL|=0x01;

ADC12CTL0|=ADC12ON+SHT0_2+REF2_5V+REFON; ADC12CTL1|=ADC12SSEL1+ADC12SSEL1; ADC12MCTL0=0X10; ADC12IE|=0X01; ADC12CTL0|=ENC; }

#pragma vector=ADC12_VECTOR __interrupt void ADC12ISR(void) {

while((ADC12CTL1&0X01)==1);

5

adc_flag=1;

AD_TEMP=ADC12MEM0; }

void main() {

WDTCTL=WDTPW+WDTHOLD; lcd_in(); int_adc(); _EINT();

wr_com(0x80); Delay5ms(); display(str1); wr_com(0xc0); Delay5ms();

str2[0]=ADC12MEM0/1638+'0'; wr_dat(str2[0]); Delay5ms(); str2[1]='.'; wr_dat(str2[1]); Delay5ms();

str2[2]=ADC12MEM0*10/1638%10+'0'; wr_dat(str2[2]); adc_flag=1; while(1) {

while(adc_flag==1) {

ADC12CTL0|=ADC12SC; ADC12CTL0&=~ADC12SC; adc_flag=0; } } }

6

六、总结

经过两个星期的课程设计,除了巩固了我们所学的知识外,还使我们对16位单片机的内部构成有了更全面的认识和更深入的了解。在自作单片机开发板和电源的的过程中,不仅提高了我们小组成员每个人的动手能力,还让我们养成了遇到问题不要气馁,要勤于思考、勤于查资料的好习惯。更重要的是在这次课程设计中,锻炼了我们整个团队的协作能力,提高了我们的凝聚力。因此我们觉得在这次的课程设计中受益匪浅。

七、参考文献

[1] 杨素行.模拟电子技术基础简明教程(第三版).北京:高等教育出版社,2006. [2] 谢兴红.MSP430单片机基础与实践.北京:北京航空航天出版社,2008.

[3] 魏小龙.MSP430系列单片机接口技术及系统设计实例.北京:北京航空航天出版社,

2002.

[4] 谢自美.电子线路设计实验测试(第三版).武汉:华中科技大学出版社,2006.

7

因篇幅问题不能全部显示,请点此查看更多更全内容