久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5407|回復(fù): 0
收起左側(cè)

單片機(jī)定時鬧鐘

[復(fù)制鏈接]
ID:254313 發(fā)表于 2017-11-27 19:12 | 顯示全部樓層 |閱讀模式
      單片機(jī)定時鬧鐘
[電路概述]該時鐘電路主要以單片機(jī)AT89S52為核心而設(shè)計的,通過單片機(jī)對信息的分析與處理控制外圍設(shè)備。電路整體設(shè)計思想是想把它做成一個實用的器件,所以在題目要求的前提下,我們又加入了星期程序,溫度程序,年、月、日程序以及時間的12—24轉(zhuǎn)換程序。
     [關(guān)鍵字]:單片機(jī) 數(shù)碼顯示 溫度傳感器 光識電路
[題目分析與方案論證]按照系統(tǒng)設(shè)計功能的要求,初步確定設(shè)計系統(tǒng)由復(fù)位模塊、時鐘模塊、溫度模塊、音樂模塊、光識模塊及顯示模塊共五個模塊組成,后來在時鐘模塊的基礎(chǔ)上又加載了日歷、星期的模塊
從單片機(jī)AT89S52入手,通過使用AT89S52的內(nèi)部的可編程定時器/計數(shù)器,結(jié)合對外接晶振的調(diào)節(jié)來確定一個合適的振蕩周期,從而確定出內(nèi)部的機(jī)器周期。再通過對內(nèi)部中斷程序的設(shè)置來設(shè)計出時鐘程序,即設(shè)計出了電子時鐘的核心。
根據(jù)題目的要求,我們設(shè)計了以下方案:
[方案一]設(shè)計中加載了年、月、日的設(shè)計,剛開始時打算用18個共陽數(shù)碼管,考慮到數(shù)碼管太多是畢會給硬件電路帶來麻煩,經(jīng)過考慮后,決定把年、月、日與時間設(shè)置到一組數(shù)碼管上來,即六個數(shù)碼管即能顯示時間又能顯示年、月、日,這樣一來就方便了硬件電路;
[方案二]主控芯片使用51系列AT89S52單片機(jī)設(shè)計時溫度模塊設(shè)計溫度元件用AD590,利用AD590以及接口電路把溫度轉(zhuǎn)換成模擬電壓,經(jīng)由ADC0804轉(zhuǎn)換成數(shù)字信號,然后經(jīng)AT89S52處理顯示溫度。但由于AD590價錢比較貴,且只能轉(zhuǎn)換成模擬電壓,這樣一來硬件就要增加更多的器件且又不經(jīng)濟(jì),經(jīng)查找發(fā)現(xiàn)18B20溫度傳感器價錢便宜且可以直接把溫度轉(zhuǎn)換成數(shù)字量測溫范圍為-55125度,最大分辨率可達(dá)0.0625度,采用3線制與單片機(jī)相連,減少了外部的硬件電路,具有低成本和易使用的特點,所以我們選擇了18B20溫度傳感器。
18B20溫度傳感器工作原理:DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并可根據(jù)實際要求通過簡單的編程實現(xiàn)912位的數(shù)字值讀數(shù)方式。溫度傳感器DS18B20采集溫度信號送該給單片機(jī)處理,存儲器通過單片機(jī)對某些時間點的數(shù)據(jù)進(jìn)行存儲;DS18B20的性能特點如下:
   1、獨特的單線接口僅需要一個引腳進(jìn)行通信;
   2、多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)多點組網(wǎng)功能;
   3、無須外部器件;
   4、可通過數(shù)據(jù)線供電,電壓范圍為3.0---5.5V
   5、零待機(jī)功耗;
   6、溫度以912位數(shù)字量讀出;
   7、用戶可定義的非易失性溫度報警設(shè)置;
   8、報警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件;
   9、負(fù)電壓特性,電源極性接反是,溫度計不會因發(fā)熱而燒毀,但不能正常工作。
[系統(tǒng)總體結(jié)構(gòu)框圖]
[按鍵功能]
    a鍵:P2.112---24轉(zhuǎn)換
    b鍵:P2.3口調(diào)整定時、計時的時、調(diào)整年
    c鍵:P2.5口調(diào)整計時的秒和定時狀態(tài)及日
    d鍵:P2.7口判斷定時到否
    e鍵:P2.0口調(diào)整星期
    f鍵:P2.2口定時、計時轉(zhuǎn)換
    g鍵:P2.4口調(diào)整定時、計時的秒和判斷定時狀態(tài)、調(diào)整日
    h鍵:P2.6口調(diào)整定時的報警音樂、省電模式
    i鍵:復(fù)位鍵
    j鍵:P3.6口年、月、日的顯示
