您的位置 首页 制造

MSP430F449单片机RTC时钟C言语程序(带闹钟)

功能:实现软件万年历功能,并自动识别闰年,A屏每显示5秒种就自动切换到B屏,B屏再显示5秒种就自动切换到C屏,C屏再显示5秒种就自动切换到A屏

功用:完成软件万年历功用,并主动识别闰年,A屏每显现5秒种就主动切换到B屏,B屏再显现5秒种就主动切换到C屏,C屏再显现5秒种就主动切换到A屏,经过按键在A屏、B屏和C屏之间切换,可经过按键手动设定和调整时刻,当调整时对应调整位要有闪耀功用,有闹钟功用,可设置几点几分闹钟,当时时刻等于闹钟时刻时,用点亮LED指示,直到某个键(自定义)被按下时,平息LED灯

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

#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;//闹钟小时清零

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/257760.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部