導航:首頁 > 操作系統 > 單片機鬧鍾

單片機鬧鍾

發布時間:2022-05-07 01:27:37

⑴ 用單片機做鬧鍾你是什麼思路

用單片機做鬧鍾,選一時鍾晶元,如DS1302,單片機用51或pic或其它系列都可,單片機和時鍾晶元用i/o連接好。顯示選LED,LCD都運行,加蜂鳴器用單片機控制。功能要求,編程序實現了。

⑵ 單片機 鬧鍾

不知道你原來的系統有哪些資源。
至少需要有設置時鍾與鬧鍾的按鍵,遙控鍵也算,以及時間顯示。

傳統的方法,一般是加時鍾晶元,最主要的是時鍾晶元要加電池,一般是加鈕扣電池,這樣停電或關機的時候,時鍾繼續跑,不會停。
當然,如果你的系統是一直加電的,不用時鍾晶元和電池也沒問題,直接用CPU跑時鍾,就是費點電。但注意,一旦斷電,時鍾歸零,鬧鍾就沒法用了。如果只是偶爾繼電,加超級電容的方法也很不錯。
還有一種比較新的辦法是用電波鍾模塊,每次開機的時候,自動獲取國家天文台的標准授時。這個方法特別適合自己動手的玩家,淘寶上有BPC模塊買。但是這個拋開專利的問題不談,據說接收的時候白天與晚上差別是很大的,白天開機,可能很長時間收不到信號。實際做鍾表,裡面除了每天定點對時,其餘時間都是自己用時鍾晶元跑表的。

⑶ 51單片機定時鬧鈴(c語言)

我來發一個C語言51單片機時鍾程序,希望能幫到你 /* 程序功能:帶定時鬧鈴時鍾 */ /*---------------------------------------------------------------*/ #include <AT89X51.H> /*包含器件配置文件*/ #define uchar unsigned char #define uint unsigned int char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90,};/*0~9的數碼管段碼*/ uchar hour=0,min=0,sec=0; /*時、分、秒單元清零*/ uchar deda=0; /*5mS計數單元清零*/ bit d_05s=0; /*0.5秒標志*/ uchar set=0; /*模式設定標志*/ uchar m=0; uchar flag=0; /*RAM掉電標志*/ void delay(uint k); /*延時?函數*/ void conv(); /*走時單元轉換*/ void disp(); /*走時時間顯示?函數*/ /*------------------------走時?函數部分 ----------------------*/ /*定時器T0 5mS初始化*/ void init_timer() { TMOD=0x01; TH0=-(4800/256); TL0=-(4800%256); IE=0x82; TR0=1; } /*---------------------------------*/ /*5mS定時中斷服務?函數*/ void T0_srv(void) interrupt 1 { TH0=-(4800/256); TL0=-(4800%256); deda++; } /*----------------------------------*/ /*時、分、秒單元及走時單元轉換*/ void conv() { if(deda<=100)d_05s=0; else d_05s=1; if(deda>=200){sec++;deda=0;} if(sec==60){min++;sec=0;} if(min==60){hour++;min=0;} if(hour==24){hour=0;} } /*------------------------ 顯示?函數部分 ----------------------*/ /*走時時間顯示?函數*/ void disp() { P0=DATA_7SEG[hour/10];P2=0xf7;delay(1); P0=DATA_7SEG[hour%10];P2=0xfb;delay(1); if(d_05s==1){if(P2_2==0)P0_7=0;else P0_7=1;} delay(1); P0=DATA_7SEG[min/10];P2=0xfd;delay(1); P0=DATA_7SEG[min%10];P2=0xfe;delay(1); } /*---------------------- 調整時間?函數部分 -------------------*/ /*調整走時時間*/ void set_time() {uchar m; if(P2_5==0)delay(1); if(P2_5==0)hour++; if(hour==24)hour=0; for(m=0;m<30;m++) { disp(); if(P2_2==0)P0_7=0; else P0_7=1; delay(1); } if(P2_6==0)delay(1); if(P2_6==0)min++; if(min==60)min=0; for(m=0;m<30;m++) { disp(); if(P2_2==0)P0_7=0; else P0_7=1; delay(1); } } /*------------------ 按鍵掃描、延時等?函數部分-------------------*/ /*走時時間程序?函數*/ void time() { conv(); /* 走時單元轉換?函數 */ disp(); /* 走時時間顯示?函數 */ } /*------------------------------------*/ /*掃描按鍵?函數*/ void scan_key() { delay(1); if(P2_4==0)set++; if(set>=2)set=0; if(set==1)flag=0x55; F0:if(P2_4==0)goto F0; /*按鍵未釋放,在此等候*/ } /*------------------------------*/ /*延時?函數*/ void delay(uint k) { uint i,j; for(i=0;i<k;i++){ for(j=0;j<121;j++) {;}} } /*----------------------- 主函數 ------------------------- */ /*主函數*/ void main() { init_timer(); /*定時器T0初始化*/ while(1) /*無限循環*/ { if(P2_4==0)scan_key(); /*有按鍵,調用按鍵掃描?函數*/ switch(set) /*根據set鍵值散轉*/ { case 0:time(); break; /*走時時間程序*/ case 1:set_time();break; /*走時時間調整*/ default:break; /*其它退出*/ } if(flag!=0x55) /*判斷掉電標志*/ { P0=0xc0; P2=0xc0; delay(100); P2=0xff; delay(400); } } }