[主要電路原理與設(shè)計]
1)系統(tǒng)硬件電路的設(shè)計:
電路是由控制部分和顯示部分兩大部分組成。利用單片機(jī)程序進(jìn)行控制,單片機(jī)以晶體振蕩器的振蕩周期(或外部引入的時鐘周期)為最小的時序單位,片內(nèi)的各種微操作都以此周期為時序基準(zhǔn)。振蕩頻率二分頻后形成狀態(tài)周期或稱s周期,所以,1個狀態(tài)周期包含有2個振蕩周期。振蕩頻率foscl2分頻后形成機(jī)器周期MC。所以,1個機(jī)器周期包含有6個狀態(tài)周期或12個振蕩周期。1個到4個機(jī)器周期確定一條指令的執(zhí)行時間,這個時間就是指令周期。AT89S52單片機(jī)指令系統(tǒng)中,各條指令的執(zhí)行時間都在1個到4個機(jī)器周期之間。
,并通過數(shù)碼管進(jìn)行顯示單片機(jī)普遍采用鎖相環(huán)技術(shù),使單片機(jī)的時鐘頻率可由程序控制。鎖相環(huán)允許用戶在片外使用頻率較低的晶振,可以很大地減小板級噪聲;而且,由于時鐘頻率可由程序控制,系統(tǒng)時鐘可以在一個很寬的范圍內(nèi)調(diào)整,總線頻率往往能升得很高。但是,使用鎖相環(huán)也會帶來額外的功率消耗。單就時鐘方案來講,使用外部晶振且不使用鎖相環(huán)是功率消耗最小的一種。AT89S52單片機(jī)的時鐘信號通常用兩種電路形式得到:內(nèi)部振蕩方式和外部振蕩方式。
在引腳XTAL1XTAL2外接晶體振蕩器(簡稱晶振)或陶瓷諧振器,就構(gòu)成了內(nèi)部振蕩方式。由于單片機(jī)內(nèi)部有一個高增益反相放大器,當(dāng)外接晶振后,就構(gòu)成了自激振蕩器并產(chǎn)生振蕩時鐘脈沖。內(nèi)部振蕩方式的外部電路如下圖所示。
圖中,電容器C01C02起穩(wěn)定振蕩頻率、快速起振的作用,其電容值一般在5-30pF。晶振頻率的典型值為12MH2,采用6MHz的情況也比較多。內(nèi)部振蕩方式所得的時鐘情號比較穩(wěn)定,實用電路中使用較多。
外部振蕩方式是把外部已有的時鐘信號引入單片機(jī)內(nèi)。這種方式適宜用來使單片機(jī)的時鐘與外部信號保持同步。外部振蕩方式的外部電路如下圖所示。如圖所示:
各模塊分析:
顯示模塊——電路先通過電源電路送出+5V電壓,單片機(jī)AT89S52通過74LS47CD45154—16譯碼器)驅(qū)動數(shù)碼管顯示數(shù)值, 顯示部分采用普通共陽極數(shù)碼管顯示,采用動態(tài)掃描,以減少硬件電路。考慮到一次掃描12位數(shù)碼管顯示時會出現(xiàn)閃爍情況,設(shè)計時分兩排顯示,一排顯示時間和年月日,一排顯示星期和溫度,  共陽極數(shù)碼管中8個發(fā)光二極管的陽極(二極管正端)連在一起。通常,公共陽極接高電平(一般接電源),其它管腳接段驅(qū)動電路輸出端。當(dāng)某段驅(qū)動電路的輸入端為低電平時,該端所連接的字段導(dǎo)通并點亮。根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時,要求段驅(qū)動電路能吸收額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來確定相應(yīng)的限流電阻。采用動態(tài)顯示方式,比較節(jié)省I/O口,硬件電路也較靜態(tài)顯示簡單,但其亮度不如靜態(tài)顯示方式,而且在顯示位數(shù)較多時,CPU要依次掃描,占用CPU較多時間。
為了提供共陽LED數(shù)碼管的驅(qū)動電壓,用三極管9012作電源驅(qū)動輸出。采用12MHz晶振,有利于提高秒計時的精確性。三極管采用9012。數(shù)碼管采用紅色的共陽型LED數(shù)碼管,亮度高些,因為是掃描的顯示方式,所以各個數(shù)碼管的abcdefg各腳采用了總線并聯(lián),改動510歐姆的電阻可以改變顯示亮度;
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image007.gif
時鐘模塊——利用芯片內(nèi)部的振蕩器,然后在引腳XTAL1和引腳 XTAL2兩端接晶體諧振器,就構(gòu)成了穩(wěn)定的自激振蕩器,其發(fā)出的脈沖直接送入內(nèi)部的時鐘電路,如圖外接晶振時,C1C2的值通常選擇30pF C1C2對頻率有微調(diào)作用,晶體諧振器的頻率12MHz。為了減少寄生電容,更好地保證振蕩器穩(wěn)定、可靠地工作,振蕩器和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近。設(shè)置了12—24兩種顯示狀態(tài),調(diào)整計時的按鍵、設(shè)置定時的按鍵且定時設(shè)置了3次定時、還另加載了星期、年、月、日的調(diào)整及閏年的自動調(diào)整;
溫度模塊——主要由18B20通過單片機(jī)AT89S52中的溫度程序不斷的檢測溫度來顯示溫度溫度傳感器DS18B20采集溫度信號送該給單片機(jī)處理,存儲器通過單片機(jī)對某些時間點的數(shù)據(jù)進(jìn)行存儲
音樂模塊——通過LM386N-1給揚(yáng)聲器信號來發(fā)出音樂,這個模塊主要是為時鐘定時到時發(fā)出音樂鬧鈴,而在軟件部分設(shè)置了可以一次設(shè)置3次定時,每次定時到時,音樂程序中編了6種音樂,它可以自動選擇6種音樂中的任一音樂響1分鐘,如果中間不想讓鬧鈴響可以按一按鍵,鬧鈴就立刻停止
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif
復(fù)位模塊——單片機(jī)復(fù)位電路是使CPU和系統(tǒng)中的其他功能部件都處在一個確定的初始狀態(tài),并從該狀態(tài)開始工作,例如復(fù)位后PC=0000H,使單片機(jī)從第一個單元取指令。無論是在單片機(jī)剛接上電源時,還是斷電后或者發(fā)生故障后都要復(fù)位;單片機(jī)的復(fù)位操作使單片機(jī)進(jìn)入初始化狀態(tài),其中包括使程序計數(shù)器PC=0000H,這表明程序從0000H地址單元開始執(zhí)行。單片機(jī)冷啟動后,片內(nèi)RAM為隨機(jī)值,運行中的復(fù)位操作不改變片內(nèi)RAM區(qū)中的內(nèi)容,21個特殊功能寄存器復(fù)位后的狀態(tài)為確定值,見下表。
值得指出的是,記住一些特殊功能寄存器復(fù)位后的主要狀態(tài),對于了解單片機(jī)的初態(tài),減少應(yīng)用程序中的韌始化部分是十分必要的。
說明:表中符號*為隨機(jī)狀態(tài);
A=00H,表明累加器已被清零;
  
