基于PIC16F877的LED旋轉(zhuǎn)時(shí)鐘單片機(jī)設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁
基于PIC16F877的LED旋轉(zhuǎn)時(shí)鐘單片機(jī)設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁
基于PIC16F877的LED旋轉(zhuǎn)時(shí)鐘單片機(jī)設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁
基于PIC16F877的LED旋轉(zhuǎn)時(shí)鐘單片機(jī)設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁
基于PIC16F877的LED旋轉(zhuǎn)時(shí)鐘單片機(jī)設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、2013年小學(xué)期單片機(jī)設(shè)計(jì)實(shí)驗(yàn)報(bào)告題目:基于PIC16F877單片機(jī)的LED旋轉(zhuǎn)時(shí)鐘班 級:學(xué) 號:班序號:實(shí)驗(yàn)組號:學(xué)生:指導(dǎo)教師:期中檢查教師評語指導(dǎo)教師簽字:年 月 日基于PIC16F877單片機(jī)的LED旋轉(zhuǎn)時(shí)鐘班 實(shí)驗(yàn)摘要 本次我們制作的基于PIC16F877單片機(jī)的LED旋轉(zhuǎn)時(shí)鐘是能夠輸入、顯示時(shí)間的時(shí)鐘。結(jié)構(gòu)新穎,效果奇特。加入了現(xiàn)代科技的元素,利用人眼的視覺暫留特性,解決了傳統(tǒng)時(shí)鐘結(jié)構(gòu)單一,顯示效果固定的缺陷,更好了滿足了人們對美的追求。整個(gè)系統(tǒng)中,微控制器采用了Microchip公司的PIC16F877,軟件設(shè)計(jì)中涉與PORTA用作普通數(shù)字I/O腳控制按鍵輸入,PORTB、PO

2、RTC控制燈的亮滅,PORTD向時(shí)鐘芯片DS1302寫入和讀出時(shí)間。概括來說,本實(shí)驗(yàn)就是用人眼的視覺暫留特性,用PIC16F877單片機(jī)作為主控芯片,采用電機(jī)帶動發(fā)光二極管高速旋轉(zhuǎn),利用頻閃顯示原理呈現(xiàn)時(shí)鐘畫面。AbstractIn this experiment, we made a LED rotating clock base on PIC16F877 MCU. It can input and show time. Its structure is novel and its effect is amazing. Its full of modern technology elemen

3、t. With human eyes persistence of vision, it solves traditional clocks structure and effects disadvantage, fits human pursue for beauty better.The system uses the production of the Microchip cord-PIC16F877. The design includes the drive of PORTA as general digital ports to input time, the drive of P

4、ORTB and PORTC to control the LEDs on, the drive of PORTD to write and read time on DS1302.In conclusion, withhuman eyes persistence of vision, this experiment usesPIC16F877 MCU as master chip, uses motor to drive LED rotate at high speed, uses strobe display principle to show the clock.關(guān)鍵字單片機(jī)microc

5、ontroller 芯片CMOS chipLED旋轉(zhuǎn)時(shí)鐘- LED rotating clock一.實(shí)驗(yàn)論證與比較1.LED顯示模塊LED的特點(diǎn)非常明顯,壽命長、光效高、無輻射與低功耗。LED的光譜幾乎全部集中于可見光頻段,其發(fā)光效率可達(dá)8090%。將LED與普通白熾燈、螺旋節(jié)能燈與T5三基色熒光燈進(jìn)行對比,結(jié)果顯示:普通白熾燈的光效為12lmW,壽命小于2000小時(shí),螺旋節(jié)能燈的光效為60lmW,壽命小于8000小時(shí),T5熒光燈則為96lmW,壽命大約為10000小時(shí),而直徑為5毫米的白光LED為2028lmW,壽命可大于100000小時(shí)。有人還預(yù)測,未來的LED壽命上限將無窮大。由于LED

