
基于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,并且具有字符对比度调节和背光灯功能。
三、方案设计:
利用MSP430F247内部的12位ADC模数转换器,对被测量的模拟电压进行单通道单次采样,然后编写对应的采样、量化程序使单片机能够输出数字电压,然后通过对LCD1602进行初始化等一系列的设置在屏幕是显示单片机输出的电压值。
四、硬件设计:
1、JTAG下载盒的制作:
2、5V电源的制作:
3、MSP430F247开发板的制作:
五、软件设计
1、流程图
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;
}
/*******************写数据**************************/
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);
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;
}
}
}
六、总结
经过两个星期的课程设计,除了巩固了我们所学的知识外,还使我们对16位单片机的内部构成有了更全面的认识和更深入的了解。在自作单片机开发板和电源的的过程中,不仅提高了我们小组成员每个人的动手能力,还让我们养成了遇到问题不要气馁,要勤于思考、勤于查资料的好习惯。更重要的是在这次课程设计中,锻炼了我们整个团队的协作能力,提高了我们的凝聚力。因此我们觉得在这次的课程设计中受益匪浅。
七、参考文献
[1] 杨素行.模拟电子技术基础简明教程(第三版).北京:高等教育出版社,2006.
[2] 谢兴红.MSP430单片机基础与实践.北京:北京航空航天出版社,2008.
[3] 魏小龙.MSP430系列单片机接口技术及系统设计实例.北京:北京航空航天出版社,2002.
[4] 谢自美.电子线路设计实验测试(第三版).武汉:华中科技大学出版社,2006.
