MSP430单片机实验报告v3.0
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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的按下事件处理函数
* 入口参数:无
* 出口参数:无
* 说明:无
* 范例:无