功能:實(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í)清零
}
}
評(píng)論