|
大家在制作單片機(jī)時鐘或萬年歷時,都習(xí)慣用蜂鳴器來做訊響器件。大都用來指示設(shè)置步奏。當(dāng)然,同時用來制作一個簡易鬧鐘也是很容易的。前段時間在網(wǎng)上留意了幾個鬧鐘程序,撿最簡易的兩個做了一下分析,現(xiàn)分享給大家
單片機(jī)時鐘的簡易鬧鐘程序:
程序1:
void BJ_alarm()//定義一個鬧鐘函數(shù)
{
if(alarm_sdgb==0&&alarm_kg==1&&set==0)//如果在時鐘運(yùn)行中
{ //手動關(guān)閉標(biāo)志為0且鬧鐘開關(guān)為開啟狀態(tài)
if(hour==nz_shi&&min==nz_fen)//如果時分到達(dá)預(yù)設(shè)時刻
bj=1; //報(bào)警標(biāo)志為真(1)
else //否則
{
fmq=1;//蜂鳴器不響
bj=0;//報(bào)警標(biāo)志為假(0)
}
}
}
void time() interrupt //定時器中斷函數(shù)
{
TH0=0x3c;//高位
TL0=0xb0;//低位 定時50毫秒溢出 12MHz
ee++; //溢出次數(shù)增加
if(ee==10)//如果達(dá)到10次 500毫秒
{
ee=0; //次數(shù)清0
if(bj==1)//如果報(bào)警標(biāo)志為真
fmq=!fmq;//蜂鳴器狀態(tài)翻轉(zhuǎn)
}
}
程序2:
void BJ_alarm()
{
read_eeprom();//讀取鬧鐘數(shù)據(jù)
if((hour==nz_shi)&&(min==nz_fen)&&(set==0)) //如果在運(yùn)行期間 { //時分達(dá)到設(shè)置鬧鐘時刻
bj=1;//報(bào)警標(biāo)志為真(1)
if(alarm_kg==1&&bj==1) //如果鬧鈴開關(guān)打開且報(bào)警時間標(biāo)志為真 {
if(sec%2) //秒能整除2(即秒數(shù)為偶數(shù))
fmq=0;//蜂鳴器響
else //否則
fmq=1;//蜂鳴器停響
}
}
{
fmq=1;
bj=0;
}
}
對以上兩種鬧鐘簡易程序的分析:
1.兩種程序代碼很少,極易生成相應(yīng)效果。
2.程序1蜂鳴器訊響頻率依據(jù)單片機(jī)定時器而定,鳴響和停響時間相等。
程序2蜂鳴器訊響頻率依據(jù)時鐘走時秒數(shù)而定,鳴響和停響時間可以不等.
3.程序1鬧鐘設(shè)置的數(shù)據(jù)在斷電后會丟失,而程序2則不會,只需一次設(shè)定.
4.另外在按鍵使用上,靈活性上兩者也有諸多不同。本人傾向用第二種.
|
評分
-
查看全部評分
|