#include <msp430x14x.h>
#include "systerminit.h"
#include "lcd.h"
#include "lcd.c"
#include "ds1302.c"
#include "18b20.c"
#include "flash.c"
#include "display.c"
void main(void)
{
P1DIR|=0xff;P1OUT|=0xff;
P2DIR|=0xff;P2OUT|=0xff;
P3DIR|=0xff;P3OUT|=0xff;
P4DIR|=0xff;P4OUT|=0xff;
P5DIR|=0xff;P5OUT|=0xff;
P6DIR|=0xff;P6OUT|=0xff;
unsigned char i;
WDTCTL=WDT_ADLY_250; //定时器模式250ms中断一次
IE1|=WD
tiE;
BCSCTL1&=~XT2OFF; //打开XT2振荡器
BCSCTL2|=SELM1; //MCLK为8MHZSMCLK时钟源选择DCO 800khz
do{
IFG1&=~OFIFG; //清楚振荡器错误标志
for(i=0;i<100;i++)
_NOP();
}
while((IFG1&OFIFG)!=0); //如果标志位1则继续循环等待
IFG1&=~OFIFG;
delay_ms(5);
P3DIR|=BIT0+BIT1+BIT2;//将液晶相关控制位设为输出
LCDDATOUT; //液晶数据口设置输出
P4OUT=0xff; //初始化液晶数据口为高电平
LCD_INIT(); //初始化液晶
delay_ms(500);
P1DIR=0xdf; //键盘端口初始化
P1OUT=0xFF;
P1IE|=BIT5; //允许中断
P1IES=0xff; //下降沿中断
P2DIR=0xff;
P2OUT=0xff;
/********初始化flash********/
FCTL2=FWKEY+FSSEL1+FN0;
/********初始化定时器*********/
TACTL|=TASSEL_1+MC_2+TACLR;
TACCR0=1;
TACCR1=2048;
wellcomplay(); //显示欢迎画面
read_segA(); //读取flash闹钟数据
LCD_CLEAR(); //清屏
DS1302_INIT(); //初始化DS1302
GET_TIME(); //读取一次时间
lunar_calendar(); //进行一次阴历的转换
display(); //显示时间画面
DS_INIT(); //初始化18B20
DS_write(0xcc); //跳过ROM指令
DS_write(0x44); //启动转换
_BIS_SR(GIE); //开总中断
while(1)
{
_BIS_SR(LPM2_bits);//进入低功耗
if(keydownflag)//如果有按键按下进入键值分析处理函数
{
keydownflag=0;//清除标志
//keyvalue_const();//键值分析处理
}
if(flag&&(setflag==0))//1s刷新一次数据
{
flag=0;
GET_TIME();//读取时间
temperature=GET_TEMP();//获取温度
display(); //刷新屏幕
}
switch(setflag)//根据状态标志的值显示相应的画面
{
case 1:play_menu_1();IE1&=~WDTIE; _EINT();break;//主菜单一
case 2:play_menu_2();IE1&=~WDTIE; _EINT();break;//主菜单二
case 3:play_menu_1_0();lastplay=1;IE1&=~WDTIE; _EINT();break;//时间设置画面
case 4:play_menu_2_0();lastplay=1;IE1&=~WDTIE; _EINT();break;//闹钟设置画面
default :break;
}
}
}
#pragma vector=WDT_VECTOR
__interrupt void wdt_time(void)
{
temp=second;
second=READ_DS1302(READ_SECOND);
if(second!=temp)
{
flag=1;
_BIC_SR_IRQ(LPM2_bits);
}
}
#pragma vector=PORT1_VECTOR
__interrupt void port1(void)
{
P1IFG&=~BIT5;
keydownflag=1;
_DINT();//关闭总中断
_BIC_SR_IRQ(LPM2_bits);
}
#pragma vector=TIMERA0_VECTOR
__interrupt void time_A0(void)
{
if(acflag1&&hour==achour1&&minute==acminute1) P2OUT&=~BIT1;
if(acflag2&&hour==achour2&&minute==acminute2) P2OUT&=~BIT2;
P6DIR|=BIT2;//蜂鸣器端口设为输出模式
BUZ_ON;
}
#pragma vector=TIMERA1_VECTOR
__interrupt void time_A1(void)
{
if(acflag1&&hour==achour1&&minute==acminute1) P2OUT|=BIT1;
if(acflag2&&hour==achour2&&minute==acminute2) P2OUT|=BIT2;
BUZ_OFF;
P6DIR&=~BIT2;//蜂鸣器端口设为输出模式
TACCTL1&=~CCIFG;
}
你要用串口收发什么?
一周热门 更多>