6、的種種優(yōu)勢,使得其在現(xiàn)在的各個(gè)領(lǐng)域里運(yùn)用越來越廣泛,我們設(shè)計(jì)的旋轉(zhuǎn)LED顯示屏幕,具有結(jié)構(gòu)新穎,節(jié)約材料的特點(diǎn),一列16個(gè)LED燈旋轉(zhuǎn)顯示之后,可以代替顯示近似于16x120像素的顯示寬度和容。旋轉(zhuǎn)時(shí)鐘是利用視覺暫留效應(yīng)設(shè)計(jì)出來的,物體在快速運(yùn)動時(shí), 當(dāng)人眼所看到的影像消失后,人眼仍能繼續(xù)保留其影像0.1-0.4秒左右的圖像,這種現(xiàn)象被稱為視覺暫留現(xiàn)象。是人眼具有的一種性質(zhì)。人眼觀看物體時(shí),成像于視網(wǎng)膜上,并由視神經(jīng)輸入人腦,感覺到物體的像。但當(dāng)物體移去時(shí),視神經(jīng)對物體的印象不會立即消失,而要延續(xù)0.1 -0.4秒的時(shí)間,人眼的這種性質(zhì)被稱為“眼睛的視覺暫留”。假設(shè)我們設(shè)定我們的眼睛的暫留時(shí)間

7、是0.4秒,如果我們的16個(gè)LED旋轉(zhuǎn)一周的時(shí)間快過0.4秒,那么我們看到的圖像就是這一列LED在各個(gè)位置顯示的圖像的疊加,如右圖,如果我們用定時(shí)器把LED旋轉(zhuǎn)一周的各個(gè)位置分割出120分,讓它在相應(yīng)的位置顯示相應(yīng)的圖像,那么我們就可以得到一個(gè)累加的圖像效果了。旋轉(zhuǎn)LED時(shí)鐘的實(shí)現(xiàn)方法是把一組LED(16個(gè)左右) 緊密的排列成一條直線,組成一條LED列,每個(gè)LED都由PIC單片機(jī)來控制其點(diǎn)滅。把整個(gè)電路板固定在電機(jī)上,使得緊密排列的LED條的一端固定在電機(jī)的旋轉(zhuǎn)軸附近,如圖所示。電路板轉(zhuǎn)過一圈的時(shí)間極短,遠(yuǎn)小于0.1秒。通過單片機(jī)控制LED燈在一圈轉(zhuǎn)到不同位置時(shí)的亮滅,來顯示圖像或文字。2.D

8、S1302時(shí)鐘模塊大多數(shù)的單片機(jī)沒有實(shí)時(shí)時(shí)鐘部件,一旦系統(tǒng)掉電時(shí)鐘就不能運(yùn)行,下次再運(yùn)行,時(shí)間就不準(zhǔn)確了。即便使用備用電池,但要維持單片機(jī)系統(tǒng)的較大功耗也是堅(jiān)持不了多久的。而我所做的旋轉(zhuǎn)時(shí)鐘用到的單片機(jī)主要是來準(zhǔn)確顯示時(shí)間的,因此實(shí)時(shí)時(shí)鐘部件必不可少,這里我用了MAXIM公司的DS1302時(shí)鐘芯片作為實(shí)時(shí)時(shí)鐘部件,保證時(shí)間的長久準(zhǔn)確性。DS1302 有著很強(qiáng)的功能。包括時(shí)鐘/日歷寄存器和31 字節(jié)(8位)的數(shù)據(jù)暫存寄存器,數(shù)據(jù)通信僅通過一條串行輸入輸出口。實(shí)時(shí)時(shí)鐘/日歷提供包括秒、分、時(shí)、日期、月份和年份信息。閏年可自行調(diào)整,可選擇AM/PM的12 小時(shí)制或24小時(shí)制。只通過三根線進(jìn)行數(shù)據(jù)的控

