新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MSP430F449單片機RTC時鐘C語言程序(帶鬧鐘)

MSP430F449單片機RTC時鐘C語言程序(帶鬧鐘)

作者: 時間:2016-11-27 來源:網絡 收藏
功能:實現軟件萬年歷功能,并自動識別閏年,A屏每顯示5秒種就自動切換到B屏,B屏再顯示5秒種就自動切換到C屏,C屏再顯示5秒種就自動切換到A屏,通過按鍵在A屏、B屏和C屏之間切換,可通過按鍵手動設定和調整時間,當調整時對應調整位要有閃爍功能,有鬧鐘功能,可設置幾點幾分鬧鐘,當前時間等于鬧鐘時間時,用點亮LED指示,直到某個鍵(自定義)被按下時,熄滅LED燈

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

本文引用地址:http://butianyuan.cn/article/201611/322546.htm

#include

unsignedcharcnt;//計數器

unsignedchartian;//天寄存器

unsignedcharkey_code;//按鍵值

unsignedcharflag;//換屏標志位

unsignedchartwinkle_num;//閃爍標志位

unsignedcharfunction_flag;//加減功能標志位

unsignedcharfunction_ping1,function_ping2,function_ping3;//每屏閃爍位

unsignedcharchange_num;//閃屏時間定時

unsignedcharchange_ping;//三屏計數位

unsignedcharclock_flag;//鬧鐘標志位

unsignedcharping_flag;//按鍵跟蹤閃屏標志位

unsignedcharnum_flag;//按鍵計數閃屏標志位

unsignedchartian_flag;//天判斷標志位

unsignedcharrun_flag;//閏年判斷標志位

unsignedintkey_num=150;//按鍵消逗延時時間

unsignedintyear=2008;//

unsignedcharmonth=2;//

unsignedcharday=28;//

unsignedcharhour=23;//小時

unsignedcharmin=59;//

unsignedcharsec=57;//

unsignedcharnao_hour=0;//鬧鐘時

unsignedcharnao_min=0;//鬧鐘分

unsignedcharnao_sec=0;//鬧鐘秒

constunsignedchartianshu[13]=

{0,31,28,31,30,31,30,31,31,30,31,30,31};//每月天數表

chardigit[12]=//液晶顯示段碼表

{

0x7b,

0x12,

0x4f,

0x1f,

0x36,

0x3d,

0x7d,

0x13,

0x7f,

0x3F,

0x00

};

voidinit_clk(void);//初始化時鐘

voidkey_scan(void);//按鍵掃描

voidkey_value(void);//按鍵值確定

voidrtc(void);//時鐘掃描函數

voidrtc_show(void);//rtc掃描函數

voidleap_year(void);//閏年判定函數

voidmain(void)

{

init_clk();//時鐘初始化

while(1)

{

key_scan();//按鍵掃描

key_value();//鍵值確定

rtc_show();//RTC顯示

leap_year();//閏年判定

if((sec==nao_sec)&&(min==nao_min)&&(hour==nao_hour))//鬧鐘判定

{

clock_flag=1;//鬧鐘標志位置一

}

}

}

voidinit_clk(void)

{

unsignedchari;

WDTCTL=WDTPW+WDTHOLD;//關閉看門狗

FLL_CTL0|=XCAP14PF;//選擇14PF電容

IE2|=BTIE;//開啟基本定時器中斷

BTCTL=BT_ADLY_250+BTFRFQ1;//250ms16分頻

LCDCTL=LCDON+LCD4MUX+LCDP2;//STKLCD4Mux,S0-S14

P5SEL=0xFC;//選擇P5口第二功能

P1DIR|=0x01;//P1.0選擇輸出

_EINT();//開總中斷

for(i=0;i<19;i++)

{

LCDMEM[i]=0;//清LCD緩沖區(qū)

}

}

voidkey_scan(void)

{

staticunsignedintnum;//按鍵消抖計數器

if((P1IN&0x0e)!=0x0e)//如果不等于表示有鍵按下

{

num++;//消逗計數器加

key_code=0;//鍵值清零

}

else

{

num=0;//按鍵抖動,鍵值清零

key_code=0;//鍵值清零

}

if(num==key_num)//鍵值確定

{

num=0;//消逗寄存器清零

twinkle_num=0;//閃爍清零

key_code=((P1IN&0x0e)>>1)^0x07;//鍵值轉換

}

}

voidkey_value(void)

{

if(key_code==0x01)//第一個鍵被按下

{

function_flag=1;//功能鍵標志位置一

clock_flag=2;//關閉鬧鐘

if(change_ping==0)//第一屏

{

function_ping1++;//數值閃爍加

if(function_ping1==4)//閃爍到第三位

{

if(tian_flag==1)

{

function_ping1=1;//

}

else

{

function_ping1=0;//清零

function_flag=0;//功能鍵清零

}

}

change_num=0;//換屏計數器

}

if(change_ping==1)//第二屏

{

function_ping2++;//數值閃爍加

if(function_ping2==4)

{

function_ping2=0;

function_flag=0;//清零//功能標志位清零

}

change_num=20;//換屏時間計數器

}

if(change_ping==2)//第三屏

{

function_ping3++;//數值閃爍加

if(function_ping3==4)

{

function_ping3=0;//清零

function_flag=0;//功能標志位清零

}

change_num=40;//換屏計數器

}

}

if((key_code==0x02)&&(function_flag==1))//加法

{

clock_flag=2;//關閉鬧鐘

if(function_ping2==1)//秒閃爍

{

sec++;//秒加

if(sec==60)//秒是否等于60

sec=0;//秒數清零

}

if(function_ping2==2)//分閃爍

{

min++;//分加

if(min==60)//分是否等于60

min=0;//分清零

}

if(function_ping2==3)//小時閃爍

{

hour++;//小時加

if(hour==24)//小時是否等于24

hour=0;//小時清零

}

if(function_ping1==1)//日閃爍

{

day++;//日加加

if(day>tian)//日是否大于天

day=1;//日等于1

}

if(function_ping1==2)//月閃爍

{

month++;//月加加

tian=tianshu[month];

if(day>tian)

{

tian_flag=1;

}

else

tian_flag=0;

if(month==13)//月是否等于13

month=1;//月等于1

}

if(function_ping1==3)//年閃爍

{

year++;//年加加

if((year%4!=0)||(year0!=0)||(year@0==0))

{

tian=tianshu[month];

if(day>tian)

{

tian_flag=1;

}

else

tian_flag=0;

}

if(year==2100)//年是否等于2100

year=2000;//年到2000

}

if(function_ping3==1)//鬧鐘秒閃爍

{

nao_sec++;//鬧鐘秒加加

if(nao_sec==60)//鬧鐘秒是否等于60

nao_sec=0;//鬧鐘秒清零

}

if(function_ping3==2)//鬧鐘分閃爍

{

nao_min++;//鬧鐘分加加

if(nao_min==60)//鬧鐘分是否等于60

nao_min=0;//鬧鐘分清零

}

if(function_ping3==3)//鬧鐘小時閃爍

{

nao_hour++;//鬧鐘小時加加

if(nao_hour==24)//鬧鐘小時是否等于24

nao_hour=0;//鬧鐘小時清零

}

}


上一頁 1 2 3 下一頁

評論


技術專區(qū)

關閉