课 程 设 计
基于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
因篇幅问题不能全部显示,请点此查看更多更全内容