特殊功能寄存器
  
  
初始狀態(tài)
  
  
特殊功能寄存器
  
  
初始狀態(tài)
  
  
A
  
  
00H
  
  
TMOD
  
  
00H
  
  
B
  
  
00H
  
  
TCON
  
  
00H
  
  
PSW
  
  
00H
  
  
TH0
  
  
00H
  
  
SP
  
  
07H
  
  
TL0
  
  
00H
  
  
DPL
  
  
00H
  
  
TH1
  
  
00H
  
  
DPH
  
  
00H
  
  
TL1
  
  
00H
  
  
P0~P3
  
  
FFH
  
  
SBUF
  
  
不定
  
  
IP
  
  
***00000B
  
  
SCON
  
  
00H
  
  
IE
  
  
0**00000B
  
  
PCON
  
  
0*******B
  
PSW=00H,表明選寄存器0組為工作寄存器組;
SP=07H,表明堆棧指針指向片內(nèi)RAM 07H字節(jié)單元,根據(jù)堆棧操作的先加后壓法則,第一個被壓入的內(nèi)容寫入到08H單元中;
Po-P3=FFH,表明已向各端口線寫入1,此時,各端口既可用于輸入又可用于輸出;
IP=×××00000B,表明各個中斷源處于低優(yōu)先級;
IE=0××00000B,表明各個中斷均被關(guān)斷;
系統(tǒng)復(fù)位是任何微機(jī)系統(tǒng)執(zhí)行的第一步,使整個控制芯片回到默認(rèn)的硬件狀態(tài)下。51單片機(jī)的復(fù)位是由RESET引腳來控制的,此引腳與高電平相接超過24個振蕩周期后,51單片機(jī)即進(jìn)入芯片內(nèi)部復(fù)位狀態(tài),而且一直在此狀態(tài)下等待,直到RESET引腳轉(zhuǎn)為低電平后,才檢查EA引腳是高電平或低電平,若為高電平則執(zhí)行芯片內(nèi)部的程序代碼,若為低電平便會執(zhí)行外部程序。
光識模塊——同樣也是為定時服務(wù)的,只要定時到,組成心字的18只發(fā)光二極管就會按程序先做左移位,再全亮全滅3次,然后再右移,再全亮全滅3次如此循環(huán)1分鐘;
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image009.gif
  
        
AT89S52
   
         
   
   
   
P1
   
   
   
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif
安全省電模式——電源電路上裝了保險管只要電流大于額定電流保險就斷來保護(hù)電路,省電模式:不看時顯示不亮,看時,按下一鍵顯示就亮,盡量達(dá)到人性化。
[軟件系統(tǒng)設(shè)計]
計時程序是實現(xiàn)電子時鐘的核心內(nèi)容,本程序用中斷time0來控制,計時顯示的單元從50h開始,50h=秒的個位,51h=秒的十位,52h=分的個位,53h=分的十位,54h=時的個位,55h=時的十位
org    000bh           


jmp    time0
mov    tmod,#00010001b               
mov    ie,#10001010b               
mov    ip,#00000010b
           mov    th0,#(65536-2000)/256


          mov   tl0,#low(65536-2000)
           mov    4fh,#02;兩個中斷250次為1
定時報警程序
作用是判斷時間是否與設(shè)置的鬧鐘時間相等,如相等則開啟鬧鐘。
單片機(jī)內(nèi)定時振鈴開關(guān)使用軟件開關(guān),即用標(biāo)志寄存器,且程序設(shè)置了3次定時,可見要使電子時鐘定時打鈴,必須同時具備兩個條件,第一:定時振鈴開;第二:當(dāng)前定時項數(shù)不為0項。 因為要使電子時鐘定時打鈴,必須同時具備上述的兩個條件,所以在單片機(jī)執(zhí)行查詢定時各項的程序之前,主程序會首先查詢這兩個條件是否同時滿足,如果滿足的話,則進(jìn)行一輪查詢,所謂一輪查詢定時,即將當(dāng)前時間與定時各項一一比較,看是否相符,如果查到某項相符,則調(diào)用音樂程序。每查完一項,寄存器中的值會自動減1(即為定時時間的項數(shù))。當(dāng)定時時間的項數(shù)值自動減為0時,則表示這一輪查詢定時時間完畢,只要條件允許(定時音樂開且定時項數(shù)不為0),有可以進(jìn)行一輪新的查詢定時時間。
定時133h=分,34h=時,定時235h=分,36h=時,定時337h=分,38h=時,定時狀態(tài)=39h;定時顯示的單元從60h開始,60h=定時狀態(tài),61h=此時;定時狀態(tài)的音樂種類,62h=分的個位,63h=分的十位;64h=時的個位,65h=時的十位
溫度程序:
57h=溫度的十位,58h=溫度的個位,
      
wendu:CALL REST;調(diào)復(fù)位




MOV   A,#0CCH
          CALL  WRITE調(diào)寫程序
          MOV   A,#4EH
          CALL  WRITE
          MOV   A,#00H
          CALL  WRITE
          MOV   A,#00H
          CALL  WRITE
          MOV   A,#7FH
          CALL  WRITE
          CALL  REST
           MOV  A,#0CCH
          CALL  WRITE
          MOV   A,#44H
          CALL  WRITE
          MOV   R0,#20
LOOP5:MOV  R1,#100
    LOOP6:MOV   R2,#250
          DJNZ  R2,$
          DJNZ  R1,LOOP6
          DJNZ  R0,LOOP5
          CALL  REST
           MOV  A,#0CCH
          CALL  WRITE
          MOV   A,#0BEH
          CALL  WRITE
          CALL  READ2;調(diào)讀程序
          MOV   A,#0ECH
          CALL  WRITE
          CALL  HUAN
          clr   20h.3
          ret


                        
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image011.gif