9、制和傳遞:CE(輸入信號,在讀、寫數(shù)據(jù)期間,必須為高。該引腳有兩個(gè)功能:第一,CE開始控制字訪問移位寄存器的控制邏輯;其次,CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒ā?;I/O(三線接口時(shí)的雙向數(shù)據(jù)線);SCLK(串行時(shí)鐘輸入)。通過備用電源可以讓芯片在小于1MW的功率下運(yùn)作。對時(shí)鐘寄存器初始化可以設(shè)定當(dāng)前時(shí)間,控制芯片的運(yùn)行,時(shí)間是用BCD碼保存的,RAM可以用來存取用戶數(shù)據(jù),在用了備用電池后RAM的數(shù)據(jù)在系統(tǒng)掉電時(shí)能夠保持不丟失。芯片采用了簡單的I2C 三線通信方式,便于節(jié)省芯片資源和與之接口的MCU的引腳。芯片有著2.05.5V的寬供電電壓圍,在5V供電時(shí)其接口與TTL電平兼容。并且有著

10、很低的功耗,在2.0V供電時(shí)僅耗300nA 的電流。引腳X1 和X2 連接32.768kHz 晶體,與部振蕩器組成時(shí)鐘。晶體的精度直接影響著芯片時(shí)間的準(zhǔn)確與否。DS1302有兩個(gè)電源引腳VCC1和VCC2,分別連接備用電池和電源VCC。VCC2與主電源連接,VCC1接備用電池。當(dāng)VCC2低于VCC1時(shí),芯片由VCC1供電;當(dāng)VCC2-VCC10.2V時(shí),備用電池為芯片供電。在VCC2供電時(shí)芯片能夠?qū)釉赩CC1的備用電池充電,并且是否充電和充電電流都可以由芯片地址為08H的時(shí)鐘寄存器進(jìn)行控制。DS1302與單片機(jī)的硬件接線圖如圖三所示。圖三 DS1302硬件接線圖在進(jìn)行任何數(shù)據(jù)傳輸時(shí),CE必須

11、被制高電平(雖然CE被置為高電平,但部時(shí)鐘還是在晶振作用下不停地計(jì)時(shí)的),在每個(gè)SCLK上升沿時(shí)讀入數(shù)據(jù),下降沿時(shí)寫出數(shù)據(jù)。每個(gè)字節(jié)的傳輸都是由控制字節(jié)(如表1所示)指定的,控制字節(jié)的最高位Bit7必須是“1”,否則讀寫將會被禁止。bit6 為“0”則指定對時(shí)鐘/日歷寄存器進(jìn)行讀寫操作,為“1”則對RAM區(qū)的數(shù)據(jù)進(jìn)行讀寫操作,bit1-bit5 指定相關(guān)寄存器進(jìn)行輸入輸出操作,最低位bit0 指定是輸入還是輸出,為“0”則為寫,相反則為讀,輸入輸出根據(jù)脈沖的上升沿和下降沿串行進(jìn)行。765432101RAM/用來表示相關(guān)寄存器的地址RD/表1 DS1302控制字節(jié)控制字總是從最低位開始輸出。在控

12、制字指令輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個(gè)SCLK脈沖的下降沿,讀出DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。數(shù)據(jù)讀寫時(shí)序如圖四所示。圖四 DS1302數(shù)據(jù)讀寫時(shí)序通過8個(gè)脈沖便可讀取一個(gè)字節(jié),從而實(shí)現(xiàn)串行輸入與輸出。最初通過8個(gè)時(shí)鐘周期載入控制字節(jié)到移位寄存器。如果控制指令選擇的是單字節(jié)模式,連續(xù)的8個(gè)時(shí)鐘脈沖可以進(jìn)行8位數(shù)據(jù)的讀寫操作。8個(gè)脈沖便可讀寫一個(gè)字節(jié)。載入控制字節(jié)后就可以對時(shí)鐘/日歷寄存器進(jìn)行相應(yīng)操作,時(shí)鐘/日歷寄存器如下表所示。讀寄存器寫寄存器BIT7BIT6BIT5BIT

