找回密碼
         注冊(cè)會(huì)員
        搜索附件  

        未命名.jpg

         

        51單片機(jī)的電子鐘 顯示時(shí)間 年月日 鬧鐘 整點(diǎn)報(bào)時(shí) 秒表 硬件原理圖 仿真結(jié)果都有:


        一、系統(tǒng)概述:

        1.基本要求:

        (1) 顯示準(zhǔn)確的北京時(shí)間(時(shí)、分、秒),可用24小時(shí)制式;

        (2) 隨時(shí)可以調(diào)校時(shí)間。

        (3) 增加公歷日期顯示功能(年、月、日),年號(hào)只顯示最后兩位;

        (4) 隨時(shí)可以調(diào)校年、月、日;

        (5) 允許通過(guò)轉(zhuǎn)換功能鍵轉(zhuǎn)換顯示時(shí)間或日期。

        (6) 所有按鍵需要通過(guò)串口自發(fā)自收來(lái)調(diào)校各種功能。

        2.發(fā)揮部分

        1)增加秒表功能

        2)增加鬧鈴功能

        3)增加整點(diǎn)報(bào)時(shí)功能。

        實(shí)驗(yàn)功能:

        本系統(tǒng)是基于單片機(jī)AT89S52制作的數(shù)字電子鐘。根據(jù)實(shí)驗(yàn)要求,在完成實(shí)驗(yàn)所要求的基本功能外,擴(kuò)展了幾個(gè)功能。

        硬件系統(tǒng)設(shè)計(jì)方面:

        采用六位LED數(shù)碼管,用切換的方式顯示日期或時(shí)間和設(shè)置的鬧鐘時(shí)間;

        可調(diào)整日期或時(shí)間以及鬧鐘時(shí)間;

        具有設(shè)置鬧鐘的功能;

        軟件系統(tǒng)設(shè)計(jì)方面:

        程序采用匯編語(yǔ)言編寫(xiě),使自己更加理解硬件語(yǔ)言以及其工作原理。

        “時(shí)鐘”基準(zhǔn)時(shí)間由單片機(jī)內(nèi)部的定時(shí)中斷提供用一個(gè)計(jì)數(shù)器對(duì)定時(shí)中斷的次數(shù)進(jìn)行計(jì)數(shù),可實(shí)現(xiàn)“秒”定時(shí),同理可以進(jìn)行“分”﹑“時(shí)”定時(shí),以及“日”﹑“月”﹑“年”定時(shí),并充分考慮閏年等情況下的日期的差異

        采用按鍵查詢(xún)功能復(fù)用,簡(jiǎn)化了程序的設(shè)計(jì)

        采用動(dòng)態(tài)掃描法顯示6位數(shù)碼管


        方案考慮:

        1、硬件方案

        1)、采用6LED數(shù)碼管顯示日期或者時(shí)間。

        2)、顯示器的驅(qū)動(dòng)可采用“靜態(tài)顯示驅(qū)動(dòng)”(如7段譯碼/鎖存/驅(qū)動(dòng)芯片CD4511);也可采用“動(dòng)態(tài)掃描驅(qū)動(dòng)”,但后者比前者所需驅(qū)動(dòng)電流要大。

        3)顯示部分也可采用液晶,但液晶成本較高。

        4)、鍵盤(pán)的按鍵數(shù)目較多時(shí)則采用行列式矩陣結(jié)構(gòu)為好。“一鍵多用”的構(gòu)思和設(shè)計(jì)能大為減少按鍵的數(shù)目。  

        5)、整體設(shè)計(jì)上應(yīng)考慮其結(jié)構(gòu)簡(jiǎn)單﹑操作簡(jiǎn)便﹑布局美觀﹑成本低廉。

        2、軟件方案

        (1)、“時(shí)鐘”基準(zhǔn)時(shí)間由單片機(jī)內(nèi)部的定時(shí)中斷提供,定時(shí)時(shí)間應(yīng)是“秒”的整除數(shù),且長(zhǎng)短適宜。最長(zhǎng)不能超過(guò)16位定時(shí)器的最長(zhǎng)定時(shí)時(shí)間;最短不



        能少于中斷服務(wù)程序的執(zhí)行時(shí)間。通常來(lái)說(shuō)基準(zhǔn)時(shí)間越短,越有利于提高時(shí)鐘的運(yùn)行精確度。

        (2)、用一個(gè)計(jì)數(shù)器對(duì)定時(shí)中斷的次數(shù)進(jìn)行計(jì)數(shù),可實(shí)現(xiàn)“秒”定時(shí),同理可以進(jìn)行“分”﹑“時(shí)”定時(shí),以及“日”﹑“月”﹑“年”定時(shí)。

        (3)、LED 數(shù)碼管顯示器采用“動(dòng)態(tài)掃描驅(qū)動(dòng)”時(shí)要注意的是:驅(qū)動(dòng)信號(hào)的維持時(shí)間必須大于“起輝時(shí)間”(電流大起輝時(shí)間短),而驅(qū)動(dòng)信號(hào)的間歇時(shí)間必須小于“余輝時(shí)間”(電流大余輝時(shí)間長(zhǎng)),但驅(qū)動(dòng)電流大小受硬件電路能力和LED數(shù)碼管極限功耗的制約。

        (4)、動(dòng)態(tài)掃描顯示方式在更新顯示內(nèi)容時(shí),因LED數(shù)碼管余輝的存在可能會(huì)造成顯示字符的模糊,新內(nèi)容寫(xiě)入顯示器之前須將所有的LED數(shù)碼管熄滅。

        (5)、關(guān)于自動(dòng)識(shí)別“月大﹑月小”和“平年﹑潤(rùn)年”問(wèn)題的考慮


        方案比較:

        顯示部分:

        我們采用了數(shù)碼管顯示,鑒于數(shù)碼管也能實(shí)現(xiàn)基本的功能,而且液晶成本又太昂貴,同時(shí)我們放棄了用譯碼芯片,一方面進(jìn)一步降低成本,另一方面少了部分電路,減少錯(cuò)誤產(chǎn)生。


        焊接部分:



        印制電路板的特點(diǎn)是布線(xiàn)緊湊、優(yōu)點(diǎn)是美觀,跳線(xiàn)少,線(xiàn)路穩(wěn)定,主要的工作量在于前期原理圖的繪制跟PCB板的布線(xiàn),缺點(diǎn)是腐蝕容易不均勻而斷線(xiàn);而手工焊萬(wàn)用板優(yōu)點(diǎn)是可變性高,自由度高,主要工作量是原理圖的布線(xiàn)與跳線(xiàn)的構(gòu)思跟焊接,缺點(diǎn)是電路板焊接麻煩。

        我們選擇手工焊萬(wàn)用板的原因:

        1 原材料提供的只是萬(wàn)用板,從按照題目要求的方面考慮

        2 萬(wàn)用板便于功能的擴(kuò)展,板上也留了很多空位為創(chuàng)新功能使用。

        按鍵部分


        按鍵方面,主要是采用矩陣鍵盤(pán)掃描跟按鍵查詢(xún)。矩陣鍵盤(pán)掃描法用到比較多的按鍵,使操作復(fù)雜,資源得不到充分利用。為了避免不必要的失誤,所以采用“按鍵查詢(xún),一個(gè)功能一個(gè)按鍵”的方式,排列整齊,簡(jiǎn)潔美觀


        單片機(jī)作品實(shí)物圖:


        二、元器件清單:

        IC



        89S52
        1

        IC座


        40腳
        3

        晶體振蕩器

        12MHz
        1

        微型按鈕

        4腳

        5

        LED發(fā)光二極管
        紅色
        1

        電阻


        4.7K
        2

        電阻


        1k

        6

        電阻


        3K


        6

        電阻


        330  
        7

        排阻            1k      1

        電解電容

        10UF
        1

        萬(wàn)能電路板



        1

        LED七段數(shù)碼管
        共陽(yáng)BS
        6

        晶體三極管

        PNP8550
        6

        蜂鳴器                  1


        三.按鍵使用


        1)。P0.7口按鍵具有切換顯示模式的功能

        2)。P0.6口按鍵具有閃爍位移位的功能

        3)。P0.5 口按鍵具有對(duì)閃爍位加一的功能

        4)。P0.4口按鍵具有計(jì)秒的功能,即開(kāi)始秒表/停止秒表/清楚秒表,同時(shí)還具有停止鬧鐘的功能。

        5)第9口具有復(fù)位的功能。即一按下去后恢復(fù)到初始化狀態(tài)

        6)串口自收自發(fā)功能,當(dāng)p3.0p3.1連接起來(lái)后,按鍵有效,但當(dāng)p3.0p3.1斷開(kāi)后,按鍵無(wú)效。


        系統(tǒng)使用調(diào)試說(shuō)明:

        按開(kāi)關(guān)key1次數(shù)系統(tǒng)狀態(tài)
        0(50)00H(51H)00H,正常顯示時(shí)間
        1(50)01H(51H)00H,正常顯示日期
        2(50)02H(51H)00H正常顯示鬧鈴
        3(50)03H(51H)00H,正常顯示秒表
        4(50)00H(51H)00H,正常顯示時(shí)間


        按鍵2

        按開(kāi)關(guān)key2次數(shù)系統(tǒng)狀態(tài)
        0(50)00H(51H)00H,不閃爍
        1(50)00H(51H)01H,低兩位閃爍
        2(50)00H(51H)02H中兩位閃爍
        3(50)00H(51H)03H,高兩位閃爍
        4(50)00H(51H)00H,不閃爍



        數(shù)碼管顯示代碼表:

        數(shù)碼管管腳號(hào)Dpgfedcba數(shù)碼管顯示值編碼數(shù)值
        P1端口P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0
        端口電平110000000C0H
        1111100110F9H
        1010010020A4H
        1011000030B0H
        10010100199H
        10010010592H
        10000010682H
        1111100070F8H
        10000000880H
        10010000990H




        主程序流程圖:


        當(dāng)有不同按鍵,進(jìn)入不同的服務(wù)子程序,同時(shí)在查詢(xún)的時(shí)候判斷是不是整點(diǎn),有沒(méi)有到達(dá)鬧鈴設(shè)置的時(shí)間

        進(jìn)入服務(wù)子程序采用的是查詢(xún)的模式。

        顯示模式調(diào)整流程圖:


        顯示標(biāo)志位位50h


        閃爍位移位:其中設(shè)定閃爍標(biāo)志位為51H.當(dāng)它變化時(shí)標(biāo)志著不同的閃爍位


        閃爍位加一子程序:對(duì)當(dāng)前閃爍的位進(jìn)行加一


        file:///D:/Personal/Temp/ksohtml/wps_clip_image-8871.png其中

        同理對(duì)于分,時(shí),日,月,年,都要判斷是否到達(dá)最大數(shù),是則分,時(shí),清0,日,月,年置一,


        秒表子程序


        鬧鈴功能子程序:

        整點(diǎn)報(bào)時(shí)子程序流程圖:


        TO中斷子程序:

        日歷子程序


        1. 附程序清單:
        2. ;;;;;;;;;;;;;;;;;;;
        3. ;預(yù)定義部分;;;;;;;;
        4. ;;;;;;;;;;;;;;;;;;;

        5. ;預(yù)定義用來(lái)顯示小時(shí)、分鐘、秒鐘的存儲(chǔ)單元
        6. secL equ 30h;秒的十位
        7. secH equ 31h;秒的個(gè)位
        8. minL equ 32h;
        9. minH equ 33h;
        10. hourL equ  34h;
        11. hourH equ 35h;
        12. dayL equ 36h
        13. dayH equ 37h
        14. monL equ 38h
        15. monH equ 39h
        16. yearL equ 3ah
        17. yearH equ 3bh
        18. als_l equ 40h;
        19. als_h equ 41h;
        20. alm_l equ 42h;
        21. alm_h equ 43h;
        22. alh_l equ 44h;
        23. alh_h equ 45h;
        24. xsbz  equ 50h;
        25. shanshou  equ 51h;
        26. mao_sfw equ 5ah;秒的十分位
        27. mao_bfw equ 5bh;秒的百分位
        28. mao_sw  equ 5ch;秒的十位
        29. mao_gw  equ 5dh; 秒的各位
        30. mao_qw  equ 5eh;qianwei
        31. mao_bw  equ 5fh;baiwei

        32. org 0000h;復(fù)位入口
        33. ljmp main
        34. org 000bh;定時(shí)器T0入口
        35. ljmp time0
        36. org 0003h;外部中斷0入口
        37. reti;
        38. org  0013h;外部中斷1入口
        39. reti
        40. org 001bh;定時(shí)器T1入口
        41. ljmp time1;
        42. org 0023h;串行中斷入口
        43. reti


        44. ;;;;;;;;;;;;;;;;;;;;;;
        45. ;主程序入口;;;;;;;;;;;
        46. ;;;;;;;;;;;;;;;;;;;;;;
        47. main:
        48. ;放置初始值,H表示低地址,L表示高地址
        49. mov secH,#0h
        50. mov secL,#5h
        51. mov minH,#9h
        52. mov minL,#5h
        53. mov hourH,#2h
        54. mov hourL,#1h
        55. mov yearH,#8h
        56. mov yearL,#0h
        57. mov monH,#1h
        58. mov monL,#1h
        59. mov dayH,#0h
        60. mov dayL,#2h
        61. mov als_l,#3h;
        62. mov als_h,#1h;
        63. mov alm_l,#3h;
        64. mov alm_h,#0h;
        65. mov alh_l,#1h;
        66. mov alh_h,#2h;
        67. mov mao_sfw ,#00h;秒的十分位
        68. mov mao_bfw ,#00h;秒的百分位
        69. mov mao_sw,#00h  ;秒的十位
        70. mov mao_gw,#00h  ; 秒的各位
        71. mov mao_qw,#00h;  
        72. mov mao_bw,#00h;
        73. mov 50h,#00h;
        74. mov 51h,#00h;
        75. clr p3.2;
        76. MOV SCON,#90H;串行口工作于方式2
        77. ;定時(shí)器T0,T1設(shè)置
        78. mov TMOD,#11H;設(shè)置T0與T1為16位定時(shí)器
        79. mov TL0,#0b0h;
        80. mov TH0,#3ch;T0初值為3cb0h定時(shí)50ms
        81. mov TL1,#0f0h;
        82. mov TH1,#0d8h;T1初值為fc18h定時(shí)10ms
        83. setb pt0;
        84. setb EA;總中斷允許
        85. setb et0;
        86. setb TR0;開(kāi)啟T0中斷開(kāi)始記時(shí)
        87. mov r4,#20;定時(shí)次數(shù),剛好1s
        88. mov 60h,#0ah;定時(shí)器1定時(shí)次數(shù)10次
        89. start:
        90.      lcall display;
        91.        jnb P0.7,k0;
        92.        jnb p0.6,k1;
        93.        jnb p0.5,k3;
        94.        jnb p0.4,k4;
        95.        lcall naoling1;
        96.        lcall zhengdi
        97.        jmp start;

        98. k0:    lcall chxianshi;
        99. k1:    lcall k2
        100. k4:    ljmp jimiao;
        101. ;;;;;;;;;;;;;;;;;;;;;;;;;
        102. ;;;;閃爍位加一
        103. ;;;;;;;;;;;;;;;;;;;;;;;;;
        104. k3:      lcall dl30ms;
        105.          jb p0.5,outout;
        106. set12:   jnb p0.5,set12;
        107.          lcall chuan;
        108.          mov a,50h;
        109.          cjne a,#01h,sjiantz;
        110.          mov a,51h;
        111.          cjne a,#01h,zhwei;
        112.          mov r1,#dayH;
        113.          lcall add1;
        114.          mov a,r3;
        115.          cjne a,#32h,ftiao;分若小于則轉(zhuǎn)退出
        116.          mov dayH,#01h;否則清0
        117.          mov dayL,#00h;
        118. ftiao:   ljmp outout;  
        119. zhwei:  cjne a,#02h,gwei;
        120.         mov r1,#monH;
        121.         lcall add1;
        122.         mov a,r3;
        123.         cjne a,#13h,outout;
        124.         mov monH,#01h;
        125.         mov monL,#00h;
        126.         ljmp outout;
        127. gwei:   cjne a,#03h,outout;
        128.         mov r1,#yearH;
        129.         lcall add1;
        130.         mov a,r3;
        131.         cjne a,#99h,outout;
        132.         mov yearH,#00h;
        133.         mov yearL,#00h;
        134.         ljmp outout;
        135. outout: ljmp start; 跳出
        136. sjiantz:cjne a,#00h,naozhtz;轉(zhuǎn)鬧鐘調(diào)整
        137.         mov a,51h;
        138.         cjne a,#01h,zhwei2;
        139.         mov r1,#secH;
        140.         lcall add1;
        141.         mov a,r3;
        142.         cjne a,#60h,ftiao2;分若小于則轉(zhuǎn)退出
        143.         mov secH,#00h;否則清0
        144.         mov secL,#00h;
        145. ftiao2: ljmp outout;        
        146. zhwei2: cjne a,#02h,gwei2;
        147.         mov r1,#minH;
        148.         lcall add1;
        149.         mov a,r3;
        150.         cjne a,#60h,outout;
        151.         mov minH,#00h;
        152.         mov minL,#00h;
        153.         ljmp outout;
        154. gwei2:  cjne a,#03h,outout;
        155.         mov r1,#hourH;
        156.         lcall add1;
        157.         mov a,r3;
        158.         cjne a,#24h,outout;
        159.         mov hourH,#00h;
        160.         mov hourL,#00h;
        161.         ljmp outout;

        162. naozhtz:mov a,51h;
        163.         cjne a,#01h,zhwei3;
        164.         mov r1,#als_h;
        165.         lcall add1;
        166.         mov a,r3;
        167.         cjne a,#60h,ftiao3;分若小于則轉(zhuǎn)退出
        168.         mov als_h,#00h;否則清0
        169.         mov als_l,#00h;
        170. ftiao3: ljmp outout;        
        171. zhwei3: cjne a,#02h,gwei3;
        172.         mov r1,#alm_h;
        173.         lcall add1;
        174.         mov a,r3;
        175.         cjne a,#60h,outout;
        176.         mov alm_h,#00h;
        177.         mov alm_l,#00h;
        178.         ljmp outout;
        179. gwei3:  cjne a,#03h,outout;
        180.         mov r1,#alh_h;
        181.         lcall add1;
        182.         mov a,r3;
        183.         cjne a,#24h,outout;
        184.         mov alh_h,#00h;
        185.         mov alh_l,#00h;
        186.         ljmp outout;
        187. ;;;;;;;;;;;;;;;;;;;;;;;;
        188. ;;;;naoling
        189. ;;;;;;;;;;;;;;;;;;;;;;;;;
        190. naoling1:push acc;
        191.          setb p0.1
        192.          mov a,31h;
        193.          cjne a,41h,out6;
        194.          mov a,30h;
        195.          cjne a,40h,out6;
        196.          mov a,33h;
        197.          cjne a,43h,out6;
        198.          mov a,32h;
        199.          cjne a,42h,out6;
        200.          mov a,35h;
        201.          cjne a,45h,out6;
        202.          mov a,34h;
        203.          cjne a,44h,out6;
        204. nao:    clr P0.1
        205.          lcall display
        206.          jnb P0.4,stopnao
        207.          sjmp nao
        208. stopnao: lcall dl30ms
        209.          mov P0,#0ffH
        210. out6:   pop acc;
        211.         lcall display;
        212.          ret;  



        213. ;;;;;;;;;;;;;;;;;;;;;;;;
        214. ;;;;;整點(diǎn)報(bào)時(shí);;;;;;;;;;;;
        215. ;;;;;;;;;;;;;;;;;;;;;;;;;
        216. zhengdi: push acc;
        217.          mov a,31h;
        218.          cjne a,#00h,out7;
        219.          mov a,30h;
        220.          cjne a,#00h,out7;
        221.          mov a,33h;
        222.          cjne a,#00h,out7;
        223.          mov a,32h;
        224.          cjne a,#00h,out7;
        225.          mov a,#0ah;
        226.          clr p0.1;
        227.          clr p0.3
        228.          lcall display;
        229.          lcall display;
        230.          lcall display;
        231.          lcall display;
        232.          lcall display;
        233.          lcall display;
        234.          lcall display;
        235.          lcall display;
        236.          lcall display;
        237.          lcall display;
        238.          lcall display;
        239.          lcall display;
        240.          lcall display;
        241.          lcall display;
        242.          lcall display;
        243.          lcall display;
        244.          lcall display;
        245.          lcall display;
        246.          lcall display;
        247.          lcall display;
        248.          lcall display;
        249.          lcall display;
        250.          lcall display;
        251.          lcall display;
        252.          lcall display;
        253.          lcall display;
        254.          lcall display;
        255.          lcall display;
        256.          setb p0.1;
        257.          setb p0.3
        258. out7:    pop acc;
        259.          lcall display;
        260.          ret;



        261. ;**************************************************
        262. ;函數(shù)名:
        263. ;功能:   串口發(fā)送數(shù)據(jù)函數(shù)
        264. ;傳入?yún)?shù): 無(wú)
        265. ;傳出參數(shù): A
        266. ;**************************************************
        267. chuan: MOV  A,p0  ;讀取P1口數(shù)據(jù)
        268. MOV  SBUF,A
        269. JNB  TI,$  ;等待發(fā)送完畢
        270. CLR   TI
        271.         lcall  dl30ms;
        272. wait:   jnb  ri,out9;
        273. MOV  A,SBUF
        274. CLR  RI
        275.         sjmp  out10;
        276. out9:   lcall  display;
        277.         jmp  chuan;   
        278. out10:  ret;

        279.    
        280. ;**************************************************
        281. ;函數(shù)名:chxianshi
        282. ;功能:   顯示調(diào)整函數(shù)
        283. ;傳入?yún)?shù): 無(wú)
        284. ;傳出參數(shù):
        285. ;**************************************************
        286. chxianshi: lcall dl30ms;
        287.            jb P0.7,set2;
        288. set1:      jnb p0.7,set1;
        289.            lcall chuan;
        290.            mov a,50h;
        291.            cjne a,#00h,nianfen
        292.            mov a,#01h;
        293.            mov 50h,a;;
        294.    sjmp set2;
        295. nianfen:   cjne a,#01h,naoling;
        296.            mov a,#02h;
        297.            mov 50h,a;
        298.            sjmp set2;
        299. naoling:   cjne a,#02h,maobiao;
        300.            mov a,#03h;
        301.    mov 50h,a;
        302.            sjmp set2;
        303. maobiao:   mov a,#00h;
        304.            mov 50h,a;
        305. set2:      lcall display;
        306. out:       ret;
        307.    
        308.    
        309. ;**************************************************
        310. ;函數(shù)名:k2
        311. ;功能:   調(diào)整位移位函數(shù)
        312. ;傳入?yún)?shù): 無(wú)
        313. ;傳出參數(shù):
        314. ;**************************************************

        315. k2:        lcall dl30ms;
        316.            jb P0.6,set11;判斷是否有鍵按下  
        317. set10:     jnb p0.6,set10;
        318.            lcall chuan;
        319.            mov a,51h;
        320.            cjne a,#00h,zliang
        321.            mov a,#01h;
        322.            mov 51h,a;;
        323.    sjmp set11;
        324. zliang:    cjne a,#01h,gliang;
        325.            mov a,#02h;
        326.            mov 51h,a;
        327.            sjmp set11;
        328. gliang:    cjne a,#02h,bliang;
        329.            mov a,#03h;
        330.            mov 51h,a;
        331.            sjmp set11;
        332. bliang:    cjne a,#03h,set11
        333.            mov a,#00h;
        334.            mov 51h,a;
        335. set11:     lcall display;
        336.            ret;



        337. ;**************************************************
        338. ;函數(shù)名:       jimiao
        339. ;功能:         計(jì)秒程序
        340. ;傳入?yún)?shù): 無(wú)
        341. ;傳出參數(shù): 無(wú)
        342. ;**************************************************

        343. jimiao: push PSW;
        344.         push acc;
        345.        lcall dl30ms;
        346.        jb p0.4,out5;
        347. jimao1:jnb p0.4,jimao1;第一次開(kāi)中斷計(jì)秒
        348.        mov a,50h;
        349.        cjne a,#03h,out5;
        350.        setb et1;
        351.        setb tr1;

        352. jimao2:call display;第二次停止
        353.        jb p0.4,jimao2;
        354.        lcall display;
        355.        jb p0.4,out5;
        356. jimao3:jnb p0.4,jimao3;
        357.        clr tr1;
        358.        clr et1;
        359. jimao4:call display;第三次清0

        360.        jb p0.4,jimao4;
        361.        lcall display;
        362.        jb p0.4,out5;
        363. jimao5:jnb p0.4,jimao5;
        364.        mov mao_sfw ,#00h;秒的十分位
        365.        mov mao_bfw ,#00h;秒的百分位
        366.        mov mao_sw,#00h  ;秒的十位
        367.        mov mao_gw,#00h  ; 秒的各位
        368.        mov mao_qw,#00h;  
        369.        mov mao_bw,#00h;
        370. out5:  pop acc;
        371.        pop PSW;
        372.        ljmp start;




        373. ;;***********************************************
        374. ;函數(shù)名         time1
        375. ;功能:   t1中斷函數(shù)
        376. ;傳入?yún)?shù): 無(wú)
        377. ;************************************************

        378. time1:
        379. push  PSW
        380. push acc
        381. mov TL1,#0f0h;
        382. mov TH1,#0d8h;T1初值為fc18h定時(shí)1ms
        383. mov r1,#mao_bfw;指向秒計(jì)時(shí)單元
        384. lcall add1;調(diào)用加1程序
        385. mov a,r2;將經(jīng)過(guò)處理的數(shù)據(jù)放入a中
        386. cjne a,#99h,outT01;當(dāng)秒到未到達(dá)60時(shí)跳出中斷
        387. mov 5ah,#00h
        388. mov 5bh,#00h;將秒清零
        389. mov r1,#mao_gw;指向分計(jì)時(shí)單元
        390. lcall add1;調(diào)用加1程序
        391. mov a,r2;將經(jīng)過(guò)處理的數(shù)據(jù)放入a中
        392. cjne a,#60h,outT01;當(dāng)分鐘未到達(dá)60時(shí)跳出中斷
        393. mov 5ch,#00h;
        394. mov 5dh,#00h;
        395. mov r1,#mao_bw;指向小時(shí)計(jì)時(shí)單元
        396. lcall add1;調(diào)用加1程序
        397. mov a,r2;將經(jīng)過(guò)處理的數(shù)據(jù)放入a中
        398. cjne a,#60h,outT0;當(dāng)小時(shí)未到達(dá)60時(shí)跳出中斷
        399. mov 5eh,#00h;
        400. mov 5fh,#00h;

        401. outt01:
        402. pop acc
        403. pop psw;恢復(fù)現(xiàn)場(chǎng)
        404. reti ;中斷返回


        405. ;**************************************************
        406. ;函數(shù)名:       time0
        407. ;功能:   t0中斷處理程序函數(shù)
        408. ;傳入?yún)?shù): 無(wú)
        409. ;**************************************************

        410. time0:
        411. push  PSW
        412. push acc
        413. push b   ;保護(hù)現(xiàn)場(chǎng)
        414. push 02h
        415. push 01h
        416. clr ET0;關(guān)T0中斷允許
        417. clr TR0;關(guān)T0定時(shí)中斷
        418. mov th0,#3ch;
        419. mov a,#0b0h
        420. add a,TL0
        421. mov TL0,a;給定時(shí)器重新裝值
        422. setb TR0;允許計(jì)時(shí)
        423. djnz r4,outT0;定時(shí)沒(méi)到1s就退出中斷
        424. mov r4,#20;給r0重新賦值
        425. mov r1,#secH;指向秒計(jì)時(shí)單元
        426. lcall add1;調(diào)用加1程序
        427. mov a,r2;將經(jīng)過(guò)處理的數(shù)據(jù)放入a中
        428. cjne a,#60h,outT0;當(dāng)秒到未到達(dá)60時(shí)跳出中斷

        429. addmin: ;否則分鐘加1
        430. mov secL,#0
        431. mov secH,#0;將秒清零
        432. mov r1,#minH;指向分計(jì)時(shí)單元
        433. lcall add1;調(diào)用加1程序
        434. mov a,r2;將經(jīng)過(guò)處理的數(shù)據(jù)放入a中
        435. cjne a,#60h,outT0;當(dāng)分鐘未到達(dá)60時(shí)跳出中斷

        436. addhour:  ;否則小時(shí)加1
        437. mov minL,#0
        438. mov minH,#0;將分清零
        439. mov r1,#hourH;指向小時(shí)計(jì)時(shí)單元
        440. lcall add1;調(diào)用加1程序
        441. mov a,r2;將經(jīng)過(guò)處理的數(shù)據(jù)放入a中
        442. cjne a,#24h,outT0;當(dāng)小時(shí)未到達(dá)60時(shí)跳出中斷

        443. lcall rili     ;調(diào)用日歷子程序

        444. outT0:
        445. pop 01h
        446. pop 02h
        447. pop b
        448. pop acc
        449. pop psw;恢復(fù)現(xiàn)場(chǎng)
        450. setb ET0;開(kāi)放中斷
        451. reti ;中斷返回

        452. ;**************************************************
        453. ;函數(shù)名:       rili
        454. ;功能:         日歷處理程序函數(shù)
        455. ;傳入?yún)?shù): 無(wú)
        456. ;傳出參數(shù):
        457. ;**************************************************

        458. rili:
        459. addday: mov hourL,#0
        460. mov hourH,#0;將小時(shí)清零
        461. mov r1,#dayH;指向天計(jì)時(shí)單元
        462. lcall add1;調(diào)用加1程序
        463. mov a,r2;將經(jīng)過(guò)處理的數(shù)據(jù)放入a中

        464. day31:      
        465. cjne a,#32h,day30;看是不是31號(hào)
        466. ajmp addmon;是的話(huà),加月

        467. day30:
        468. mov r5,a
        469. cjne a,#31h,day29;看是不是30號(hào);是的話(huà),處理
        470. mov a,#0h
        471. mov a,monL
        472. swap a
        473. orl a,monh;將月份放入a中
        474. cjne a,#04h,outri;判斷是不是4,6,9,11中的某一月
        475. cjne a,#06h,outri
        476. cjne a,#09h,outri
        477. cjne a,#11h,outri;不是的話(huà)跳出
        478. ajmp addmon;是的話(huà),加月

        479. day29:
        480. mov a,r5
        481. cjne a,#30h,day28;看是不是29號(hào)
        482. mov a,#0h
        483. mov a,monL
        484. swap a
        485. orl a,monH
        486. cjne a,#02h,outri;是的話(huà),看月份是不是2月
        487. ajmp addmon

        488. day28:
        489. mov a,r5
        490. cjne a,#29h,outri;看是不是28號(hào),不是的話(huà)跳出
        491. mov a,#0h
        492. mov a,monL
        493. swap a
        494. orl a,monH
        495. cjne a,#02h,outri;看月份是不是2月;是2月,則判斷是不是潤(rùn)年
        496. mov a,#0h
        497. mov a,yearL
        498. swap a
        499. orl a,yearH
        500. da a
        501. mov b,#04h
        502. div ab
        503. mov r5,b
        504. cjne r5,#0h,outri
        505. ajmp addmon

        506. addmon: ;月加1
        507. mov dayL,#0
        508. mov dayH,#0;將天清零
        509. mov r1,#monH;指向月計(jì)時(shí)單元
        510. lcall add1;調(diào)用加1程序
        511. mov a,r2;將經(jīng)過(guò)處理的數(shù)據(jù)放入a中
        512. cjne a,#12h,outri;當(dāng)月未到達(dá)12時(shí)

        513. addyear: ;年加1
        514. mov monL,#0
        515. mov monH,#0;將月清零
        516. mov r1,#yearH;指向年計(jì)時(shí)單元
        517. lcall add1;調(diào)用加1程序
        518. mov a,r2;將經(jīng)過(guò)處理的數(shù)據(jù)放入a中
        519. outri:
        520. ret


        521. ;**************************************************
        522. ;函數(shù)名:       add1
        523. ;功能:   加一函數(shù)
        524. ;傳入?yún)?shù): r1存的是地址指針
        525.                 ;r2存的是返回的處理數(shù)據(jù)
        526. ;**************************************************

        527. add1:
        528. mov a,#0;對(duì)a進(jìn)行清零

        529. dec r1;指向高四位數(shù)據(jù)地址
        530. mov a,@r1;將高四位移入a
        531. inc r1;指向低四位
        532. swap a;a中高四位與低四位互換
        533. orl a,@r1;將低四位顯示數(shù)據(jù)放入a中
        534. add a,#01h;
        535. da a;對(duì)a中數(shù)據(jù)進(jìn)行加1,并作十進(jìn)制調(diào)整
        536. mov r2,a;將處理后的數(shù)據(jù)移入r2中,注意r2中存的是十進(jìn)制對(duì)應(yīng)的bcd碼
        537. mov r3,a;下面是將a中然數(shù)據(jù)恢復(fù)為高位與低位
        538. anl a,#0f0h;取高四位
        539. swap a
        540. dec r1;
        541. mov @r1,a;將高四位移入低位地址中
        542. mov a,r3;將暫存數(shù)據(jù)移回
        543. anl a,#0fh;取其低四位
        544. inc r1;指針指向高四位地址
        545. mov @r1,a;將低四位移到高位地址中
        546. ret ;子程序返回




        547. ;**************************************************
        548. ;函數(shù)名:       display
        549. ;功能:         顯示處理程序函數(shù)
        550. ;傳入?yún)?shù): 無(wú)
        551. ;傳出參數(shù):
        552. ;**************************************************
        553. display:mov a,50h;
        554. cjne a,#00H,dat;00h是時(shí)間顯示不等則轉(zhuǎn)到年份顯示
        555. timdis: mov r0,#secL;
        556.         sjmp aa
        557. dat: cjne a,#01h,ala;若為01h則顯示年份,否則顯示鬧鐘
        558.         mov r0,#dayL;
        559. sjmp aa;
        560. ala:    cjne a,#02h,mbiao
        561.         mov r0,#als_l;
        562.         sjmp aa;
        563. mbiao:  mov r0,#mao_sfw;
        564.         nop;
        565. aa:     mov p2,#0ffh;
        566. mov a,@r0
        567. mov dptr,#TAB
        568. movc a,@a+dptr;
        569. mov p1,a;
        570.         mov a,51h;
        571.         cjne a,#01h,aa01;
        572.         mov a,r4;
        573.         rrc a;
        574. jnc aa02;
        575. aa01:   mov p2,#0feh;
        576. aa02: lcall dl5ms;
        577.         lcall dl5ms;


        578.         mov p2,#0FFh;
        579. inc r0;
        580.         mov a,@r0
        581. mov dptr,#TAB
        582. movc a,@a+dptr;
        583. mov p1,a;
        584.         mov a,51h;
        585.         cjne a,#01h,bb01;
        586. mov a,r4;
        587. rrc a;
        588. jnc bb02;
        589. bb01:   mov p2,#0fdh;
        590. bb02:   lcall dl5ms;
        591.         lcall dl5ms;


        592. mov p2,#0ffh;
        593.         inc r0;
        594.         mov a,@r0
        595. mov dptr,#TAB
        596. movc a,@a+dptr;
        597. mov p1,a;
        598. mov a,51h;
        599. cjne a,#02h,cc01;
        600. mov a,r4
        601. rrc a;
        602. jnc cc02
        603. cc01:   mov p2,#0fbh;
        604. cc02:   lcall dl5ms;
        605.         lcall dl5ms;



        606. mov p2,#0ffh;
        607.         inc r0;
        608.         mov a,@r0
        609. mov dptr,#TAB
        610. movc a,@a+dptr;
        611. mov p1,a;
        612. mov a,51h;
        613. cjne a,#02h,dd01;
        614. mov a,r4
        615. rrc a;
        616. jnc dd02
        617. dd01:   mov p2,#0f7h;
        618. dd02:   lcall dl5ms;
        619.         lcall dl5ms;



        620. mov p2,#0ffh;
        621.         inc r0;
        622.         mov a,@r0
        623. mov dptr,#TAB
        624. movc a,@a+dptr;
        625. mov p1,a;
        626. mov a,51h;
        627. cjne a,#03h,ee01;
        628. mov a,r4
        629. rrc a;
        630. jnc ee02
        631. ee01:   mov p2,#0efh;
        632. ee02:   lcall dl5ms;
        633.         lcall dl5ms;




        634. mov p2,#0ffh;
        635.         inc r0;
        636.         mov a,@r0
        637. mov dptr,#TAB
        638. movc a,@a+dptr;
        639. mov p1,a;
        640. mov a,51h;
        641. cjne a,#03h,ff01;
        642. mov a,r4
        643. rrc a;
        644. jnc ff02
        645. ff01:   mov p2,#0dfh;
        646. ff02:   lcall dl5ms;
        647.         lcall dl5ms;
        648.         ret;   
        649.       


        650. ;;;;;;;;;;;;
        651. ;延時(shí)程序;;;
        652. ;1ms延時(shí);;;;
        653. ;;;;;;;;;;;;
        654. delay1ms:
        655. mov R6,#14H
        656. dl1:mov R7,#19H
        657. dl2:djnz R7,dl2
        658. djnz R6,dl1
        659. ret

        660. dl5ms:  mov  55h,#03h;
        661. d2:     mov  56h,#0fh;
        662. d1:     djnz 56h,d1;
        663.         djnz 55h,d2;
        664.         ret;

        665. dl30ms: lcall dl5ms;
        666. lcall dl5ms;
        667. lcall dl5ms;
        668. lcall dl5ms;
        669. lcall dl5ms;
        670. lcall dl5ms;
        671.         ret;
        672. dl20ms: lcall dl5ms;
        673.         lcall dl5ms;
        674.         lcall dl5ms;
        675.         lcall dl5ms;
        676.         ret;

        677.       
        678. TAB:DB 0C0H,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h;
        679. end<!--EndFragment-->
        復(fù)制代碼

        鬧鐘:

        實(shí)現(xiàn)鬧鐘功能主要有兩個(gè)步驟,首先是能在按鍵中把鬧鐘數(shù)值寫(xiě)進(jìn)寄存器,實(shí)現(xiàn)存儲(chǔ)功能。其次是根據(jù)在查詢(xún)按鍵服務(wù)程序中作判別,檢查當(dāng)前時(shí)間是否與鬧鈴時(shí)間相等,如果相等,則使在相應(yīng)時(shí)間時(shí)對(duì)蜂鳴器提供驅(qū)動(dòng)電流即可。就實(shí)現(xiàn)了鬧鐘設(shè)置的功能。

        整點(diǎn)報(bào)時(shí):


        整點(diǎn)報(bào)時(shí)是在查詢(xún)按鍵程序中調(diào)用到zhengdi子程序,檢查當(dāng)前的時(shí)間是否整點(diǎn),如果是,則點(diǎn)亮整點(diǎn)指示燈,并響蜂鳴器,停留約2秒鐘,自行熄滅與關(guān)閉。

        按鍵消抖:

        按鍵消抖可以采用硬件消抖跟軟件消抖。我們初定了兩種方案:

        1是利用數(shù)字電路的反相器或斯密特觸發(fā)器進(jìn)行整形,如圖:


        2是采用軟件消抖技術(shù)

        應(yīng)該說(shuō)用硬件消抖可以達(dá)到更好的效果,不過(guò)由于提供的材料跟自身手上的材料沒(méi)有以上元件,故采用軟件消抖。軟件的消抖主要是調(diào)整出一個(gè)切到好處的延遲檢測(cè)時(shí)間,一般為5-30ms。經(jīng)過(guò)我們的多次調(diào)試,我們最終得到不錯(cuò)的去抖動(dòng)效果。在程序中為DMS子程序?qū)崿F(xiàn)。軟件延時(shí)是用的最多的消抖方法,但是耗時(shí)間。在CPU耗不起時(shí)間的情況下,硬件消抖會(huì)更好

        在本程序中設(shè)置了30ms的按鍵消抖。


        感想體會(huì):

           本實(shí)驗(yàn)花了我們四天的時(shí)間,由于該大作業(yè)是用匯編語(yǔ)言寫(xiě)的,很多語(yǔ)句掌握都不是很牢固,但是經(jīng)過(guò)這么長(zhǎng)時(shí)間的實(shí)驗(yàn),我基本掌握了部分匯編語(yǔ)言的用法,特別是實(shí)驗(yàn)中經(jīng)常用到的按鍵查詢(xún),跳轉(zhuǎn)語(yǔ)句,以及匯編的方法。



        剛開(kāi)始的時(shí)候,我什麼都不懂,根本不知怎樣入門(mén),后來(lái)查找了一些系統(tǒng)資料,漸漸有了些了解,才開(kāi)始寫(xiě)自己的程序。雖然如此,中間還是遇到過(guò)不少困難,不如些按鍵查詢(xún)的時(shí)候,仿真不出來(lái),不知道哪里出錯(cuò)了,也不知道是不是程序有問(wèn)題,后來(lái)在小組成員的幫助下,終于找到問(wèn)題所在,通過(guò)不斷的琢磨,后來(lái)不僅實(shí)現(xiàn)了老師的要求的基本功能,更加了秒表,鬧鈴還有整點(diǎn)報(bào)時(shí)。本來(lái)還想加上紀(jì)念日和音樂(lè)鬧鈴,當(dāng)一方面時(shí)間有限,另一方面嘗試后失敗了就暫時(shí)擱下。


          調(diào)試的時(shí)候,剛上去的時(shí)候,板子工作很不穩(wěn)定,雖然有時(shí)候能夠顯示到正確的東西,當(dāng)大多數(shù)時(shí)間都是顯示的雜亂無(wú)章,鑒于有時(shí)候能夠正確顯示,我們是板子焊的不好,于是重新焊過(guò),第二個(gè)版子剛上電的時(shí)候,還是不能很正確的工作,后來(lái),一步一步的調(diào)試,先用簡(jiǎn)單的程序檢查板子,發(fā)現(xiàn)板子是沒(méi)有問(wèn)題的,于是就確定是程序的問(wèn)題,我把程序分為好幾塊,一塊一塊的調(diào)試,一段好了之后,在加上一段。最后發(fā)現(xiàn)是在一個(gè)子程序里邊用了一個(gè)錯(cuò)誤的ljmp。 改正了之后就完全正確了。

            經(jīng)過(guò)這次試驗(yàn),確實(shí)學(xué)到我好多好多的東西。



        回復(fù) 1# admin


            太好了
        很好的 想法,就是是匯編的,幾乎不會(huì)看了
        原理圖怎么打開(kāi)?{:13_801:}
        不錯(cuò)啊   就是太簡(jiǎn)單了  {:13_779:}
        恩,謝謝分享,只是是匯編,暫時(shí)看不懂
        頂頂頂,好東西啊,贊一個(gè)
        回復(fù) admin 的帖子

        ding頂一下!!!!
        還是想看看,盡管不夠
        很好的東西 謝謝樓主了
        不錯(cuò),很有說(shuō)服力!頂了!整個(gè)C的就更美了!
        這個(gè)很好,對(duì)于學(xué)習(xí)單片機(jī)很有幫助,頂
        不錯(cuò),下來(lái)看看參考一下
        樓主做的不錯(cuò),但有待改進(jìn)
        您好,如果只要顯示時(shí)間呢?
        {:e163:}{:e163:}{:e113:}{:e113:}O(∩_∩)O謝謝樓主,這么無(wú)私,好東西大家分享。。。
        學(xué)習(xí)學(xué)習(xí)!!!!!!!!!
        頂 頂 頂 謝謝!版主真厚道
        這個(gè)好詳細(xì)  樓主用心了
        贊啊啊啊啊啊啊啊啊啊啊
        未命名.jpg

        QQ|手機(jī)版|MCU資訊論壇 ( 京ICP備18035221號(hào)-2 )|網(wǎng)站地圖

        GMT+8, 2025-5-1 05:21 , Processed in 0.043136 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        返回頂部
        国产精品视频网| 又湿又紧又大又爽a视频| 好湿视频在线观看免费| 色老板在线影音免费观看| 日韩精品无码一区二区三区| 国产精品久久久久久久久免费| 亚洲国产精品一区| 精品无码久久久久久久动漫| 免费国产阿v视频在线观看| 精品一区二区三区在线成人 | 亚洲欧洲美洲无码精品VA| 国产精品无码av在线播放| 99视频在线精品国自产拍亚瑟| 欧美日韩国产成人高清视频,欧美日韩在线精品一| 日韩免费不卡视频| 精品久久777| 日韩经典精品无码一区| 国内精品久久久人妻中文字幕| 国产精品美女久久久免费| 好硬好湿好爽在深一点动态图| 国产一成人精品福利网站| 久草热久草热线频97精品| 狼色精品人妻在线视频| 国产精品小黄鸭一区二区三区| xx视频在线永久免费观看| 欧美国产亚洲精品高清不卡| 少妇亚洲免费精品| 国产精品vⅰdeoxxxx国产| 久久99精品久久久久久不卡| 蜜国产精品jk白丝AV网站| 国产香蕉国产精品偷在线观看| 亚洲国产精品高清久久久| 永久免费精品视频| 午夜在线a亚洲v天堂网2018| 久久精品国产69国产精品亚洲| 欧美日韩国产另类不卡| 四虎国产精品永久地址51| 激情视频激情图片激情小说| 一级香蕉精品视频在线播放| 亚洲国产精品无码成人片久久| 国产精品欧美亚洲韩国日本久久|