******初始化*************************************   
          org    0000h;計時顯示的單元從50h開始,50h=秒的個位,51h=秒的十位,52h=
          jmp    main;分的個位,53h=分的十位,54h=時的個位,55h=時的十位,56h=
          org    000bh;星期,57h=溫度的十位,58h=溫度的個位,30h=秒,31h=分,32h=,定時133h=分,34h=時,
          jmp    time0;定時235h=分,36h=時,定時337h=分,38h=時,定時狀態(tài)=39h
          org    001bh
          jmp    time1
************主程序******************************** main:mov    r0,#00;等待
djnz   r0,$
movsp,#6ah            ;定時顯示的單元從60h開始,60h=定時狀態(tài),61h=此時
  mov    tmod,#00010001b    ;定時狀態(tài)的音樂種類,62h=分的個位,63h=  分的十位
mov    ie,#10001010b      ;64h=時的個位,65h=                              的十位
mov    ip,#00000010b
mov    th0,#(65536-2000)/256
mov    tl0,#low(65536-2000)
  mov    4fh,#02;兩個中斷250次為1秒
mov    4eh,#00;光報警
  mov    2dh,#250;中斷250次為0.5秒
  mov    2fh,#00h;設(shè)置計時顯示數(shù)碼管的編號
  mov    2eh,#00h;設(shè)置定時顯示數(shù)碼管的編號
  mov    24h,#00h;設(shè)置年月日顯示數(shù)碼管的編號
mov    30h,#00h;設(shè)置時間的初值
mov    31h,#00h
mov    32h,#12h
  mov    56h,#01h;
設(shè)置星期初值
mov    33h,#00h;
設(shè)置定時初值
mov   34h,#01h
mov   35h,#00h
mov    36h,#02h
mov   37h,#00h
mov   38h,#03h
mov    39h,#01h;
設(shè)置定時狀態(tài)初始值
mov    3ah,#01h;設(shè)置定時狀態(tài)1時音樂的初始值
          mov    3bh,#02h;設(shè)置定時狀態(tài)2時音樂的初始值
          mov    3ch,#03h;設(shè)置定時狀態(tài)3時音樂的初始值
          mov    21h,#00h;設(shè)置年初值,00表示2000年
          mov    22h,#01h;設(shè)置月初值
          mov    23h,#01h;設(shè)置日初值
           setb   20h.0;12,24標(biāo)志位,1表示12小時制,0表示24小時制
          setb   20h.1;定時,計時標(biāo)志位,1表示計時,0表示定時
          clr    20h.2;定時到否標(biāo)志位,1表示到,0表示不到
          setb   20h.3;是否允許檢測溫度標(biāo)志位,1表示允許
          clr    20h.4;
年標(biāo)志位,1表示閏年
          setb   20h.5;
1表示31天,0表示30天
          clr    20h.6;1表示顯示年月日
          setb   p3.0;上下午標(biāo)志位,1表示上午,0表示下午
          clr    p1
          setb   tr0
*************星期設(shè)置程序*************************************         
    startjb     p2.0,q1;調(diào)整星期
          call   del;消除抖動
          mov    a,56h
           add   a,#01h
          cjne   a,#07h,z1
mov   56h,#08h
jmp   a1
z1:cjne  a,#09h,z2
mov   56h,#01h
jmp   a1
z2:mov   56h,a
a1:call  del
jnb   p2.0,a1
jmp   start
*************設(shè)置12--24小時轉(zhuǎn)換程序********************************         
q1:jb    p2.1,q2;
12,24小時制轉(zhuǎn)換
call  del; 消除抖動
jnb   20h.0,b1
jnb    p3.0,b2;將12小時制轉(zhuǎn)換為24小時制
jmp   a2
b2:mov    a,32h
add    a,#12h
da     a
cjne  a,#24h,b3
mov   32h,#00h
setb  p3.0
jmp   a2
b3:mov   32h,a
setb  p3.0
jmp   a2
b1:mov    a,32h;將24小時制轉(zhuǎn)換為12小時制
cjne  a,#00h,b7
mov   32h,#12h
clr   p3.0
jmp   a2
b7:cjne  a,#20h,b8
mov   32h,#08h
clr   p3.0
jmp   a2
b8:cjne  a,#21h,b9
          mov    32h,#09h
          clr    p3.0
          jmp    a2
       b9:cjne   a,#12h,b4
          jmp    a2
       b4:jnc    b5
          jmp    a2
       b5:subb   a,#12h
          mov    32h,a
          clr    p3.0
       a2:cpl    20h.0
       b6:call   del
          jnb    p2.1,b6
          jmp    start