13、4BIT3BIT2-BIT0圍81h80hCH16-59秒0-15秒00-5983h82h16-59分0-15分00-5985h84h12020-2315-19時(shí)0-15時(shí)1-12/0-23/PM87h86h00016-31日0-15日1-3189h88h00010月月1-128Bh8Ah000001-7周1-78Dh8Ch015-99年0-15年00-998Fh8EhWP0秒寄存器(81h、80h)的位7定義為時(shí)鐘暫停標(biāo)志(CH)。當(dāng)該位置1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位置為0時(shí),時(shí)鐘開始運(yùn)行。小時(shí)寄存器(85h、84h)的位7用于定義DS1302是運(yùn)行于12小時(shí)模式

14、還是24小時(shí)模式。當(dāng)為高時(shí),選擇12小時(shí)模式。在12小時(shí)模式下,位5為1時(shí),表示PM。在24小時(shí)模式時(shí),位5是第二個(gè)10小時(shí)位(20-23時(shí))。控制寄存器(8Fh、8Eh)的位7是寫保護(hù)位(WP),其它7位均置為0。在任何的對時(shí)鐘和RAM的寫操作之前,WP位必須為0。當(dāng)WP位為1時(shí),寫保護(hù)位防止對任一寄存器的寫操作。二.系統(tǒng)總體設(shè)計(jì)系統(tǒng)模塊總體框圖如下:6V電源2.7V電源單片機(jī)(PIC16F877)控制亮滅顯示模塊(LED燈)控制轉(zhuǎn)動電動機(jī)輸入時(shí)間時(shí)間存儲模塊 DS1302輸入模塊(按鍵)底座 轉(zhuǎn)動部分開始程序總體框圖:輸入時(shí)間時(shí)間寫入DS1302開始旋轉(zhuǎn),顯示時(shí)鐘界面結(jié)束輸入時(shí)間模塊框圖該

15、模塊利用兩個(gè)按鍵sw1和sw2實(shí)現(xiàn)時(shí)間輸入。sw1按一次時(shí)間加1,sw2按一次切換時(shí)、分、秒的輸入。按完三次sw2結(jié)束。通過八個(gè)LED燈顯示輸入的時(shí)間的二進(jìn)制數(shù)。開始程序框圖如下:是否切換否是輸入時(shí),亮燈是否切換否是輸入分,亮燈是否切換否是輸入秒,亮燈結(jié)束DS1302讀寫模塊寫時(shí)間程序框圖:開始關(guān)閉寫保護(hù)寫入地址寫入1字節(jié)打開寫保護(hù)結(jié)束讀時(shí)間程序框圖:開始關(guān)閉寫保護(hù)寫入地址讀取1字節(jié)打開寫保護(hù)結(jié)束4.LED顯示模塊單片機(jī)轉(zhuǎn)20圈(小于1秒)從DS1302讀一次數(shù)。將表盤分成120格,走一格計(jì)數(shù)器加1。開始程序框圖:判斷是否轉(zhuǎn)20圈,轉(zhuǎn)20圈從DS1302讀一次時(shí)間判斷計(jì)數(shù)器是否為120,是12

16、0則清0。判斷是否為表盤位置,是則點(diǎn)亮表盤是否秒針?否是否分針?否是是否時(shí)針?否延時(shí)點(diǎn)亮指針,延時(shí)計(jì)數(shù)器加1三. 硬件連接兩個(gè)按鍵sw1和sw2接PORTA0和PORTA1。PORTB和PORTC接16個(gè)LED燈。PORTD0接DS1302的SLCK(時(shí)鐘),PORTD1接DS1302的I/O接口, PORTD2接DS1302的CE(使能端)。馬達(dá)上套一個(gè)輪子,用萬能膠粘在電路板上。PIC單片機(jī)和LED燈由電路板上兩個(gè)紐扣電池供電。實(shí)物連接圖:正面圖:背面圖:側(cè)面圖:局部細(xì)節(jié)圖:效果圖:電路原理圖:四.調(diào)試過程在此,列舉幾個(gè)調(diào)試過程中遇到的的問題。1.RA端口的輸入和輸出問題上述提到我們用RA

