日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

基于單片機(jī)AT89C2051的電子鐘設(shè)計(jì)方案

出處:廣電電器網(wǎng) 發(fā)布于:2014-04-28 10:36:38

導(dǎo)讀:本方案介紹的電子鐘,電路可稱得上極簡(jiǎn),它僅使用單片的20引腳單片機(jī)完成電子鐘的全部功能,而筆者見到的其它設(shè)計(jì)方案均采用二片以上的多片IC實(shí)現(xiàn)。

  電路見圖1.

  一片20引腳的單片機(jī)AT89C2051為電子鐘主體,其顯示數(shù)據(jù)從P1口分時(shí)輸出,P3.0~3.3則輸出對(duì)應(yīng)的位選通信號(hào)。由于LED數(shù)碼管點(diǎn)亮?xí)r耗電較大,故使用了四只PNP型晶體管VT1~VT4進(jìn)行放大。本來筆者還有一種更簡(jiǎn)的設(shè)計(jì)方案(見圖2),可省去VT1~VT4及R1~R4八個(gè)元件,但這種設(shè)計(jì)由于單片機(jī)輸出口的灌入電流有限(約20mA),數(shù)碼管亮度較暗而不向讀者介紹,除非你采用了高亮度的發(fā)光數(shù)碼管。

  P3.4、P3.5、3.7外接了三個(gè)輕觸式按鍵,這里我們分別命名為:模式設(shè)定鍵set(P3.4)、時(shí)調(diào)整鍵hour(P3.5)、分調(diào)整鍵min(P3.7)。C1、R13組成上電復(fù)位電路。VT5及蜂鳴器Bz為鬧時(shí)訊響電路。三端穩(wěn)壓器7805輸出的5V電壓供整個(gè)系統(tǒng)工作。此電子鐘可與任何9~20V/100mA的交直流電源適配器配合工作,適應(yīng)性強(qiáng)。

  電子鐘功能

  1.走時(shí):通過模式設(shè)定鍵set選擇為走時(shí),U1、U2顯示小時(shí),U3、U4顯示分。U2的小數(shù)點(diǎn)為秒點(diǎn),每秒閃爍。

  2.走時(shí)調(diào)整:通過模式設(shè)定鍵set選擇為走時(shí)調(diào)整,按下hour鍵對(duì)U1、U2的走時(shí)“時(shí)”顯示進(jìn)行調(diào)整(每0.2秒遞加1)。按下min鍵對(duì)U3、U4的走時(shí)“分”顯示進(jìn)行調(diào)整(每0.2秒遞加1)。

  3.鬧時(shí)調(diào)整:通過模式設(shè)定鍵set選擇為鬧時(shí)調(diào)整,按下hour鍵對(duì)U1、U2的鬧時(shí)“時(shí)”顯示進(jìn)行調(diào)整(每0.2秒遞加1)。按下min鍵對(duì)U3、U4的鬧時(shí)“分”顯示進(jìn)行調(diào)整(每0.2秒遞加1)。

  4.鬧時(shí)啟/停設(shè)定:通過模式設(shè)定鍵set選擇為鬧時(shí)啟/停設(shè)定,按下min鍵U3的小數(shù)點(diǎn)點(diǎn)亮,鬧時(shí)功能啟動(dòng);按下hour鍵U3的小數(shù)點(diǎn)熄滅,鬧時(shí)功能關(guān)停。

  由于電路設(shè)計(jì)得極其簡(jiǎn)單,因此豐富的功能只能由軟件完成,這里軟件設(shè)計(jì)成為了關(guān)鍵。下面介紹軟件設(shè)計(jì)要點(diǎn)。

  圖3為主程序狀態(tài)流程。

  運(yùn)行時(shí)建立的主要狀態(tài)標(biāo)志如下:

  flag-掉電標(biāo)志。掉電后,flag內(nèi)為一隨機(jī)數(shù);重新設(shè)定時(shí)間后flag內(nèi)寫入標(biāo)志數(shù)55H.

  set-工作模式設(shè)定標(biāo)志。

  hour-走時(shí)“時(shí)”單元。

  min-走時(shí)“分”單元。

  sec-走時(shí)“秒”單元。

  dEDA-走時(shí)5mS計(jì)數(shù)單元

  t_hour-鬧時(shí)“時(shí)”單元。

  t_min-鬧時(shí)“分”單元。

  d_05s-0.5秒位標(biāo)志。每秒鐘的前0.5秒置1,后0.5秒置0,以使秒點(diǎn)閃爍。

  o_f-鬧時(shí)啟/停位標(biāo)志。鬧時(shí)啟動(dòng)置1,鬧時(shí)關(guān)停置0.

  另外將定時(shí)器T0設(shè)定為5mS的定時(shí)中斷。這里晶振頻率為12MHz,因此5mS的初值為-5000,但實(shí)際上程序還要作其它運(yùn)算,使得時(shí)間偏長(zhǎng),經(jīng)調(diào)整為-4800后試驗(yàn)剛好。計(jì)時(shí)單元deda每次中斷均加1.走時(shí)函數(shù)判斷deda>=200時(shí)即令秒單元sec加1.同理秒單元sec滿60后令分單元min加1.分單元min滿60后令時(shí)單元hour加1.時(shí)單元hour滿24后清0.

  上電后,首先進(jìn)行初始化,對(duì)各狀態(tài)標(biāo)志、輸入輸出口及定時(shí)器T0進(jìn)行初始化工作,以適應(yīng)后面程序的要求。

  隨后程序判斷有無set鍵按下,如按下,則set鍵值從0起加1.set鍵值只能從0加到3,然后又回到0.

  接下來,根據(jù)鍵值進(jìn)行散轉(zhuǎn)。若set=0,運(yùn)行走時(shí)程序;若set=1,進(jìn)入調(diào)整鬧時(shí)時(shí)間程序;若set=2,進(jìn)入調(diào)整走時(shí)時(shí)間程序;若set=3,顯示已調(diào)好的鬧時(shí)時(shí)間,同時(shí)進(jìn)入啟/停鬧時(shí)程序。

  散轉(zhuǎn)完后,進(jìn)行判斷掉電標(biāo)志flag是否等于55H.若不等,說明剛開機(jī)上電或運(yùn)行過程中掉過電,這時(shí)四個(gè)數(shù)碼管以1Hz的頻率閃爍四個(gè)8字,提示時(shí)間不準(zhǔn);若相等,說明未掉電,RAM區(qū)內(nèi)容未變化,時(shí)間準(zhǔn)確。

  再下來程序又轉(zhuǎn)回到初始化之后進(jìn)行循環(huán)運(yùn)行。

  由于使用了四只數(shù)碼管密集排列,因此只能采用雙面印刷板設(shè)計(jì),圖4、5分別為正面(元件面)、反面的印板圖。尺寸3000milx4000mil(7.62cmx10.16cm)。圖6為計(jì)算機(jī)輸出的三維仿真印制板。

  元件選用

  為了走時(shí)準(zhǔn)確,晶振X選用溫漂小的。四個(gè)數(shù)碼管U1~U4可選用發(fā)綠光的,這樣光澤較柔和。蜂鳴器Bz要購(gòu)買繞線型的電動(dòng)式蜂鳴器(市場(chǎng)上有一種加電壓即工作的蜂鳴器這里不適用),因驅(qū)動(dòng)信號(hào)為脈沖信號(hào)。其它元件一般無特殊要求。

  使用方法

  上電后,四個(gè)LED數(shù)碼管閃爍四個(gè)8字。

  按一下set鍵,閃爍現(xiàn)象消失(此時(shí)set=1),U1的小數(shù)點(diǎn)亮,說明此刻可以調(diào)整鬧時(shí)時(shí)間。按下hour鍵,U1、U2作加法;按下min鍵,U3、U4作加法。這些調(diào)整好的數(shù)據(jù)被同時(shí)送入RAM區(qū)的鬧時(shí)記憶“時(shí)”單元t_hour和鬧時(shí)記憶“分”單元t_min.

  再按一下set鍵,set=2,U2的小數(shù)點(diǎn)亮,此刻可以調(diào)整走時(shí)時(shí)間。按下hour鍵,U1、U2作加法;按下min鍵,U3、U4作加法。這些調(diào)整好的數(shù)據(jù)也被同步送入RAM區(qū)的“時(shí)”記憶單元hour和“分”記憶單元min.

  再按一下set鍵,set=3,顯示剛才調(diào)整的鬧時(shí)時(shí)間,此刻可以選擇啟動(dòng)/關(guān)停鬧時(shí)。按下min鍵,o_f位標(biāo)志置1,U3的小數(shù)點(diǎn)亮,鬧時(shí)啟動(dòng);按下hour鍵,o_f位標(biāo)志置0,U3的小數(shù)點(diǎn)滅,鬧時(shí)關(guān)閉。

  若再按一下set鍵,set=0,電路進(jìn)入走時(shí)狀態(tài),U1、U2顯示小時(shí),U3、U4顯示分。U2的小數(shù)點(diǎn)作秒點(diǎn)閃爍。

  在鬧時(shí)啟動(dòng)的情況下,走時(shí)到達(dá)設(shè)定鬧時(shí),則蜂鳴器Bz鳴響一分鐘進(jìn)行提醒。

  附:用C51編寫的源程序清單(已由實(shí)驗(yàn)板運(yùn)行通過)

  #include                        /*包含器件配置文件*/

  #define uchar unsigned char

  #define uint unsigned int

  char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,

  0x92,0x82,0xF8,0x80,0x90,};/*0~9的數(shù)碼管段碼*/

  uchar hour=0,min=0,sec=0;                /*時(shí)、分、秒單元清零*/

  uchar deda=0;                                  /*5mS計(jì)數(shù)單元清零*/

  uchar t_hour=0,t_min=0;                   /*鬧時(shí)時(shí)、分單元清零*/

  bit d_05s=0;                             /*0.5秒標(biāo)志*/

  bit o_f=0;                                         /*鬧時(shí)啟/停標(biāo)志*/

  uchar set=0;                                      /*模式設(shè)定標(biāo)志*/

  uchar m=0;

  uchar flag=0;                                     /*RAM掉電標(biāo)志*/

  void delay(uint k);                              /*延時(shí)子函數(shù)*/

  void conv();                                       /*走時(shí)單元轉(zhuǎn)換*/

  void p_out();                                      /*判別鬧時(shí)到否子函數(shù)*/

  void dirve();                                       /*走時(shí)時(shí)間輸出驅(qū)動(dòng)子函數(shù)*/

  void t_dirve();                                    /*鬧時(shí)時(shí)間輸出驅(qū)動(dòng)子函數(shù)*/

  /*鬧時(shí)啟/停子函數(shù)*/

  void time1_of()

  {uchar m;

  if(P3_7==0)delay(1);

  if(P3_7==0)o_f=1;

  for(m=0;m<30;m++)

  {

  t_dirve();

  P1=DATA_7SEG[t_min/10];P3=0xfd;delay(1);

  if(P3_1==0){if(o_f==1)P1_7=0;}else P1_7=1;

  delay(1);

  }

  if(P3_5==0)delay(1);

  if(P3_5==0)    o_f=0;

  for(m=0;m<30;m++)

  {

  t_dirve();

  P1=DATA_7SEG[t_min/10];P3=0xfd;delay(1);

  if(P3_1==0){if(o_f==1)P1_7=0;else P1_7=1;}

  delay(1);

  }

  }

  /*走時(shí)函數(shù)*/

  void time()

  {

  conv();                                              /*走時(shí)單元轉(zhuǎn)換*/

  dirve();                                              /*走時(shí)時(shí)間輸出驅(qū)動(dòng)子函數(shù)*/

  p_out();                                             /*判別鬧時(shí)到否子函數(shù)*/

  }

  /*定時(shí)器T0  5mS初始化*/

  void init_timer()

  {

  TMOD=0x01;

  TH0=-(4800/256);

  TL0=-(4800%256);

  IE=0x82;

  TR0=1;

  }

  /*掃描按鍵子函數(shù)*/

  void sCAN_key()

  {

  delay(1);

  if(P3_4==0)set++;

  if(set>=4)set=0;

  if(set==1)flag=0x55;

  F0:if(P3_4==0)goto F0;                      /*按鍵未釋放,在此等候*/

  }

  /*延時(shí)子函數(shù)*/

  void delay(uint k)

  {

  uint i,j;

  for(i=0;i

  for(j=0;j<121;j++)

  {;}}

  }

  /*5mS定時(shí)中斷服務(wù)子函數(shù)*/

  void zd(void) interrupt 1

  {

  TH0=-(4800/256);

  TL0=-(4800%256);

  deda++;

  }

  /*調(diào)整走時(shí)時(shí)間*/

  void time_adj()

  {uchar m;

  if(P3_5==0)delay(1);

  if(P3_5==0)hour++;

  if(hour==24)hour=0;

  for(m=0;m<30;m++)

  {

  dirve();

  if(P3_2==0)P1_7=0;

  else P1_7=1;

  delay(1);

  }

  if(P3_7==0)delay(1);

  if(P3_7==0)min++;

  if(min==60)min=0;

  for(m=0;m<30;m++)

  dirve();

  if(P3_2==0)P1_7=0;

  else P1_7=1;

  delay(1);

  }

  }

  /*調(diào)整鬧時(shí)時(shí)間*/

  void time1_adj()

  {uchar m;

  if(P3_5==0)delay(1);

  if(P3_5==0)t_hour++;

  if(t_hour==24)t_hour=0;

  for(m=0;m<30;m++)

  {

  t_dirve();

  }

  if(P3_7==0)delay(1);

  if(P3_7==0)t_min++;

  if(t_min==60)t_min=0;

  for(m=0;m<30;m++)

  {

  t_dirve();

  }

  }

  /*時(shí)、分、秒單元及走時(shí)單元轉(zhuǎn)換*/

  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;}

  }

  /*走時(shí)時(shí)間輸出驅(qū)動(dòng)子函數(shù)*/

  void dirve()

  {

  P1=DATA_7SEG[hour/10];P3=0xf7;delay(1);

  P1=DATA_7SEG[hour%10];P3=0xfb;delay(1);

  if(d_05s==1){if(P3_2==0)P1_7=0;else P1_7=1;}

  delay(1);

  P1=DATA_7SEG[min/10];P3=0xfd;delay(1);

  if(o_f==1){if(P3_1==0)P1_7=0;else P1_7=1;delay(1);}

  P1=DATA_7SEG[min%10];P3=0xfe;delay(1);

  }

  /*鬧時(shí)時(shí)間輸出驅(qū)動(dòng)子函數(shù)*/

  void t_dirve()

  {

  P1=DATA_7SEG[t_hour/10];P3=0xf7;delay(1);

  if(P3_3==0)P1_7=0;else P1_7=1;

  delay(1);

  P1=DATA_7SEG[t_hour%10];P3=0xfb;delay(1);

  P1=DATA_7SEG[t_min/10];P3=0xfd;delay(1);

  P1=DATA_7SEG[t_min%10];P3=0xfe;delay(1);

  }

  /*判別鬧時(shí)到否子函數(shù)*/

  void p_out()

  {

  if(o_f==1){

  if(t_hour==hour){if(t_min==min)

  if(P3_0==0){P1_7=0;delay(1);}

  else P1_7=1;

  }

  }

  }

  /*主函數(shù)*/

  void main()

  {

  init_timer();                       /*定時(shí)器T0初始化*/

  while(1)                                     /*無限循環(huán)*/

  {

  if(P3_4==0)scan_key();               /*有按鍵,調(diào)用

  鍵掃描子函數(shù)*/

  switch(set)                                        /*根據(jù)set鍵值散轉(zhuǎn)*/

  {

  case 0:time();break;                                   /*走時(shí)時(shí)間程序*/

  case 1:time1_adj();break;                     /*鬧時(shí)時(shí)間調(diào)整*/

  case 2:time_adj();break;                      /*走時(shí)時(shí)間調(diào)整*/

  case 3:time1_of();break;                      /*啟/停鬧時(shí)*/

  default:break;                                     /*其它退出*/

  }

  if(flag!=0x55)                             /*判斷掉電標(biāo)志*/

  {for(m=0;m<100;m++)               /*點(diǎn)亮四個(gè)8字400mS*/

  {

  P1=0x80;P3=0xf7;delay(1);

  P1=0x80;P3=0xfb;delay(1);

  P1=0x80;P3=0xfd;delay(1);

  P1=0x80;P3=0xfe;delay(1);

  }

  P1=0xff;P3=0xff;delay(400); /*熄滅四個(gè)8字400mS*/

關(guān)鍵詞:基于單片機(jī)AT89C2051的電子鐘設(shè)計(jì)方案單片機(jī)電子鐘多片IC20引腳單片AT89C2051

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

我司代理分銷MOS管,單片機(jī),電源IC,驅(qū)動(dòng)IC,PD協(xié)議IC等,專業(yè)提供各種電子元器件!
廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫(kù)提出的寶貴意見,您的參與是維庫(kù)提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!