⑷ 用C語言寫51單片機鬧鍾程序

//*********************************************************
//實現功能:本程序實現在P1口模擬一個流水燈程序
//*********************************************************
#include <reg51.h>
#define p_out P1 //宏定義輸出的i/o口為P1
//******************時間延遲函數**********************
//描 述:用指令實現延時一段時間
//入口參數:int i,為時間延遲參數
//****************************************************
void delay_time(int i)
{
while(i)
i--;
}
//******************主函數***************************
//描 述:實現在P1口模擬一個流水燈程序
//****************************************************
void main(void)
{unsigned char i=0; //初始化一個局部變數為0
p_out=0xff; //初始化將要輸出的i/o口,輸出高電平,熄滅所有燈
while(1)
{
for(i=0;i<8;i++)
{
p_out=~(1<<i);//點亮一個燈,
delay_time(50000); //延遲一段時間
p_out=0xff;//熄滅所有燈
}
}
}
//**************************************
//****************************************************
//實現功能:把鍵盤輸入的鍵盤碼,用led顯示出來
//****************************************************
#include <reg51.h>
#define p_key P1
#define led_date P0
#define choose_p P2
unsigned char change(unsigned char i);
unsigned int display_num=0;
//******************時間延遲函數**********************
//描 述:用指令實現延時一段時間
//入口參數:int i,為時間延遲參數
//****************************************************
void delay_time(int i)
{
while(i)
i--;
}
//******************按鍵掃描函數**********************
//描 述:對4*4鍵盤進行掃描,程序只適合4*4鍵盤使用,
// 鍵盤佔用一組完整的i/o口,在使用這個程序前
// 要宏定義p_key為用戶實際連接鍵盤的i/o口
// #define p_key Pn;//(n=0、1、2、3)
//返回參數:若有檢測到按鍵就返回按鍵的編號,否則返回0xff
//****************************************************
unsigned char read_key(void)
{
unsigned char j,key,key_buf=0;
p_key=0xff;
//檢測是否有建按下//
p_key=0xf0;
key=p_key;
if(key==0xf0)
{
return(0xff);//沒按鍵按下,返回0xff
}
//有按下,延時去抖//
delay_time(5000);
//確認是否有建按下//
p_key=0xf0;
key=p_key;
if(key==0xf0)
{
return(0xff);//沒按鍵按下,返回0xff
}
//真的有按鍵按下,掃描是哪一行有按鍵按下//
for(j=0;j<4;j++)
{key=p_key&(0x10<<j);
if (key)
{
key=p_key;
}
else
{
key_buf=j*4;
p_key=~(0x10<<j);//第j行的按鍵按下了,第j行輸出0,其他的i/o口輸出1
//掃描是第j行的哪個按鍵按下//
for(j=0;j<4;j++)
{
key=p_key&(1<<j);
if (key)
{
key=p_key;
}
else
{
key_buf+=j;
return(key_buf);//掃描到按鍵的確定位置,返回按鍵的編號
}
}
}
}
//沒掃描到按鍵,//
return(0xff);
}
//***************七段數碼管顯示函數*******************
//描 述:對四位的掃描型七段數碼管進行掃描顯示,在使用
// 前要定義一個全局變數display_num
// unsigned int display_num;
//入口參數:unsigned int num,要顯示的數字(0-9999)
//****************************************************
void display(unsigned int num)
{
if(num<10000)
{
display_num=num;
}
choose_p|=3;//先關顯示
led_date=change(display_num/1000);//得到千位的數字,並轉換成七段碼型
choose_p&=0xfe;//選通千位
delay_time(50);//延時一段時間
choose_p|=1;//關顯示
display_num=display_num%1000;
led_date=change(display_num/100);//得到百位的數字,並轉換成七段碼型
choose_p&=0xfd;//選通百位
delay_time(50);//延時一段時間
choose_p|=2;//關顯示
display_num=display_num%100;
led_date=change(display_num/10);//得到十位的數字,並轉換成七段碼型
choose_p&=0xfb;//選通十位
delay_time(50);//延時一段時間
choose_p|=4;//關顯示
led_date=change(display_num%10);//得到個位的數字,並轉換成七段碼型
choose_p&=0xf7;//選通十位
delay_time(50);//延時一段時間
choose_p|=8;//關顯示
}
//****************數字-碼型轉換函數*******************
//描 述:把數字轉換成七段碼型,此程序僅配合共陽的七
// 段數碼管使用
//入口參數:unsigned char i,要轉換的數字(0-9),
//返回參數:轉換後的七段碼型,0xff表示轉換失敗
//****************************************************