17、0、RA1接上兩個(gè)按鍵給單片機(jī)輸入時(shí)間,但是,我在編寫好程序進(jìn)行單步調(diào)試時(shí),發(fā)現(xiàn)盡管我用異步激勵(lì)將這三個(gè)端口設(shè)置為高電平,在觀察窗口中RA的值沒有絲毫變化。經(jīng)過思考,并聯(lián)系提高篇中講到的RA端口兼?zhèn)?條數(shù)/模轉(zhuǎn)換器的模擬量輸入通道,在將RA端口當(dāng)作普通數(shù)字輸入/輸出端口時(shí)需要將其控制寄存器ADCON1的低四位送入011x(x取0或1均可)。因此,修改程序后,再次編譯和調(diào)試,問題得到解決。2.DS1302的編碼問題開始我沒有注意DS1302里存的是BCD碼而不是普通二進(jìn)制碼,結(jié)果秒針一跳一跳的不能連續(xù)地走。修改完后時(shí)間恢復(fù)正常。3.讀取時(shí)間的問題單片機(jī)讀取DS1302需要一定的時(shí)間。每秒鐘時(shí)鐘大

18、概轉(zhuǎn)二十幾轉(zhuǎn),每轉(zhuǎn)一圈讀一次時(shí)間沒有必要,所以我設(shè)定轉(zhuǎn)20圈(一秒鐘)讀一次時(shí)間。五.參考文獻(xiàn):PIC單片機(jī)實(shí)用教程基礎(chǔ)篇 (五號 宋體)學(xué)海航空航天大學(xué)使用說明:的確是一本不可或缺的教材,本書列舉了很多實(shí)用的具有實(shí)戰(zhàn)意義的例子,單片機(jī)入門就是通過把這本書里的好例子一字一行敲進(jìn)電腦去來實(shí)現(xiàn)的。PIC單片機(jī)實(shí)用教程提高篇學(xué)海航空航天大學(xué)使用說明:繼承了前面基礎(chǔ)篇的風(fēng)格,例子也具有實(shí)戰(zhàn)意義,主要講RA、TMR2的使用和CCP模塊的PWM脈寬調(diào)制功能。六.實(shí)驗(yàn)心得體會通過本次實(shí)驗(yàn),我對單片機(jī)有了一個(gè)初步的認(rèn)識,也能用匯編編寫一些簡單的程序。這次的程序800行左右,不長,但絕大多數(shù)是我自己打的。看著單

19、片機(jī)能夠?qū)崿F(xiàn)自己編寫的程序所設(shè)定的功能,還是很有自豪感的。這次實(shí)驗(yàn)對我的動手實(shí)踐能力是一次極大的考驗(yàn),我也從中學(xué)到了很多東西。除了動手能力有所提高外,得益于二人組隊(duì)的形式,我也明白了團(tuán)隊(duì)協(xié)作的重要性,獲得了許多與他人合作的經(jīng)驗(yàn)。在這里也要感我的兩位老師和隊(duì)友,他們在實(shí)驗(yàn)過程中給予了我非常大的幫助,沒有他們,這個(gè)單片機(jī)很難完成。我也非常希望能夠在以后還能遇上這種動手實(shí)踐的機(jī)會,這是一個(gè)很好的提升能力的機(jī)遇。下附匯編代碼:注意,此代碼有BUG,秒針會先用55秒走完60秒,然后消失5秒,再出現(xiàn)在0秒處。去掉按鍵輸入時(shí)間的模塊,直接在程序里把時(shí)間打進(jìn)去,秒針又恢復(fù)正常。我研究了幾個(gè)小時(shí)也沒找到問題在哪