*************定時計時調(diào)整程序*************************************         
   q2:jb     p2.2,q3;定時,計時轉(zhuǎn)換
          call   del;
          cpl    20h.1
       a3:call   del
          jnb    p2.2,a3
          jmp    start
       q3:jb     p2.3,q4;調(diào)整定時,計時的時,年
          call   del;消除抖動
          jnb    20h.6,c00
          call   yearyear
          jmp    a4   
      c00:jnb    20h.1,c1
        jb     20h.0,c2;計時調(diào)整
          mov    a,32h
          add    a,#01h
          da     a
          cjne   a,#24h,c3
          mov    32h,#00h
           jmp   a4
       c3:mov    32h,a
          jmp    a4
       c2:mov    a,32h
          add    a,#01h
          da     a
          mov    32h,a
          cjne   a,#13h,c4
          mov    32h,#01h
          cpl    p3.0
          jmp    a4
       c4:mov    32h,a
          jmp    a4
       c1:mov    a,39h;定時調(diào)整
          cjne   a,#01h,c5
          mov    r0,#34h
          jmp    c10
       c5:cjne   a,#02h,c6
          mov    r0,#36h
          jmp    c10
       c6:mov    r0,#38h
      c10:jb     20h.0,c7
          mov    a,@r0
          add    a,#01h
          da     a
          cjne   a,#24h,c8
          mov    @r0,#00h
          jmp    a4
       c8:mov    @r0,a
          jmp    a4
       c7:mov    a,@r0
          add    a,#01h
          da     a
          cjne   a,#13h,c9
          mov    @r0,#01h
          jmp    a4
       c9:mov    @r0,a
       a4:call   del
          jnb    p2.3,a4
          jmp    start
        q4:jb     p2.4,q5;調(diào)整定時,計時的分,月
          call   del
          jnb    20h.6,d00
          call   yueyue
          jmp    a5
      d00:jnb    20h.1,d1
          mov   a,31h;計時分調(diào)整
          add    a,#01h
          da     a
          cjne   a,#60h,d2
          mov    31h,#00h
          jmp    a5
       d2:mov    31h,a
          jmp    a5
       d1:mov   a,39h ;定時分調(diào)整
          cjne   a,#01h,d3
          mov    r0,#33h
          jmp    d5
       d3:cjne   a,#02h,d4
          mov    r0,#35h
          jmp    d5
        d4:mov   r0,#37h
       d5:mov    a,@r0
          add    a,#01h
          da     a
          cjne   a,#60h,d6
          mov    @r0,#00h
          jmp    a5
       d6:mov    @r0,a
       a5:call   del
          jnb    p2.4,a5
          jmp    start
        q5:jb  p2.5,q6;調(diào)整計時的秒和定時的狀態(tài),日
          call   del
          jnb    20h.6,e00
          call   ri
          jmp    a6
      e00:jnb    20h.1,e1
         mov  a,30h;調(diào)整計時的秒
          add    a,#01h
          da     a
          cjne   a,#60h,e2
          mov    30h,#00h
          jmp    a6
       e2:mov    30h,a
          jmp    a6
      e1:mov  a,39h;調(diào)整定時狀態(tài)
          add    a,#01h
          da     a
          cjne   a,#04h,e3
          mov    39h,#01h
          jmp    a6
       e3:mov    39h,a
       a6:call   del
          jnb    p2.5,a6
          jmp    start
*************調(diào)整定時的報警音樂,省電模式*********************************
       q6:jb     p2.6,q7
          call   del
          jnb    20h.1,gh
          cpl    p3.4
          jmp    i3
       gh:mov    a,39h
          cjne   a,#01h,i1
          mov    a,3ah
          add    a,#01h
          mov    3ah,a
          cjne   a,#07h,i3
          mov    3ah,#01h
          jmp    i3
       i1:cjne   a,#02h,i2
          mov    a,3bh
          add    a,#01H
          mov    3bh,a
          cjne   a,#07h,i3
          mov    3bh,#01h
          jmp    i3
       i2:mov    a,3ch
          add    a,#01h
          mov    3ch,a
          cjne   a,#07h,i3
          mov    3ch,#01h
       i3:call   del
          jnb    p2.6,i3
          jmp    start
************定時報警**************************        
       q7:jnb    20h.2,q8
          call   yinyue
          jmp    start
       q8:jnb    20h.3,q9
          call   wendu;檢測溫度
          jmp    start
       q9:jb     p3.6,q10
          cpl    20h.6
      q11:call   del
          jnb    p3.6,q11
      q10:jmp    start
  ***********閏年判斷************************************************   
     nian:mov    a,21h
          cjne   a,#00h,nian0
          jmp    year
    nian0:cjne   a,#04h,nian1
          jmp    year
    nian1:cjne   a,#08h,nian2
          jmp    year
    nian2:cjne   a,#12h,nian3
          jmp    year
    nian3:cjne   a,#16h,nian4
          jmp    year
    nian4:cjne   a,#20h,nian5
          jmp    year
    nian5:cjne   a,#24h,nian6
          jmp    year
    nian6:cjne   a,#28h,nian7
          jmp    year
    nian7:cjne   a,#32h,nian8
          jmp    year
    nian8:cjne   a,#36h,nian9
          jmp    year
     nian9:cjne  a,#40h,nian10
          jmp    year
   nian10:cjne   a,#44h,nian11
          jmp    year
   nian11:cjne   a,#48h,nian12
          jmp    year
   nian12:cjne   a,#52h,nian13
          jmp    year
   nian13:cjne   a,#56h,nian14
          jmp    year
   nian14:cjne   a,#60h,nian15
          jmp    year
   nian15:cjne   a,#64h,nian16
          jmp    year
   nian16:cjne   a,#68h,nian17
          jmp    year
   nian17:cjne   a,#72h,nian18
          jmp    year
   nian18:cjne   a,#76h,nian19
          jmp    year
   nian19:cjne   a,#80h,nian20
          jmp    year
   nian20:cjne   a,#84h,nian21
          jmp    year
   nian21:cjne   a,#88h,nian22
          jmp    year
   nian22:cjne   a,#92h,nian23
          jmp    year
   nian23:cjne   a,#96h,nian24
     year:setb   20h.4
          jmp    year1
   nian24:clr    20h.4
    year1:ret
yue:mov a,22h;大月31天,小月30
          cjne   a,#04h,yue0
          jmp    yue4
     yue0:cjne   a,#06h,yue1
          jmp    yue4
     yue1:cjne   a,#09h,yue2
          jmp    yue4
     yue2:cjne   a,#11h,yue3
     yue4:clr    20h.5
          jmp    yue5
     yue3:setb   20h.5
     yue5:ret
yearyear:mov    a,21h;年加1
          add    a,#01h
          da     a
          mov    21h,a
          ret
   yueyue:mov    a,22h;月加1
          add    a,#01h
          da     a
          mov    22h,a
          cjne   a,#13h,yueyue0
          mov    22h,#01h
