51微控制器電子時鐘

2021-10-06 22:15:20 字數 2687 閱讀 2567

#include

#include

​#define uint unsigned int

#define uchar unsigned char

#define key_menu 0x01

#define key_up 0x02

#define key_down 0x03

#define key_clk 0x04

#define key_ok 0x05

#define key_cancle 0x06

​uint hour,minute,sec,t;

uchar code tabdu=

;/*共陽極數碼管編碼從0到f*/

uchar code tabwe=

;/*數碼管位選編碼,當p0為tablewe[0]時表示第一位數碼管亮,其他五個不亮*/

uint n[4]

;uchar tiao,ctiao;

//分別控制調時的時候時分秒跳動,跳動的頻率,鬧鐘控制位

uchar clkh=

24,clkm,clks;

//鬧鐘的定時時間 時、分、秒

uchar hour1,min1,sec1;

​bit clk,stopclk;

bit contime;

bit flag;

​//sbit dula=p2^6; //段選控制位

//sbit wela=p2^7; //位選控制位

sbit key_menu=p1^1;

sbit key_up=p1^2;

sbit key_down=p1^3;

sbit key_clk=p1^4;

sbit feng=p3^1;

sbit led=p3^0;

void

delay

(uint n)

//延時函式

void

getval()

//將時分秒的各位資料存放到陣列n中

if(contime)

n[0]

=hour/10;

n[1]

=hour%10;

n[2]

=minute/10;

n[3]

=minute%10;

}void

clock()

//鬧鐘處理函式

void

baoshi()

//整點報時

uchar get_key()

//如果有鍵按下則返回想應的值

switch

(val)

}void

key_val

(uchar key1)

//處理按鍵

switch

(keyval)

else

break

;case key_up :

if(clk==0)

}else

}break

;case key_down :

if(clk==0)

switch

(key)

else

switch

(key)

break

;case key_clk :

if(clkh==hour&&clkm==minute&&stopclk==1)

//關鬧鐘

else

break

;//設定鬧鐘

case key_ok :

if(clk)

tiao=flag=key=

0;contime=

0;hour=hour1;minute=min1;

/*sec=sec1*/

;return

;case key_cancle :

if(clk)

tiao=flag=key=contime=0;

return

;default

:break;}

}void

disply()

}else

break

;case2:

if(i==

0||i==1)

}else

break

;default

: p2=tabwe[i]

;p0=tabdu[n[i]];

break;}

delay(1

);}}

/********************t0定時/計數器初始化*******************/

void

t0_init()

void

t1_init()

void

main()

clock()

;//鬧鐘響一分鐘後停止

baoshi()

;}}​

void

inter0

(void

) interrupt 1

//t0中斷服務函式

if(sec==60)

if(minute==60)

if(hour==24)

hour=0;

}void

iter1

(void

) interrupt 3

//用於動態顯示數碼管

關於51微控制器電子時鐘精度的問題

前幾天用stc89c52微控制器製作了乙個電子時鐘,經過一段時間的實驗,發現時間精度存在誤差,一分鐘慢4秒左右。這可了不得,十分鐘就要慢40秒,一天下來不得慢半96分鐘!這個微控制器晶振頻率為11.0592mhz,和大部分時鐘的晶振頻率相同,應該沒有問題。後天考慮到源 在定時器中斷函式裡 void ...

51微控制器實戰之電子時鐘

源 工作模式下,51微控制器從ds1302中獲取資料,再把資料傳遞到lcd來顯示時間和日期 設定模式下,通過k2和k3來改變資料 計時模式下,通過k2來開啟或關閉定時器1,來實現開始 暫停計時,通過k3來計時初始化 鬧鐘響時,開啟定時器1,通過天空之城樂譜來控制蜂鳴器的音調。十進位制數 8421碼 ...

51微控制器電子琴

這是我在論壇第一篇文章,大一時用arduino寫過電子琴,大二了用51再寫一次。電路圖 注意事項 需要修改一下蜂鳴器的電壓值其他的引數應該不需要改,實測可用。上面的電路多了乙個元件是揚聲器,本來想用揚聲器的沒有想到合適的方法。程式 include define uchar unsigned char...