unsigned char change(unsigned char i)
{
switch(i)
{
case 0:
return(0xc0);//0的七段碼型
case 1:
return(0xf9);//1的七段碼型
case 2:
return(0xa4);//2的七段碼型
case 3:
return(0xb0);//3的七段碼型
case 4:
return(0x99);//4的七段碼型
case 5:
return(0x92);//5的七段碼型
case 6:
return(0x82);//6的七段碼型
case 7:
return(0xf8);//7的七段碼型
case 8:
return(0x80);//8的七段碼型
case 9:
return(0x90);//9的七段碼型
default:
return(0xff);//轉換失敗
}
}
//*********************主函數*************************
//描 述:把鍵盤輸入的鍵盤碼,用led顯示出來
//****************************************************
int main(void)
{unsigned char i;
while(1)
{
i=read_key();//掃描鍵盤
if(i<16)
display((unsigned int)i);//有效的鍵盤值
else
display(0xffff);//數據無效
}
}
//兩個程序加起來就可以完成你要求的功能,有說明,你認真看一下吧。

⑸ 如何用單片機實現鬧鍾功能

如果要求精度不高的話就用單片機自帶的定時計數器。將定時計數器設定50ms中斷一次,中斷20次就是一秒,60秒後分加一秒計數單元清零,分滿60小時加一分清零,以後以此類推。定時就是將你要設定的時間與當前的時間依次比較,比較不等程序繼續執行,比較相等開鬧鍾。

⑹ 單片機鬧鍾程序顯示時間

可以直接在單片機裡面然後進行一個編程,就可以直接設置顯示時間。

⑺ 51單片機設計一個電子鍾,如何實現鬧鍾功能

用C語言If條件語句實現循環,當達到某一條件時給某一I/O埠傳遞信號,該I/O埠接蜂鳴器即可。電子技術中的計數器也可對此有幫助,設置60.60.24的程序,即可實現報時。

⑻ 單片機設置多個鬧鍾C程序

建立一個鬧鍾結構體
struct
ALARM
{
unsigned
char
hour;
unsigned
char
min;
unsigned
char
onoff;
};
struct
ALARM
alarms[6];
就有6個鬧鍾了,而其中的下標就是鬧鍾序號。
然後就根據時鍾(一般分鍾就夠了)進位信號,逐個查詢各鬧鍾是否開啟,若開啟則進行時鍾與鬧鍾的時間比較,如果時間相符則鬧鍾給出定時時間到的信號,以驅動鬧鈴響起等。

⑼ 用51單片機定時器編寫一個定時鬧鍾

問題不是很清晰!
首先,定時器溢出時間較短,需要在定時器中斷外另設計數單元;
其次,什麼叫「檢驗對准時間」?我的理解是:使用一段程序來檢驗當前時間與設定時間(鬧鍾的定時值)的差值,差值為零時報時。基於該理解,有兩種方式(根據你自己的情況自選):
1)先設計出一個時鍾,然後將時鍾值與設定值比對,具體語句可以使用「異或」(兩時間相同時,異或值為零),或cjne指令;本人傾向於後者(如:萬一出現干擾在兩值相同時沒有比較,前者就失效了,而後者還能繼續比較)。
2)
預置一個變數,每個固定時間間隔(使用定時中斷)減一,到零時報時;但要注意,直接在定時中斷程序中減一時一定要在中斷中判斷到零否,否可能則會出現不報時的問題。

⑽ 如何製作單片機鬧鍾

這個你可以直接使用一個大面積的晶元,然後將它插在鬧鍾上面,這樣的話就就可以製作一個簡單的鬧鍾了,特別的簡單。

閱讀全文

與單片機鬧鍾相關的資料

熱點內容
ecy50clp壓縮機多少W 瀏覽:752
mac終端命令怎麼保存 瀏覽:848
微信公眾號圖片壓縮 瀏覽:437
可以在安卓平板上畫畫的軟體是什麼 瀏覽:436
高盛數字加密 瀏覽:895
軟著網上能不能查到自己的源碼 瀏覽:914
編譯好的android源碼 瀏覽:993
學校機房雲伺服器和電腦主機 瀏覽:10
Python紅色五角星畫法 瀏覽:337
壓縮餅干翻譯 瀏覽:686
macos命令行窗口的樣式 瀏覽:248
androidflipboard 瀏覽:878
投資公司投資源碼 瀏覽:75
python語料訓練 瀏覽:338
武夷岩茶產地溯源碼 瀏覽:383
求生組隊用什麼伺服器最好 瀏覽:24
php回調匿名回調函數 瀏覽:107
源碼翻譯軟體哪裡找 瀏覽:523
邪惡程序員解說 瀏覽:600
醫生找程序員 瀏覽:423