yueyuye0:ret
       ri:mov    a,23h;日加1
          add    a,#01h
          da     a
          mov    23h,a
          cjne   a,#29h,ri0
          mov    a,22h
          cjne   a,#02h,ri1
          call   nian
          jb     20h.4,ri1
          mov    23h,#01h
          jmp    ri1
      ri0:cjne   a,#31h,ri2
          call   yue
          jb     20h.5,ri1
          mov    23h,#01h
          jmp    ri1
      ri2:cjne   a,#32h,ri1
          mov    23h,#01h
      ri1:ret
**************計時子程序************************     
    jishi:mov    a,30h;秒加一        
          add    a,#01h
          da     a
          mov    30h,a
          cjne   a,#60h,f4
          mov    30h,#00h
         setb  20h.3;允許檢測溫度
          mov    a,31h;分加一
           add   a,#01h
          da     a
          mov    31h,a
          cjne   a,#60h,f4
          mov    31h,#00h
          mov    a,32h;時加一
          add    a,#01h
          da     a
          mov    32h,a
          jb     20h.0,f1
          cjne   a,#24h,f4
          mov    32h,#00h
          jmp    f2
       f1:cjne   a,#13h,f4
          mov    32h,#01h
          cpl    p3.0
          jnb    p3.0,f4
       f2:mov    a,56h; 星期加一
          add    a,#01h
          mov    56h,a
          cjne   a,#07h,f3
          mov    56h,#08h
          jmp    f4
       f3:cjne   a,#09h,f4
          mov    56h,#01h
       f4:call   day;更新年月日
   jb     p2.7,f7;定時到否子程序段
          mov    a,31h
          cjne   a,33h,f5
          mov    a,32h
           cjne  a,34h,f8
          setb   20h.2
          mov    a,3ah
          mov    2ch,a
          jmp    a7
       f8:mov    a,31h
       f5:cjne   a,35h,f6
          mov    a,32h
          cjne   a,36h,f9
          setb   20h.2
          mov    a,3bh
          mov    2ch,a
          jmp    a7
       f9:mov    a,31h
       f6:cjne   a,37h,f7
          mov    a,32h
          cjne   a,38h,f7
          setb   20h.2
          mov    a,3ch
          mov    2ch,a
          jmp    a7
        f7:clr   20h.2
       a7:ret
      day:mov    a,23h;日加1
          add    a,#01h
          da     a
          mov    23h,a
          cjne   a,#29h,rri0
          mov    a,22h
          cjne   a,#02h,wan
          call   nian
          jb     20h.4,wan
          mov    23h,#01h
          jmp    yuey
     rri0:cjne   a,#31h,rri2
          call   yue
          jb     20h.5,wan
          mov    23h,#01h
          jmp    yuey
     rri2:cjne   a,#32h,wan
          mov    23h,#01h
     yuey:mov    a,22h;月加1
          add    a,#01h
          da     a
          mov    22h,a
          cjne   a,#13h,wan
          mov    22h,#01h
          mov    a,21h;年加1
          add    a,#01h
          da     a
          mov    21h,a
      wan:ret
    ************計時掃描子程序********************************  
    scan1:mov    r0,#2fh
          inc    @r0
          cjne   @r0,#0ch,g1
          mov    @r0,#00h
       g1:mov    a,@r0
          add    a,#50h
          mov    r1,a
          mov    a,@r0
          swap   a
          orl    a,@r1
          mov    p0,a
          ret
   ***********定時掃描子程序********************************      
    scan2:mov    r0,#2eh
          inc    @r0
          cjne   @r0,#06h,g2
          mov    @r0,#00h
        g2:mov   a,@r0
          add    a,#60h
          mov    r1,a
          mov    a,@r0
          swap   a
          orl    a,@r1
          mov    p0,a
          ret
scan3:mov r0,#24h;定時掃描子程序
          inc    @r0
          cjne   @r0,#06h,gg2
           mov   @r0,#00h
      gg2:mov    a,@r0
          add    a,#40h
          mov    r1,a
          mov    a,@r0
          swap   a
          orl    a,@r1
          mov    p0,a
          ret
  **************計時顯示子程序**************************        
xianshi1:mov    r1,#50h
          mov    a,30h
          mov    b,#10h
          div    ab
          mov    @r1,b
          inc    r1
          mov    @r1,a
          inc    r1
          mov    a,31h
          mov    b,#10h
          div    ab
          mov    @r1,b
          inc    r1
          mov    @r1,a
          inc    r1
          mov    a,32h
          mov    b,#10h
          div    ab
          mov    @r1,b
          inc    r1
          mov    @r1,a
          ret
********定時顯示子程序*******     
xianshi2: mov  a,39h
          mov   60h,a
          cjne  a,#01h,h1
          mov   a,3ah
          mov   61h,a
          mov   r1,#62h
          mov   a,33h
          mov   b,#10h
          div   ab
          mov   @r1,b
          inc   r1
          mov   @r1,a
          inc   r1
          mov   a,34h
          mov   b,#10h
          div   ab
          mov   @r1,b
          inc   r1
          mov   @r1,a
          jmp   h3
       h1:cjne  a,#02h,h2
          mov   a,3bh
          mov   61h,a
          mov   r1,#62h
          mov   a,35h
          mov   b,#10h
          div   ab
          mov   @r1,b
          inc   r1
          mov   @r1,a
          inc   r1
          mov   a,36h
          mov   b,#10h
          div   ab
          mov   @r1,b
          inc   r1
          mov   @r1,a
          jmp   h3
       h2:mov   a,3ch
          mov   61h,a
          mov   r1,#62h
          mov   a,37h
          mov   b,#10h
          div   ab
          mov   @r1,b
          inc   r1
          mov   @r1,a
          inc   r1
          mov   a,38h
          mov   b,#10h
          div   ab
          mov   @r1,b
          inc   r1
          mov   @r1,a
       h3:ret
