新聞中心

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

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

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

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

        本文引用地址:http://www.104case.com/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緩沖區

        }

        }

        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 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 平南县| 梨树县| 会东县| 阜南县| 古丈县| 佛坪县| 屯留县| 柯坪县| 广德县| 峨眉山市| 于田县| 秦安县| 交城县| 通榆县| 桐城市| 龙江县| 华亭县| 水富县| 大冶市| 民县| 林西县| 阜康市| 富顺县| 闸北区| 贵德县| 泌阳县| 衡水市| 阳春市| 循化| 策勒县| 沿河| 兴安县| 黄大仙区| 宁南县| 清徐县| 如皋市| 奉贤区| 吉安市| 淅川县| 修武县| 郸城县|