20、。#DEFINE T_IO portd,1 ;1302 I_O #DEFINE T_CLK portd,0 ;1302時(shí)鐘 #DEFINE T_RST portd,2 ;1302使能位 #DEFINE DS1302_RX 27H ;保存接受的1個(gè)數(shù)據(jù) #DEFINE DS1302_TX 28H ;準(zhǔn)備寫入到DS1302的一個(gè)數(shù)據(jù) indfequ00hstatus equ 03hrp0 equ 5hCequ0hZequ2hfsrequ04hadcon1equ9fhtrisb equ 86htrisc equ 87htrisdequ88hportb equ 06hportc equ 07hport

21、dequ08hportaequ05htrisaequ85hn equ 20h ;延時(shí)循環(huán)變量counter equ 21h;指針位置計(jì)數(shù)器secnequ22h;秒針列數(shù)minnequ23h;分針列數(shù)hournequ24h;時(shí)針列數(shù)jumpdecequ25h;跳轉(zhuǎn)判斷,0位秒,1位分,2位時(shí)hourcequ26h;d10,時(shí)鐘計(jì)數(shù)循環(huán)變量counter1 equ 29h temp_cnt equ 2ahW_Secondequ2bhW_Minuteequ2chW_Hourequ2dhSecAddrequ2ehsecequ2fhminequ30hhourequ31hreadnequ32htr1equ

22、33htr2equ34hbcdnequ35hdata1 equ 36hdata2 equ 37hn1 equ d13n2 equ 0ffhtb1equ38h;十位tb2equ39h;個(gè)位;-;主程序;-;-;輸入時(shí)間;-org0000hgotomainorg0005hmain bsf status,rp0 clrf trisc ;設(shè)置c口輸出 clrf trisb ;設(shè)置b口輸出clrftrisd ;設(shè)置d口輸出 movlw 0ffh movwf trisa;a口定義為輸入movlw06hmovwfadcon1;a口設(shè)為數(shù)字I/O bcf status,rp0;體0clrfsecnclrfmi

23、nnclrfhournclrfjumpdecclrfportbclrfportc;c口燈滅clrfportdclrfW_HourclrfW_MinuteclrfW_SecondsetW_Hourbtfssporta,1 ;sw2是否按下 gotosetW_Minute1check btfsc porta,0;測開關(guān)sw1按下否?是,跳過下條指令 goto setW_Hour;否!則循環(huán)檢測 call delay btfsc porta,0;再次測開關(guān)sw1按下否?是,跳過下條指令 goto check;否!則循環(huán)檢測incfW_Hour,1 ;時(shí)針加1movlwd12subwfW_Hour,0

24、 ;看是否等于12 btfsc status,ZclrfW_HourmovfW_Hour,0movwfportccheck1 btfss porta,0;測開關(guān)sw1斷開否?是,跳過下條指令 goto check1;否!則循環(huán)檢測 call delay btfss porta,0;再次測開關(guān)sw1斷開否?是,跳過下條指令 goto check1;否!則循環(huán)檢測 goto setW_Hour;返回setW_Minute1btfssporta,1;sw2松開否gotosetW_Minute1calldelaybtfssporta,1gotosetW_Minute1setW_Minutebtfssp

25、orta,1 ;sw2是否按下 gotosetW_Second1check2 btfsc porta,0;測開關(guān)sw1按下否?是,跳過下條指令 goto setW_Minute;否!則循環(huán)檢測 call delay btfsc porta,0;再次測開關(guān)sw1按下否?是,跳過下條指令 goto check2;否!則循環(huán)檢測incfW_Minute,1 ;分針加1movlwd60subwfW_Minute,0 ;看是否等于60 btfsc status,ZclrfW_MinutemovfW_Minute,0movwfportccheck3 btfss porta,0;測開關(guān)sw1斷開否?是,跳過

26、下條指令 goto check3;否!則循環(huán)檢測 call delay btfss porta,0;再次測開關(guān)sw1斷開否?是,跳過下條指令 goto check3;否!則循環(huán)檢測 goto setW_Minute;返回setW_Second1btfssporta,1gotosetW_Second1calldelaybtfssporta,1gotosetW_Second1setW_Secondbtfssporta,1 ;sw2是否按下 gotobegincheck4 btfsc porta,0;測開關(guān)sw1按下否?是,跳過下條指令 goto setW_Second;否!則循環(huán)檢測 call d