xianshi3:mov    r1,#40h;計時顯示子程序
          mov    a,21h
          mov    b,#10h
          div    ab
          mov    @r1,b
          inc    r1
          mov    @r1,a
          inc    r1
          mov    a,22h
          mov    b,#10h
          div    ab
          mov    @r1,b
          inc    r1
          mov    @r1,a
          inc    r1
          mov    a,23h
          mov    b,#10h
          div    ab
          mov    @r1,b
          inc    r1
          mov    @r1,a
          ret
    time0:mov    th0,#(65536-2000)/256
          mov    tl0,#low(65536-2000)
          push   a
          push   psw
          setb   rs0
          clr    rs1
          djnz   2dh,h4
          mov    2dh,#250
          djnz   4fh,h4
          mov    4fh,#02
          call   jishi
       h4:jnb    20h.6,hh4
          call   xianshi3
          call   scan3
          jmp    h6
      hh4:jb     20h.1,h5
          call   xianshi2
          call   scan2
          jmp    h6
       h5:call   xianshi1
          call   scan1
       h6:pop    psw
          pop    a
          reti
      del:mov    r6,#40
       j1:mov    r5,#248
          djnz   r5,$
          djnz   r6,j1
          ret
  ***************音樂程序*****        
   yinyue:push   a
          push   psw
          setb   rs1
          clr    rs0
    main1:mov    2bh,#00h
        m:mov    a,2ch
          cjne   a,#01,q
          mov    dptr,#song1
          jmp    pu
        q:cjne   a,#02,w
          mov    dptr,#song2
          jmp    pu
        w:cjne   a,#03,e
          mov    dptr,#song3
          jmp    pu
        e:cjne   a,#04,r
          mov    dptr,#song4
          jmp    pu
        r:cjne   a,#05,t
          mov    dptr,#song5
          jmp    pu
        t:mov    dptr,#song6
       pu:jnb    20h.2,jj
          mov    a,2bh
          movc   a,@a+dptr
          mov    r0,a
          jz     end0
          anl    a,#0fh
          mov    r7,a
          mov    a,r0
          swap   a
          anl    a,#0fh
          jnz    sing
          clr    tr1
          jmp    dd1
     sing:dec    a
          mov    2ah,a
          mov    dptr,#table1
          movc    a,@a+dptr
          mov    29h,a
          mov    th1,a
          mov    a,2ah
          mov    dptr,#table2
          movc    a,@a+dptr
          mov    28h,a
          mov    tl1,a
          setb   tr1
      dd1:call   yanshi
          inc    2bh
          inc    4eh
          mov    a,4eh
          cjne   a,#60,www;????
          mov    4eh,#00
      www:mov    dptr,#table3
          mov    a,4eh
          movc   a,@a+dptr
          mov    p1,a
          jmp    m
     end0:clr    tr1
          jmp    main1
   yanshi:mov    r6,#02
      dd2:mov    r5,#125
      dd3:mov    r4,#248
          djnz   r4,$
           djnz  r5,dd3
          djnz   r6,dd2
          djnz   r7,yanshi
          ret
       jj:jmp    mmm
    time1:push   a
          push   psw
          cpl    p3.1
          mov    th1,29h
          mov    tl1,28h
          pop    psw
           pop   a
          reti
    song1:db  42h,42h,42h,52h,64h,04h
          db  62h,62h,62h,72h,84h,04h
          db  92h,92h,82h,72h,64h,04h
          db  82h,82h,52h,62h,44h,04h
          db  42h,42h,42h,52h,64h,04h
          db  62h,62h,62h,72h,84h,04h
          db  92h,92h,82h,72h,64h,04h
          db  82h,82h,52h,62h,44h,04h
          db  00h
    song2:db  82h,01h,81h,94h,84h
          db  0b4h,0a4h,04h
          db  82h,01h,81h,94h,84h
          db  0c4h,0b4h,04h
          db  82h,01h,81h,0f4h,0d4h
          db  0b4h,0a4h,94h
          db  0e2h,01h,0e1h,0d4h,0b4h
          db  0c4h,0b4h,04h
          db  00h
    song3:db  84h,94h,88h
          db  64h,54h,68h
          db  84h,64h,54h,44h
          db  62h,82h,42h,62h,58h
           db 84h,94h,88h
          db  64h,54h,68h
          db  84h,64h,54h,44h
          db  52h,42h,52h,62h,48h
          db  00h
    song4:db  84h,02h,82h,64h,54h
          db  64h,54h,48h,
          db  64h,02h,52h,44h,24h
          db  14h,24h,18h
          db  24h,02h,22h,42h,24h
          db  44h,54h,68h
          db  54h,02h,52h,84h,84h
          db  54h,64h,48h
          db  00h
    song5:db  44h,54h,64h,44h
          db  44h,54h,64h,44h
          db  64h,74h,88h
          db  64h,74h,88h
          db  82h,92h,82h,72h,64h,44h
          db  82h,92h,82h,72h,64h,44h
          db  44h,84h,48h
          db  44h,14h,48h
          db  00h
    song6:db  62h,82h,82h,62h,98h
          db  92h,0b2h,0b2h,82h,98h
          db  62h,82h,82h,52h,68h
          db  92h,0b2h,0b2h,82h,98h
          db  62h,82h,82h,62h,92h,92h,94h
          db  92h,0b2h,0b2h,92h,84h,94h
          db  0b8h,0b4h,04h
          db  00h
  table1: db  251,251,251,252
          db  252,253,253,253
          db  253,254,254,254
          db  254,254,254
               
