MSP430单片机实验报告v3.0

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MSP430单片机课程设计

一.设计要求

数字温度计

(1)用数码管(或LCD)显示温度和提示信息;

(2)通过内部温度传感器芯片测量环境温度;

(3)有手动测量(按测量键单次测量)和自动测量(实时测量)两种工作模式;

(4)通过按键设置工作模式和自动测量的采样时间(1秒~1小时);

(5)具备温度报警功能,温度过高或过低报警。

二.系统组成

系统由G2Launch Pad及其拓展板构成,单片机为MSP430G2553。

I2的通信方式对IO进行拓展,芯片为TCA6416A;

使用C

使用HT1621控制LCD;

三.系统流程

拓展的四个按键key1、key2、key3、key4分别对应单次测量、定时测量、定时时间的增、减。定时时间分别为1s,5s,15s,30s,60s。在自动测量模式下,当温度超过设定温度上限

即报警,报警时在LCD屏幕显示ERROR同时LED2闪烁,在5s后显示0℃。此时可重新开始手动或自动测量温度。

系统示意图:

四.演示

a)手动测量温度

b)自动测量温度

c)报警

显示ERROR同时LED闪烁d)设置时间界面

五.代码部分

#include "MSP430G2553.h"

#include "TCA6416A.h"

#include "LCD_128.h"

#include "HT1621.h"

#include "DAC8411.h"

#define CPU_F ((double)8000000)

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) static int t=0;

long temp;

long IntDeg;

void ADC10_ISR(void);

void ADC10_init(void);

void LCD_Init();

void LCD_Display();

void GPIO_init();

void I2C_IODect();

void Error_Display();

void WDT_Ontime(void);

void LCD_Init_AUTO();

void LCD1S_Display();

void LCD5S_Display();

void LCD15S_Display();

void LCD30S_Display();

void LCD60S_Display();

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; //关狗

BCSCTL1 = CALBC1_8MHZ; /* 设定系统时钟频率,使程序定时精准 */

DCOCTL = CALDCO_8MHZ;

//----提示初始化成功----

GPIO_init();

LCD_Init();

ADC10_init();

LCD_Display();

__enable_interrupt(); //使能总中断

while(1)

{

PinIN();

__bis_SR_register(LPM3_bits);//休眠

}

}

/********************************************************************** ***/

/********************************************************************** ********************************

* 名称:GPIO_Init()

* 功能:设定按键和LED控制IO的方向

* 入口参数:无

* 出口参数:无

* 说明:无

* 范例:无

*************************************************************************** ***************************/

void GPIO_init()

{

//-----设定P1.0和P1.6的输出初始值-----

P1DIR |= BIT0; //设定P1.0和P1.6为输出

P1OUT |= BIT0; //设定P1.0初值

//-----启用内部上拉电阻-----

P2REN |= BIT3; //启用P2.3内部上下拉电阻

P2OUT |= BIT3; //将电阻设置为上拉 P1REN |= BIT3; //启用P1.3内部上下拉电阻P1OUT |= BIT3; //将电阻设置为上拉

//-----配置P2.3中断参数-----

P2DIR &= ~BIT3; // P2.3设为输入(可省略)

P2IES |= BIT3; // P2.3设为下降沿中断

P2IE |= BIT3 ; // 允许P1.3中断 P1DIR &= ~BIT3; // P1.3设为输入(可省略) P1IES |= BIT3; // P1.3设为下降沿中断

P1IE |= BIT3 ; // 允许P1.3中断}

/********************************************************************** ********************************

* 名称:PORT2_ISR()

* 功能:响应P1口的外部中断服务

* 入口参数:无

* 出口参数:无

* 说明:P2.0~P2.8共用了PORT1中断,所以在PORT2_ISR()中必须查询标志位P1IFG才能知道

* 具体是哪个IO引发了外部中断。P1IFG必须手动清除,否则将持续引发PORT1中断。

* 范例:无

*************************************************************************** ***************************/

#pragma vector = PORT2_VECTOR

__interrupt void PORT2_ISR(void)

{

//-----启用Port2事件检测函数-----

I2C_IODect(); //检测通过,则会调用事件处理函数

P2IFG=0; //退出中断前必须手动清除IO口中断标志

__bic_SR_register_on_exit(LPM0_bits );

}

/********************************************************************** ********************************

* 名称: I2C_IO10_Onclick()

* 功能:TCA6416A的扩展IO1.0的按下事件处理函数

* 入口参数:无

* 出口参数:无

* 说明:无

* 范例:无

相关文档
最新文档