27、elay btfsc porta,0;再次測開關(guān)sw1按下否?是,跳過下條指令 goto check4;否!則循環(huán)檢測incfW_Second,1 ;秒針加1movlwd60subwfW_Second,0 ;看是否等于60 btfsc status,ZclrfW_SecondmovfW_Second,0movwfportccheck5 btfss porta,0;測開關(guān)sw1斷開否?是,跳過下條指令 goto check5;否!則循環(huán)檢測 call delay btfss porta,0;再次測開關(guān)sw1斷開否?是,跳過下條指令 goto check5;否!則循環(huán)檢測 goto setW_Se

28、cond;返回begin calltbcd;-;顯示時(shí)間;-callSet_DS1302rsrnmovlwd20movwfreadn;20圈讀一次時(shí)間showmovlwd20subwfreadn,0btfscstatus,ZcallGet_DS1302callbcdtdecfreadn,1clrfcounter;指針位置計(jì)數(shù)器清零 judgecallclearc;清表盤movlwd119subwfcounter,0btfscstatus,Zgotorsrn ;判斷指針位置計(jì)數(shù)器是否達(dá)到119;*是否顯示刻度*movlwd0subwfcounter,0btfscstatus,Zcalldraw2

29、_0movlwd1subwfcounter,0btfscstatus,Zcalldraw2_1movlwd2subwfcounter,0btfscstatus,Zcalldraw2_2movlwd3subwfcounter,0btfscstatus,Zcalldraw2_3movlwd10subwfcounter,0btfscstatus,Zcalldrawgramovlwd20subwfcounter,0btfscstatus,Zcalldrawgramovlwd27subwfcounter,0btfscstatus,Zcalldraw3_0movlwd28subwfcounter,0btf

30、scstatus,Zcalldraw3_1movlwd29subwfcounter,0btfscstatus,Zcalldraw3_2movlwd30subwfcounter,0btfscstatus,Zcalldraw3_3movlwd31subwfcounter,0btfscstatus,Zcalldraw3_4movlwd32subwfcounter,0btfscstatus,Zcalldraw3_5movlwd33subwfcounter,0btfscstatus,Zcalldraw3_6movlwd40subwfcounter,0btfscstatus,Zcalldrawgramov

31、lwd50subwfcounter,0btfscstatus,Zcalldrawgramovlwd58subwfcounter,0btfscstatus,Zcalldraw6_0movlwd59subwfcounter,0btfscstatus,Zcalldraw6_1movlwd60subwfcounter,0btfscstatus,Zcalldraw6_2movlwd61subwfcounter,0btfscstatus,Zcalldraw6_3movlwd62subwfcounter,0btfscstatus,Zcalldraw6_4movlwd70subwfcounter,0btfsc

32、status,Zcalldrawgramovlwd80subwfcounter,0btfscstatus,Zcalldrawgramovlwd87subwfcounter,0btfscstatus,Zcalldraw9_0movlwd88subwfcounter,0btfscstatus,Zcalldraw9_1movlwd89subwfcounter,0btfscstatus,Zcalldraw9_2movlwd90subwfcounter,0btfscstatus,Zcalldraw9_3movlwd91subwfcounter,0btfscstatus,Zcalldraw9_4movlw

33、d92subwfcounter,0btfscstatus,Zcalldraw9_5movlwd93subwfcounter,0btfscstatus,Zcalldraw9_6movlwd100subwfcounter,0btfscstatus,Zcalldrawgramovlwd110subwfcounter,0btfscstatus,Zcalldrawgramovlwd116subwfcounter,0btfscstatus,Zcalldraw1_0movlwd117subwfcounter,0btfscstatus,Zcalldraw1_1movlwd118subwfcounter,0bt