table2: db  004,144,248,068
          db  172,009,052,130
          db  200,006,034,086
          db  131,154,193
  table3: db  0feh,0fdh,0fbh,0f7h
          db  0efh,0dfh,0bfh,7fh
          db  00h,0ffh,00h,0ffh
          db  7fh,0bfh,0dfh,0efh
          db  0f7h,0fh,0fdh,0feh
          db  00h,0ffh,00h,0ffh
          db  81h,0c3h,0e7h,0ffh
          db  0e7h,0c3h,81h,00h
          db  81h,42h,24h,18h,00h
      mmm:clr  tr1
          clr  p1
          pop  psw
          pop  a
          ret
   **************溫度程序******      
    wendu:CALL  REST
          MOV   A,#0CCH
          CALL  WRITE
          MOV   A,#4EH
          CALL  WRITE
          MOV   A,#00H
          CALL  WRITE
          MOV   A,#00H
          CALL  WRITE
          MOV   A,#7FH
          CALL  WRITE
          CALL  REST
          MOV   A,#0CCH
          CALL  WRITE
          MOV   A,#44H
          CALL  WRITE
          MOV   R0,#20
    LOOP5:MOV   R1,#100
    LOOP6:MOV   R2,#250
          DJNZ  R2,$
          DJNZ  R1,LOOP6
          DJNZ  R0,LOOP5
          CALL  REST
          MOV   A,#0CCH
          CALL  WRITE
          MOV   A,#0BEH
          CALL  WRITE
          CALL  READ2
          MOV   A,#0ECH
          CALL  WRITE
          CALL  HUAN
          clr   20h.3
          ret
     rest:SETB P3.3
          NOP
          CLR P3.3
          MOV R0,#0ffH;
          DJNZ R0,$; 延時
          SETB P3.3
          NOP
          NOP
          NOP
          MOV R0,#25H
    LOOP0:JNB P3.3,LOOP1
          DJNZ R0,LOOP0
          JMP  REST
    LOOP1:MOV R0,#06BH
          DJNZ R0,$ ;
          SETB P3.3
          RET
    READ: MOV R2,#8
    LOOP2:CLR C
          SETB P3.3
           NOP
          NOP
          CLR P3.3
          NOP
          NOP
          NOP
          SETB P3.3
          MOV R3,#7
          DJNZ R3,$
          MOV C,P3.3
          MOV R3,#23
          DJNZ R3,$
          RRC A
          DJNZ R2,LOOP2
          RET
    WRITE:MOV R2,#8
          CLR C
    LOOP3:CLR P3.3
          MOV R3,#6
          DJNZ R3,$
          RRC A
          MOV P3.3,C
          MOV R3,#23
          DJNZ R3,$
          SETB P3.3
          NOP
          DJNZ R2,LOOP3
          SETB P3.3
          RET
    READ2:MOV  R0,#02
          MOV  R1,#42H
    LOOP7:CALL READ
          MOV  @R1,A
          INC  R1
          DJNZ R0,LOOP7
          RET
    HUAN: MOV  A,4dH
          ANL  A,#0F0H
          SWAP  A
          MOV  4dH,A
          MOV  A,4cH
          ANL  A,#0FH
          SWAP  A
          ORL  A,4dH
          MOV  4dH,A
mov r0,#00h ;占存十進(jìn)制數(shù)的十位與個位數(shù),高4位存十位數(shù),低4位存?zhèn)位數(shù)
mov r1,#00h ;占存十進(jìn)制數(shù)的百位數(shù)
mov r3,#08h ;算法(((((((0*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1=255  因此需循環(huán)8
aaa:mov a,4dh    ;將要轉(zhuǎn)換的十六進(jìn)制數(shù)放在a中;
clr c
rlc a       ;將最高位放在c
mov 4dh,a  ;;將剩下的幾位存在40h mov  a,r0   ;;乘以2并加上現(xiàn)在的最高          位上的數(shù)
addc a,r0
da   a       ;;十進(jìn)制調(diào)整后,a高4位存十位數(shù),低4位存?zhèn)位數(shù)
mov r0,a
mov  a,r1    ;;百位數(shù)乘2并加上十進(jìn)制調(diào)整后的進(jìn)位
addc a,r1
da  a
mov r1,a
djnz r3,aaa
mov a,r0


mov  r6,a
anl a,#0fh
mov  58h,a   ;;將轉(zhuǎn)換后的個位數(shù)存在50h單元
mov  a,r6
anl a,#0f0h
swap a
mov 57h,a    ;;將轉(zhuǎn)換后的十位數(shù)存在51h單元
ret
end
[功能測試及結(jié)果分析]
硬件調(diào)試時,先查看了焊接質(zhì)量,檢查無誤后,用示波器測試晶振及各端口的波形情況,進(jìn)行綜合硬件測試分析。
[參考資料]
1、李光飛、樓然苗等 《單片機(jī)課程設(shè)計實例指導(dǎo)》北京航空航天大學(xué)出版社,2004
2、吳金戌、沈慶陽、郭庭吉 《8051單片機(jī)實踐與應(yīng)用》清華大學(xué)出版社、2001



回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产精品 | 黄色成人免费在线观看 | 中文字幕日韩av | 中文字幕成人 | 91高清视频在线观看 | 亚洲欧洲色视频 | 欧美一区二区三区电影 | 国产一区91精品张津瑜 | aaa国产大片| 天天天久久久 | 欧美视频一区二区三区 | www.亚洲 | 成年人在线 | 天天综合永久入口 | 日韩精品一区二区三区视频播放 | 99色在线视频 | 一区二区中文 | 成人精品一区二区户外勾搭野战 | 羞视频在线观看 | 请别相信他免费喜剧电影在线观看 | 成年人免费在线视频 | 四虎免费视频 | 亚洲成色777777在线观看影院 | 奇米超碰| 综合第一页| 日日拍夜夜| 玖玖免费 | 日韩一区二区三区在线观看 | 欧美成人猛片aaaaaaa | 秋霞影院一区二区 | 日韩精品在线一区二区 | 久久成人一区 | 久久国产精品一区二区 | 欧美日韩国产在线观看 | 日韩精品一区二区三区在线观看 | 欧美最猛性xxxxx亚洲精品 | 国产福利91精品一区二区三区 | 99亚洲精品 | 国产重口老太伦 | 国产黄色一级电影 | 欧美日韩国产一区二区三区不卡 |