新聞中心

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

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

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

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

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

#include

unsignedcharcnt;//計(jì)數(shù)器

unsignedchartian;//天寄存器

unsignedcharkey_code;//按鍵值

unsignedcharflag;//換屏標(biāo)志位

unsignedchartwinkle_num;//閃爍標(biāo)志位

unsignedcharfunction_flag;//加減功能標(biāo)志位

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

unsignedcharchange_num;//閃屏?xí)r間定時(shí)

unsignedcharchange_ping;//三屏計(jì)數(shù)位

unsignedcharclock_flag;//鬧鐘標(biāo)志位

unsignedcharping_flag;//按鍵跟蹤閃屏標(biāo)志位

unsignedcharnum_flag;//按鍵計(jì)數(shù)閃屏標(biāo)志位

unsignedchartian_flag;//天判斷標(biāo)志位

unsignedcharrun_flag;//閏年判斷標(biāo)志位

unsignedintkey_num=150;//按鍵消逗延時(shí)時(shí)間

unsignedintyear=2008;//

unsignedcharmonth=2;//

unsignedcharday=28;//

unsignedcharhour=23;//小時(shí)

unsignedcharmin=59;//

unsignedcharsec=57;//

unsignedcharnao_hour=0;//鬧鐘時(shí)

unsignedcharnao_min=0;//鬧鐘分

unsignedcharnao_sec=0;//鬧鐘秒

constunsignedchartianshu[13]=

{0,31,28,31,30,31,30,31,31,30,31,30,31};//每月天數(shù)表

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

{

0x7b,

0x12,

0x4f,

0x1f,

0x36,

0x3d,

0x7d,

0x13,

0x7f,

0x3F,

0x00

};

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

voidkey_scan(void);//按鍵掃描

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

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

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

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

voidmain(void)

{

init_clk();//時(shí)鐘初始化

while(1)

{

key_scan();//按鍵掃描

key_value();//鍵值確定

rtc_show();//RTC顯示

leap_year();//閏年判定

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

{

clock_flag=1;//鬧鐘標(biāo)志位置一

}

}

}

voidinit_clk(void)

{

unsignedchari;

WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗

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

IE2|=BTIE;//開啟基本定時(shí)器中斷

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;//按鍵消抖計(jì)數(shù)器

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

{

num++;//消逗計(jì)數(shù)器加

key_code=0;//鍵值清零

}

else

{

num=0;//按鍵抖動(dòng),鍵值清零

key_code=0;//鍵值清零

}

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

{

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

twinkle_num=0;//閃爍清零

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

}

}

voidkey_value(void)

{

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

{

function_flag=1;//功能鍵標(biāo)志位置一

clock_flag=2;//關(guān)閉鬧鐘

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

{

function_ping1++;//數(shù)值閃爍加

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

{

if(tian_flag==1)

{

function_ping1=1;//

}

else

{

function_ping1=0;//清零

function_flag=0;//功能鍵清零

}

}

change_num=0;//換屏計(jì)數(shù)器

}

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

{

function_ping2++;//數(shù)值閃爍加

if(function_ping2==4)

{

function_ping2=0;

function_flag=0;//清零//功能標(biāo)志位清零

}

change_num=20;//換屏?xí)r間計(jì)數(shù)器

}

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

{

function_ping3++;//數(shù)值閃爍加

if(function_ping3==4)

{

function_ping3=0;//清零

function_flag=0;//功能標(biāo)志位清零

}

change_num=40;//換屏計(jì)數(shù)器

}

}

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

{

clock_flag=2;//關(guān)閉鬧鐘

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

{

sec++;//秒加

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

sec=0;//秒數(shù)清零

}

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

{

min++;//分加

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

min=0;//分清零

}

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

{

hour++;//小時(shí)加

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

hour=0;//小時(shí)清零

}

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)//鬧鐘小時(shí)閃爍

{

nao_hour++;//鬧鐘小時(shí)加加

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

nao_hour=0;//鬧鐘小時(shí)清零

}

}


上一頁 1 2 3 下一頁

評(píng)論


技術(shù)專區(qū)

關(guān)閉