完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#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|=WDtiE; 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; } |
|
相关推荐
3个回答
|
|
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3044个成员聚集在这个小组
加入小组2951 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3645 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2354 浏览 1 评论
4822 浏览 1 评论
2582 浏览 1 评论
1348浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3645浏览 2评论
2951浏览 1评论
1539浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 04:21 , Processed in 1.339340 second(s), Total 86, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号