基于51单片机stc89c52的温湿度检测系统.docx
《基于51单片机stc89c52的温湿度检测系统.docx》由会员分享,可在线阅读,更多相关《基于51单片机stc89c52的温湿度检测系统.docx(14页珍藏版)》请在冰豆网上搜索。
基于51单片机stc89c52的温湿度检测系统
课程设计
基于msp430单片机F5529的文本提取及触摸按键测试
单位:
11电子科学与技术
姓名:
康自林
学号:
1110359
【摘要】本设计以MSP430单片机的F5529芯片为核心,利用程序代码提取已存信息以及触摸按键的测试
【关键词】msp430单片机触摸按键提取文本
一、设计目的及意义……………………………………
二、系统软件基本思路…………………………………
三、系统调试……………………………………………
四、程序……………………………………………
基于msp430f5529单片机的简单程序设计
一、设计目的及意义
在不用sd卡的情况下,利用芯片内部小容量存储来实现提取文本功能,以及利用触摸按键来显示不同图案
二、msp430f5529介绍
1、超低功率
a)230μA/MHz
b)1.9μA待机模式
c)从待机模式唤醒仅需<5μs
2、增强性能
d)高达25MHz
e)全线产品8MHz(1.8-3.6V)
f)1.8VISP闪存擦除及写入
g)自动防故障,灵活的时钟系统
3、创新性能
h)集成LDO,BOR,WDT+,RTC
i)多通道DMA支持待机模式下的数据传送
j)更多连接方式:
USB,RF
k)AES加密,RTC后备电池
l)用户定义的引导装入程序
m)业界领先的代码密度
4、主电路图
三、系统软件基本思路
根据系统定义,用C语言以及430单片机语言编写代码,并使系统能够正常工作,流程图如下:
四.程序
1.显示进入页面
#include
#include"msp430.h"
#include"HAL_PMM.h"
#include"HAL_UCS.h"
#include"HAL_Board.h"
#include"HAL_Buttons.h"
#include"HAL_Cma3000.h"
#include"HAL_Dogs102x6.h"
#include"HAL_Menu.h"
#include"HAL_Wheel.h"
#include"LPM.h"
#include"PMM.h"
#include"lab2.h"
uint16_ttimeoutCounter;
//ThisimagehasbeencreatedbyImageDogusing'ti_bug.jpg'
staticconstuint8_ttiBug[]=
{
0x42,//Imagewidthinpixels
0x08,//Imageheightinrows(1row=8pixels)
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x03,0x01,0x00,0x03,0x03,0x02,0x02,0x03,0x03,0x02,0x02,0x03,0x03,0x00,
0x02,0x02,0x03,0x07,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x20,0x20,0x3F,0xBF,0x02,0xFA,0xFA,0x92,0x93,0xFF,0xFF,0x93,0x92,0xFA,0xFA,0x02,
0x41,0x4F,0xFF,0xFF,0x4E,0x46,0xEB,0xE9,0x49,0x49,0x4F,0x4F,0x49,0xE9,0xE9,0x08,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x20,0xE0,0xC0,0xE0,0xE0,0x40,0xC0,0x80,0xF0,0xF0,0x80,0xC0,0x40,0x60,0x20,
0x80,0x00,0xF0,0xF0,0x00,0x20,0x20,0x20,0x20,0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x04,0x44,0x67,0x37,0x14,0x0D,0x1D,0x79,0x71,0x41,0x41,0x41,0x7D,0x7D,0x05,0x04,
0x04,0xC4,0x77,0x37,0x00,0x04,0x04,0x04,0x04,0xFF,0xFF,0xFF,0x04,0x04,0x04,0x04,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xFC,0xFC,0x1A,0x1E,0xC6,0xE4,0x7C,0x18,0x18,0x7C,0xE4,0xC6,0x02,0x02,
0x00,0x00,0xFE,0xFE,0x0C,0x18,0x18,0x00,0x00,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
voidmain(void)
{
uint8_tcontrast=*((unsignedchar*)contrastSetpointAddress);//读取FLASH中对比度值
uint8_tbrightness=*((unsignedchar*)brightnessSetpointAddress);//读取FLASH中背光值
//Initializeaccelerometeroffsetfromflash
Cma3000_setAccel_offset(*((unsignedchar*)accelXcalibrationAddress),//初始化加速度偏移量
*((unsignedchar*)accelYcalibrationAddress),
*((unsignedchar*)accelZcalibrationAddress));
//StopWDT
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
//BasicGPIOinitialization
Board_init();//初始化GPIO
//SetVcoretoaccomodateformax.allowedsystemspeed
SetVCore(3);//设VCore为最大
//Use32.768kHzXTALasreference
LFXT_Start(XT1DRIVE_0);//利用LFXT1(32.768kHZ)作为时钟参考
//Setsystemclocktomax(25MHz)
Init_FLL_Settle(25000,762);//利用FLL(锁频环)将系统时钟设为最大25MHZ
SFRIFG1=0;//清中断标志
SFRIE1|=OFIE;//使能晶振失效中断
//Globallyenableinterrupts
__enable_interrupt();//使能全局中断
//Setuprealtimeclock
//SetupRTC();//设置实时时钟
//SetupLCD
Dogs102x6_init();//初始化LCD
Dogs102x6_backlightInit();//背光初始化
//ContrastnotprogramedinFlashYet
if(contrast==0xFF)//若当前FLASH中无对比度值,则将对比度值设为11(默认)
//SetDefaultContrast
contrast=11;
//BrightnessnotprogramedinFlashYet
if(brightness==0xFF)//若当前FLASH中无背光值,则将背光值设为11(默认)
//SetDefaultBrightness
brightness=11;
Dogs102x6_setBacklight(brightness);//设置初始背光值
Dogs102x6_setContrast(contrast);//设置初始对比度值
Dogs102x6_clearScreen();//清屏
//Setupwheel
Wheel_init();//初始化齿轮电位计
Buttons_init(BUTTON_ALL);//初始化按键
Buttons_interruptEnable(BUTTON_ALL);//使能所有按键中断
buttonsPressed=0;//键值清零
//DisplayTIlogo
Dogs102x6_imageDraw(tiBug,0,16);//显示图案
//Waitforbuttonpress
while(!
buttonsPressed)//等待按键被按下,或者超时退出等待
{
for(timeoutCounter=0;timeoutCounter<0xFFFF;timeoutCounter++)
{
if(buttonsPressed)
break;
__delay_cycles(1000);
}
//Timeoutbreak
break;//超时退出
}
Dogs102x6_clearScreen();
buttonsPressed=0;
//显示文字说明:
Dogs102x6_stringDraw(3,10,"Welcome",DOGS102x6_DRAW_NORMAL);
Dogs102x6_stringDraw(4,0,"toNKuniversity",DOGS102x6_DRAW_NORMAL);
Dogs102x6_stringDraw(7,0,"orpressS1|S2",DOGS102x6_DRAW_INVERT);
//Waitforbuttonpress
while(!
buttonsPressed)//等待按键被按下,或者超时退出等待
{
for(timeoutCounter=0;timeoutCounter<0xFFFF;timeoutCounter++)
{
if(buttonsPressed)
break;
__delay_cycles(2000);
}
//Timeoutbreak
break;
}
//主循环
while
(1)
{
lab2();//
}
}
2.主程序
#include
#include"msp430.h"
#include"HAL_PMM.h"
#include"HAL_UCS.h"
#include"HAL_Board.h"
#include"HAL_Buttons.h"
#include"HAL_Dogs102x6.h"
#include"HAL_Menu.h"
#include"HAL_Wheel.h"
#include"Clock.h"
#include"LPM.h"
#include"Random.h"
#include"PMM.h"
#include"Demo_Cube.h"
#include"CTS_Layer.h"
#include"stdlib.h"
#include"lab2.h"
staticconstchar*constcapMenuText[]={
"==LAB2:
CapApp===",
"1.test1",
"2.CapDemo",
"3.happy"
};
char*itoa(int,char*,int);
//ForwardDeclaredFunction
voidtest1(void);
voidCapDemo(void);
/***************************************************************************//**
*@briefThemenuoflab2.
*@paramnone
*@returnnone
******************************************************************************/
voidlab2(void)
{
uint8_tselection=0;
buttonsPressed=0;
Dogs102x6_clearScreen();
Dogs102x6_stringDraw(7,0,"*S1=EnterS2=Esc*",DOGS102x6_DRAW_NORMAL);
selection=Menu_active((char**)capMenuText,3);
if(buttonsPressed&BUTTON_S2);
else
switch(selection)
{
case1:
test1();break;//读取已存文件
case2:
CapDemo();break;//触摸按键柱形图
default:
break;
}
}
/***************************************************************************//**
*@briefCapLED.
*@paramnone
*@returnnone
******************************************************************************/
voidtest1(void)
{
uint8_tsliderPosition=0;
Board_ledOff(LED_ALL);//关闭所有LED
Dogs102x6_clearScreen();
buttonsPressed=0;
Dogs102x6_stringDraw(1,0,"SlideFingeron",DOGS102x6_DRAW_NORMAL);
Dogs102x6_stringDraw(2,0,"TouchPads",DOGS102x6_DRAW_NORMAL);
TI_CAPT_Init_Baseline(&slider);//触摸按键初始化
while(!
(buttonsPressed&BUTTON_S2))//S2按键按下退出程序
{
sliderPosition=TI_CAPT_Slider(&slider);
sliderPosition=(sliderPosition+10)/20;//得到触摸按键位置
//以下根据触摸按键位置点亮相应LED
switch(sliderPosition)
{
case1:
Dogs102x6_stringDraw(1,0,"page_one",DOGS102x6_DRAW_NORMAL);
Dogs102x6_stringDraw(2,0,"friend'name",DOGS102x6_DRAW_NORMAL);
break;
case2:
Dogs102x6_stringDraw(1,0,"page_two",DOGS102x6_DRAW_NORMAL);
Dogs102x6_stringDraw(2,0,"friend'message",DOGS102x6_DRAW_NORMAL);
break;
case3:
Dogs102x6_stringDraw(1,0,"page_three",DOGS102x6_DRAW_NORMAL);
Dogs102x6_stringDraw(2,0,"friend'message",DOGS102x6_DRAW_NORMAL);
break;
case4:
Dogs102x6_stringDraw(1,0,"page_four",DOGS102x6_DRAW_NORMAL);
Dogs102x6_stringDraw(2,0,"friend'message",DOGS102x6_DRAW_NORMAL);
break;
case5:
Dogs102x6_stringDraw(1,0,"page_five",DOGS102x6_DRAW_NORMAL);
Dogs102x6_stringDraw(2,0,"friend'message",DOGS102x6_DRAW_NORMAL);
break;
case(255/17):
break;
}
}
Board_ledOff(LED_ALL);
Dogs102x6_clearScreen();
buttonsPressed=0;
}
/***************************************************************************//**
*@briefAllowsusertoselectUSBapps
*@paramnone
*@returnnone
******************************************************************************/
voidCapDemo(void)
{
uint8_tquit=0,spacing=0,height=0,height1=0,i;
uint16_tdeltaCount[5];
Dogs102x6_clearScreen();
buttonsPressed=0;
TI_CAPT_Init_Baseline(&slider);//触摸按键初始化
buttonDebounce=0;
Dogs102x6_stringDraw(0,0,"==TouchDemo==",DOGS102x6_DRAW_NORMAL);
//menuactiveuntilselectionismade
while(!
quit)
{
TI_CAPT_Custom(&slider,deltaCount);//测量电容传感器变化
//5=No.ofsensors
for(i=0;i<5;i++)
{
spacing=20*i+10;