34、fscstatus,Zcalldraw1_2;*是否顯示秒針*movfsec,0movwfsecnaddwfsecn,1movfsecn,0subwfcounter,0btfscstatus,Zcalldrawsecclrfsecnbtfssjumpdec,0gotodec_mingotosd04;*是否顯示分針*dec_minmovfmin,0movwfminnaddwfminn,1movfminn,0subwfcounter,0btfscstatus,Zcalldrawminclrfminnbtfssjumpdec,1gotodec_hourgotosd04;*是否顯示時(shí)針*dec_hou

35、rmovlwd10movwfhourcaddhmovfhour,0addwfhourn,1decfszhourc,1gotoaddhmovfmin,0movwfminnjudhmovlwd6subwfminn,1btfscstatus,Cgotopoint1gotopoint2point1incfhourn,1gotojudhpoint2movfhourn,0subwfcounter,0btfscstatus,Zcalldrawhourclrfhournclrfminnbtfssjumpdec,1gotosd05gotosd04sd04calldelay04;callclearc;callde

36、lay01;gotoadd;sd05calldelay05addincfcounter,1;指針位置計(jì)數(shù)器加1clrfjumpdecgotojudge;*delay ;10ms延時(shí)子程序,防抖 movlw n1 movwf data1ip0 movlw n2 movwf data2ip1 decfsz data2,1 goto ip1 decfsz data1,1 goto ip0 return;-;2進(jìn)制轉(zhuǎn)BCD;-tbcdclrftb1movfW_Hour,0movwftb2movlwd10divsubwftb2,1btfssstatus,Cgotopoint3incftb1,1gotod

37、ivpoint3movlwd10addwftb2,1swapftb1,1movftb1,0iorwftb2,0movwfW_Hourclrftb1movfW_Minute,0movwftb2movlwd10div1subwftb2,1btfssstatus,Cgotopoint4incftb1,1gotodiv1point4movlwd10addwftb2,1swapftb1,1movftb1,0iorwftb2,0movwfW_Minuteclrftb1movfW_Second,0movwftb2movlwd10div2subwftb2,1btfssstatus,Cgotopoint5inc

38、ftb1,1gotodiv2point5movlwd10addwftb2,1swapftb1,1movftb1,0iorwftb2,0movwfW_Secondreturn;* ;子程序名:Set_DS1302 ;功 能:設(shè)置DS1302 初始時(shí)間,并啟動計(jì)時(shí)。 ;說 明: ;調(diào) 用:Write_byte ;入口參數(shù):初始時(shí)間在:W_Second,W_Minute,W_Hour(地址連續(xù)) ;出口參數(shù):無 ;消耗資源:counter1,SecAddr(預(yù)定義) ;* Set_DS1302 bcf T_RST bcf T_CLK bsf T_RST movlw 8eh movwf DS1302_

39、TX ;數(shù)據(jù)發(fā)送寄存器 call Write_byte ;發(fā)送字節(jié) movlw 00h ;WP=0 movwf DS1302_TX call Write_byte bsf T_CLK bcf T_RST movlw W_Second movwf fsr movlw D3 movwfcounter1 movlw 80h movwf SecAddr ;秒寫地址 S13021 bcf T_RST bcf T_CLK bsf T_RST movf SecAddr,0 movwf DS1302_TX call Write_byte ;寫秒地址 movf indf,0 movwf DS1302_TX ca

40、ll Write_byte ;寫秒數(shù)據(jù) incf fsr,1 incf SecAddr,1 incf SecAddr,1 bsf T_CLK bcf T_RST decfsz counter1,1 goto S13021 bcf T_RST bcf T_CLK bsf T_RST movlw 8eh ;控制寄存器 movwf DS1302_TX call Write_byte movlw 80h ;控制WP=1,寫保護(hù) movwf DS1302_TX call Write_byte bsf T_CLK bcf T_RST return;* ;子程序名:Get_DS1302 ;功 能:從DS1302 讀時(shí)間 ;說 明: ;調(diào) 用:Write_byte,Read_byte ;入口參數(shù):時(shí)間保存在:sec,min,hour ;出口參數(shù):

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論