版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
旋轉(zhuǎn)時鐘的設(shè)計與實現(xiàn)項目研究報告指導教師:項目組成員:王銀鈴講師自動化專業(yè)1003班級尚云龍電氣專業(yè)1003班級吳寶泉電子專業(yè)1002班級閻歡“智能機器人”創(chuàng)新實踐班2013年1月23日II摘要旋轉(zhuǎn)顯示是利用機械轉(zhuǎn)動動態(tài)掃描代替?zhèn)鹘y(tǒng)逐行掃描方式,顯示屏其實質(zhì)就是與機械轉(zhuǎn)動配合起來的動態(tài)掃描顯示技術(shù)。本設(shè)計方案旋轉(zhuǎn)時鐘的設(shè)計與實現(xiàn)是以STC12C5A32S2單片機和LED發(fā)光二級管為核心,輔以必要的電路,構(gòu)成一個靠電路板旋轉(zhuǎn)來顯示時間的旋轉(zhuǎn)時鐘。與傳統(tǒng)機械表相比,它具有走時精確,顯示直觀等特點。電路板旋轉(zhuǎn)時鐘由八部分組成,首先由電源給電機供電,從而可以使電動機帶動一排LED發(fā)光管繞電機軸高速旋轉(zhuǎn),這樣可以讓繞線圈耦合產(chǎn)生感應電壓,給旋轉(zhuǎn)板供電,與此同時通過STC12C5A32S2單片機和能夠提供時鐘信號脈沖的時鐘芯片DS1302組合控制各個LED發(fā)光管在旋轉(zhuǎn)平面相應的位置上點亮,構(gòu)成一幅點陣圖,由于人的視覺暫留效果,看到一個指針式時鐘,實現(xiàn)時間顯示功能,可替代傳統(tǒng)掛鐘顯示時間,達到節(jié)能又美觀的效果。該這個時鐘具有兩種顯示模式:一種是字符式數(shù)字顯示模式,可在一個屏上顯示年月日和時分秒信息;另一種是指針式模擬顯示模式,可仿真指針式鐘表顯示時分秒信息。同時還設(shè)有紅外遙控功能,可通過遙控器改變顯示模式和調(diào)整時鐘的時值。此電子鐘嚴格按照要求設(shè)計,最終達到預期的效果,能夠正確顯示分秒的計時。
關(guān)鍵詞:旋轉(zhuǎn)時鐘STC12C5A32S2單片機時鐘芯片DS1302LED燈目錄TOC\o"1-3"\h\u4020摘要 I51931緒論 1168441.1項目研究背景及意義 126631.2項目主要研究內(nèi)容 2297862總體設(shè)計方案 314462.1系統(tǒng)總體方案設(shè)計 3192172.1.1電路結(jié)構(gòu)圖的設(shè)計 3129642.1.2電路原理圖的設(shè)計 4317932.2總體方案設(shè)計及硬件指標 5180242.2.1方案論證 5153862.2.2方案比較與論證 5171983硬件設(shè)計 615113.1旋轉(zhuǎn)指針板的設(shè)計 6175533.2時鐘芯片DS1302 720543.3電源基板的硬件設(shè)計 10172754軟件設(shè)計 11130674.1算法設(shè)計 1192814.2系統(tǒng)主程序設(shè)計 11245395系統(tǒng)調(diào)試 12211315.1硬件調(diào)試 12205905.2軟件調(diào)試 12167956總結(jié) 13101156.1項目完成情況 1370886.2項目過程中心得體會 135870附錄 15PAGEPAGE491緒論1.1項目研究背景及意義20世紀末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當前的時間。忘記了要做的事情,當事情不是很重要的時候,這種遺忘無傷大雅。但是,一旦重要事情,一時的耽誤可能釀成大禍。目前,單片機正朝著高性能和多品種方向發(fā)展趨勢將是進一步向著CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路內(nèi)裝化等幾個方面發(fā)展。下面是單片機的主要發(fā)展趨勢。單片機應用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計思想和設(shè)計方法。從前必須由模擬電路或數(shù)字電路實現(xiàn)的大部分功能,現(xiàn)在已能用單片機通過軟件方法來實現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。單片機模塊中最常見的是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。數(shù)字鐘是采用數(shù)字電路實現(xiàn)對時,分,秒數(shù)字顯示的計時裝置,廣泛用于個人家庭,車站,碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?,由于?shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應用,使得數(shù)字鐘的精度,遠遠超過老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴大其應用,有著非?,F(xiàn)實的意義。1.2項目主要研究內(nèi)容紅外遙控器控制紅外接收管,紅外接收管接收信號,傳給單片機處理信號,可以達到單片機對旋轉(zhuǎn)時鐘調(diào)時和復位。對類似旋轉(zhuǎn)廣告屏等裝置進行調(diào)研,實現(xiàn)旋轉(zhuǎn)時鐘的設(shè)計與實現(xiàn),并最終能夠在班級應用。當它工作時,電機帶動一排高亮LED繞電機軸旋轉(zhuǎn),LED燈在單片機控制下進行一定規(guī)則的顯示,從而形成時鐘的時針、分針和時間刻度,并按每分每小時走動,模擬出一個炫彩的時鐘。2總體設(shè)計方案2.1系統(tǒng)總體方案設(shè)計旋轉(zhuǎn)LED顯示屏是通過一個旋轉(zhuǎn)的電路板,電路板上排列的24個LED燈受單片機控制在特定的位置(傳感器感應位置)亮或滅,從而顯示出特定的字符或圖形。本作品主要是根據(jù)人的視覺暫留原理設(shè)計的。采用高速旋轉(zhuǎn)的電機帶動電路板高速旋轉(zhuǎn),從視覺效果上就會產(chǎn)生一種圓盤狀的LED顯示屏的狀態(tài)。旋轉(zhuǎn)顯示屏是利用機械轉(zhuǎn)動動態(tài)掃描代替?zhèn)鹘y(tǒng)逐行掃描方式,是一種新型的顯示屏,具有成本低,可視范圍大的特點,是LED顯示屏的一個新的發(fā)展方向。其實質(zhì)就是與機械轉(zhuǎn)動配合起來的動態(tài)掃描顯示技術(shù)。本次“旋轉(zhuǎn)LED顯示屏”的制作用于提高我們的實踐能力和創(chuàng)新能力,激發(fā)學生學習興趣,引導自主學習及培養(yǎng)創(chuàng)新能力、協(xié)作精神、工程實踐素質(zhì)。本設(shè)計利用高速旋轉(zhuǎn)中控制LED的亮滅,進行字符的顯示,控制器采用單片機,完成顯示內(nèi)容的傳輸、字庫的轉(zhuǎn)換、顯示等功能。動態(tài)掃描原理是利用人眼具有視覺暫留的特性,當畫面以一定的速度刷新時,我們看到的就是連續(xù)的圖像。例如:傳統(tǒng)的逐點掃描方式,采用逐行換位的掃描方式,每一行都必須要有LED顯示器件,這使顯示屏成本偏大,功耗增加。旋轉(zhuǎn)掃描采用了不同的形式,其顯示器件只有一列,由機械旋轉(zhuǎn)運行到某一位置時就顯示該位置的狀態(tài),到下一位置后又顯示下一位置的狀態(tài),即一列圖像要完成全部圖像的顯示,掃描過程由機械轉(zhuǎn)動更換位置來實現(xiàn)的。旋轉(zhuǎn)LED顯示的旋轉(zhuǎn)顯示,可采用機械旋轉(zhuǎn)的掃描方式。2.1.1電路結(jié)構(gòu)圖的設(shè)計系統(tǒng)總體由軟件和硬件兩部分構(gòu)成。硬件部分由單片機、DS1302時鐘芯片、LED陣列、電源、旋轉(zhuǎn)電機、繞線圈、紅外接收管、紅外遙控器組成??傮w框圖如下:圖2-1系統(tǒng)整體方框圖旋轉(zhuǎn)時鐘設(shè)計方案有八部分基本組成,首先由電源給電機供電,從而可以使電機旋轉(zhuǎn),這樣可以讓繞線圈耦合產(chǎn)生感應電壓,就可以給旋轉(zhuǎn)板供電,旋轉(zhuǎn)板是以單片機為核心,有DS1302提供時鐘信號脈沖。紅外遙控器控制紅外接收管,紅外接收管接受信號,傳給單片機處理信號,可以達到單片機對旋轉(zhuǎn)時鐘調(diào)時和復位。2.1.2電路原理圖的設(shè)計圖1.2.1主控板原理圖2.2總體方案設(shè)計及硬件指標2.2.1方案論證人眼在觀察景物時,光信號傳人大腦神經(jīng),需經(jīng)過一段短暫的時間,光的作用結(jié)束后,視覺形象并不立即消失,這種殘留的視覺稱“后像”,視覺的這一現(xiàn)象則被稱為“視覺暫留”,其原因是由視神經(jīng)的反應速度造成的,其時值是二十四分之一秒,通常情況下,視覺殘留會保持0.1至0.4秒。也就是說以0.1至0.4秒間隔閃爍的圖像,被人眼觀察會被認為是連續(xù)的圖像。視覺殘留是動畫、電影等視覺媒體形成和傳播的根據(jù)。本次旋轉(zhuǎn)LED可以歸納為動態(tài)掃描和機械旋轉(zhuǎn)兩部分其實質(zhì)就是與機械轉(zhuǎn)動配合起來的動態(tài)掃描顯示技術(shù)。2.2.2方案比較與論證單片機、LED等電路必須安裝在高速旋轉(zhuǎn)的電動機上面,無法采用電線進行供電,使系統(tǒng)供電變得極為麻煩,常見的方法有2種。方案一:用電動機電刷的方法,簡單有效;請注意:這樣壽命很短,必要時請自行在電路板上加焊一層耐磨導電層,如果電刷觸點不夠光潔以及接觸壓力大,幾小時就可以將線路板上的銅皮磨穿。方案二:直接用電池給主板供電,電池裝在主板上隨主板轉(zhuǎn)動,成本高,壽命短,影響轉(zhuǎn)速。綜合以上2種方案的優(yōu)缺點,我們選擇了用電刷供電的方法,而DS1302芯片則用普通紐扣電池供電即可。電源基板主要負責為電機提供穩(wěn)定的直流電,并通過電刷給指針板送電,是能源中心。雖然結(jié)構(gòu)簡單,但也是必不可少的一個環(huán)節(jié),必須要保證電源穩(wěn)定可靠。直接由+12V的變壓器通過插孔給電路板送電,經(jīng)電容及電位器后接直流電機。再經(jīng)過7805降壓穩(wěn)壓成+5V輸出電壓。3硬件設(shè)計3.1旋轉(zhuǎn)指針板的設(shè)計指針板是旋轉(zhuǎn)時鐘的關(guān)鍵部分,負責顯示功能,指針板上有一排超高亮的LED燈。它們就是顯示部件了,亮點所在。為了制作方便,我們把單片機、時鐘芯片、發(fā)光二極管、一體化紅外接收頭等器件焊接在一塊指針型的電路板上,這樣可以使旋轉(zhuǎn)的電路成為一個獨立的系統(tǒng),只需要外部送電進來就可以正常運作。電路板中心鉆一個電機軸插孔,插孔為半圓并且半徑與電機軸相等,電機軸插入其中帶動指針板旋轉(zhuǎn)。該電路板越輕越好,LED燈可用貼片式。LED燈數(shù)目根據(jù)不同用處可選多選少,我們設(shè)計的時鐘需要能顯示“12、3、6、9”這四個整點數(shù)字和秒針、分針、時針,這樣我們用6支LED燈顯示數(shù)字,18支用來顯示秒、分、時三針,另外再加一支內(nèi)框一支外框燈,總共25支LED燈,也足夠用來顯示漢字和英文。在這個項目中,一共采用了25支LED。也就是說每一列上可以分辨的顯示點有25個點。當然,這只是視覺上的顯示效果。但為了節(jié)省單片機I/O管腳,并不是每支LED燈都由一個I/O管腳控制的。通過分析,發(fā)現(xiàn)靠近內(nèi)圈的那十幾支LED,除了用做顯示時鐘指針外,并不適合用來顯示字符。而在顯示指針時,這部分LED的亮滅是同時發(fā)生的,這樣就可以用一個I/O口來控制這組LED,讓它們是同時亮或者同時滅。除了以上幾點外,需要考慮的還有顯示穩(wěn)定問題:比如指針板旋轉(zhuǎn)掃描一圈完成了數(shù)字“12”的顯示,如果電機速度因為各種原因而不穩(wěn)定,轉(zhuǎn)下一圈所用的時間多于(或少于)上一圈的,那么數(shù)字“12”將會移到上一次顯示位置的左側(cè)(或右側(cè))。為了解決這個問題,在指針板上加裝一個紅外接收管。當接收到與之配對的紅外發(fā)光二極管(紅外發(fā)光二極管安裝在電機外殼上,并與接收管對齊)發(fā)出的紅外線后,就會反向?qū)ǎ拥絾纹瑱C外部中斷,將會觸發(fā)外部中斷。指針板每旋轉(zhuǎn)一周,就會產(chǎn)生這樣一個中斷信號,這個信號被稱為“過零信號”。有了這個信號,單片機就可以在指針板旋轉(zhuǎn)過程中實時檢測計算指針板的角度位置,并根據(jù)指針板所處的不同位置,點亮相應的LED,這樣每轉(zhuǎn)一圈就能消除一圈的誤差,使得顯示內(nèi)容保持穩(wěn)定。3.2時鐘芯片DS1302大多數(shù)的單片機沒有實時時鐘部件,一旦系統(tǒng)掉電時鐘就不能運行,下次再運行,時間就不準確了。即便使用備用電池,但要維持單片機系統(tǒng)的較大功耗也是堅持不了多久的。而我所做的旋轉(zhuǎn)時鐘用到的單片機主要是來準確顯示時間的,因此實時時鐘部件必不可少,這里我用了MAXIM公司的DS1302時鐘芯片作為實時時鐘部件,保證時間的長久準確性。DS1302有著很強的功能。包括時鐘/日歷寄存器和31字節(jié)(8位)的數(shù)據(jù)暫存寄存器,數(shù)據(jù)通信僅通過一條串行輸入輸出口。實時時鐘/日歷提供包括秒、分、時、日期、月份和年份信息。閏年可自行調(diào)整,可選擇AM/PM的12小時制或24小時制。只通過三根線進行數(shù)據(jù)的控制和傳遞:CE(輸入信號,在讀、寫數(shù)據(jù)期間,必須為高。該引腳有兩個功能:第一,CE開始控制字訪問移位寄存器的控制邏輯;其次,CE提供結(jié)束單字節(jié)或多字節(jié)數(shù)據(jù)傳輸?shù)姆椒ā?;I/O(三線接口時的雙向數(shù)據(jù)線);SCLK(串行時鐘輸入)。通過備用電源可以讓芯片在小于1MW的功率下運作。對時鐘寄存器初始化可以設(shè)定當前時間,控制芯片的運行,時間是用BCD碼保存的,RAM可以用來存取用戶數(shù)據(jù),在用了備用電池后RAM內(nèi)的數(shù)據(jù)在系統(tǒng)掉電時能夠保持不丟失。芯片采用了簡單的I2C三線通信方式,便于節(jié)省芯片資源和與之接口的MCU的引腳。芯片有著2.0~5.5V的寬供電電壓范圍,在5V供電時其接口與TTL電平兼容。并且有著很低的功耗,在2.0V供電時僅耗300nA的電流。引腳X1和X2連接32.768kHz晶體,與內(nèi)部振蕩器組成時鐘。晶體的精度直接影響著芯片時間的準確與否。DS1302有兩個電源引腳VCC1和VCC2,分別連接備用電池和電源VCC。VCC2與主電源連接,VCC1接備用電池。當VCC2低于VCC1時,芯片由VCC1供電;當VCC2-VCC1≥0.2V時,備用電池為芯片供電。在VCC2供電時芯片能夠?qū)釉赩CC1的備用電池充電,并且是否充電和充電電流都可以由芯片內(nèi)地址為08H的時鐘寄存 器進行控制。DS1302與單片機的硬件接線圖如下圖所示。圖3.2.1DS1302硬件接線圖在進行任何數(shù)據(jù)傳輸時,CE必須被制高電平(雖然CE被置為高電平,但內(nèi)部時鐘還是在晶振作用下不停地計時的),在每個SCLK上升沿時讀入數(shù)據(jù),下降沿時寫出數(shù)據(jù)。每個字節(jié)的傳輸都是由控制字節(jié)(如表1所示)指定的,控制字節(jié)的最高位Bit7必須是“1”,否則讀寫將會被禁止。bit6為“0”則指定對時鐘/日歷寄存器進行讀寫操作,為“1”則對RAM區(qū)的數(shù)據(jù)進行讀寫操作,bit1-bit5指定相關(guān)寄存器進行輸入輸出操作,最低位bit0指定是輸入還是輸出,為“0”則為寫,相反則為讀,輸入輸出根據(jù)脈沖的上升沿和下降沿串行進行。765432101RAM/用來表示相關(guān)寄存器的地址RD/表3.2.2DS1302控制字節(jié)控制字總是從最低位開始輸出。在控制字指令輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個SCLK脈沖的下降沿,讀出DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。數(shù)據(jù)讀寫時序如圖3.2.3所示。圖3.2.3DS1302數(shù)據(jù)讀寫時序通過8個脈沖便可讀取一個字節(jié),從而實現(xiàn)串行輸入與輸出。最初通過8個時鐘周期載入控制字節(jié)到移位寄存器。如果控制指令選擇的是單字節(jié)模式,連續(xù)的8個時鐘脈沖可以進行8位數(shù)據(jù)的讀寫操作。8個脈沖便可讀寫一個字節(jié)。載入控制字節(jié)后就可以對時鐘/日歷寄存器進行相應操作,時鐘/日歷寄存器如下表所示。讀寄存器寫寄存器BIT7BIT6BIT5BIT4BIT3BIT2-BIT0范圍81h80hCH16-59秒0-15秒00-5983h82h16-59分0-15分00-5985h84h12020-2315-19時0-15時1-12/0-23/PM87h86h00016-31日0-15日1-3189h88h00010月月1-128Bh8Ah000001-7周1-78Dh8Ch015-99年0-15年00-998Fh8EhWP0—秒寄存器(81h、80h)的位7定義為時鐘暫停標志(CH)。當該位置1時,時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當該位置為0時,時鐘開始運行。小時寄存器(85h、84h)的位7用于定義DS1302是運行于12小時模式還是24小時模式。當為高時,選擇12小時模式。在12小時模式下,位5為1時,表示PM。在24小時模式時,位5是第二個10小時位(20-23時)??刂萍拇嫫鳎?Fh、8Eh)的位7是寫保護位(WP),其它7位均置為0。在任何的對時鐘和RAM的寫操作之前,WP位必須為0。當WP位為1時,寫保護位防止對任一寄存器的寫操作。3.3電源基板的硬件設(shè)計電源基板主要負責為電機提供穩(wěn)定的直流電,并通過無線供電技術(shù)給指針板送電,是能源中心,如圖3.3.1所示。雖然結(jié)構(gòu)簡單,但也是必不可少的一個環(huán)節(jié),必須要保證電源穩(wěn)定可靠。圖3.3.1電源基板硬件4軟件設(shè)計4.1算法設(shè)計本項目的算法設(shè)計主要分5大獨立模塊,即:DS1302時鐘配置及顯示模塊、紅外一體化接收模塊、字模存儲模塊以及串口傳輸模塊和EEPROM模塊(接收串口發(fā)送的字模)。4.2系統(tǒng)主程序設(shè)計主程序的設(shè)計是為了完成系統(tǒng)的初始化,建立各個獨立模塊間的相互調(diào)用和配合使用,實現(xiàn)LED旋轉(zhuǎn)時鐘設(shè)計的功能。主程序的設(shè)計可用下圖遙控器各按鍵功能來形象地描述。5系統(tǒng)調(diào)試 經(jīng)過詳細地理論分析和設(shè)計后,開始制作硬件電路,邊制作邊進行硬件調(diào)試,這樣有利于問題的分析和解決,不會積累錯誤,也不會因為一個小問題而大動干戈。軟件編程中,首先對單元功能模塊進行調(diào)試,然后再對整個系統(tǒng)進行調(diào)試,基本和硬件調(diào)試差不多。5.1硬件調(diào)試1.發(fā)光二極管的調(diào)試。焊好36支LED燈和對應電阻,給板子上電,分別使每個LED的陰極接地,發(fā)現(xiàn)36支LED燈都能正常點亮和熄滅。2.紅外對管的調(diào)試。給發(fā)射管接限流電阻并上電,去對準焊在板子上的紅外接收管,用電壓表測試其陰極,為低電平,移開后為高電平,工作正常。3.電源驅(qū)動調(diào)試。電刷制作完成后,將LED燈都接地,并給電機和電刷都上電,指針板開始旋轉(zhuǎn),并且LED燈都能點亮,電刷供電成功。4.紅外接收管調(diào)試。調(diào)用紅外按鍵程序,若LED燈能按預先設(shè)置的按鍵對應配置顯示,說明紅外接收管工作正常。5.2軟件調(diào)試基本上排除了系統(tǒng)硬件故障后,就進入軟件的調(diào)試階段,這個階段主要完成排除軟件編程上的錯誤,同時也能發(fā)現(xiàn)硬件遺留的問題,本系統(tǒng)采用C語言編程,主要有DS1302時鐘配置及顯示模塊、紅外一體化接收模塊、字模存儲模塊以及串口傳輸模塊和EEPROM模塊(接收串口發(fā)送的字模),每一部分都獨立調(diào)試。調(diào)試過程充分利用了調(diào)試軟件中單步、斷點、設(shè)置觀察項等調(diào)試手段,主要針對程序跳轉(zhuǎn)錯誤、變量聲明及函數(shù)調(diào)用錯誤等,具體調(diào)試不在此說明。6總結(jié)6.1項目完成情況1.立體顯示旋轉(zhuǎn)字(通過“暫停按鍵”進行靜態(tài)與移動顯示,讀取的EEPROM中數(shù)據(jù))
2.平面顯示數(shù)字時鐘年月日星期(時鐘可調(diào)時鐘芯片用DS1302帶后備電池掉電時鐘繼續(xù)走)
3.平面顯示模擬表盤時鐘(如果表盤不全或者過多顯示請按配套的遙控器"快進"或者"快退"來調(diào)整單列顯示時間設(shè)置后參數(shù)保存到DS1302RAM)
4.平面顯示字體模式通過“暫停按鍵”進行靜態(tài)與移動顯示(讀取的EEPROM中數(shù)據(jù))
5.立體加平面顯示(代碼中配置的數(shù)組存放的固定字模)
6.兩顆心閃動
7.一顆心填滿效果
8.笑臉動畫
9.打印字效果
上述9種效果對應遙控器按鍵1、2、3、4、5、6、7、8、9時鐘復位按鍵“Meun”6.2項目過程中心得體會以上的設(shè)計只是實現(xiàn)了利用旋轉(zhuǎn)的LED和視覺殘留的作用,完成時鐘的顯示部分。除此以外,還有許多部分需要改進和補充,才能實現(xiàn)一個最基本的時鐘功能。例如,精確的時間計算的功能沒有被加入到設(shè)計中,也就是說,該時鐘無法保證輸出時間的可靠性,時間誤差可能達到數(shù)分鐘之久。由于制作的這個旋轉(zhuǎn)LED時鐘只是實驗性質(zhì),目的是實現(xiàn)旋轉(zhuǎn)LED的顯示功能,所以沒有對這個細節(jié)進行考慮,但是在實際應用中這個缺陷對于時鐘來說是一個致命的缺陷。此設(shè)計也可使用無線通信的方式,會在時鐘高速旋轉(zhuǎn)時進行時間的設(shè)定和調(diào)整。方案的優(yōu)點是,操作方便,缺點是需要在原系統(tǒng)中增加無線通信模塊,大大增加了整個時鐘的成本和設(shè)計的復雜性。因此我在該設(shè)計中采用的是在電機旋轉(zhuǎn)軸附近增加電刷,把設(shè)定和調(diào)整時間的數(shù)據(jù)線通過電刷引導到高速旋轉(zhuǎn)的電路板上。該方案同樣操作方便,但是缺點也很明顯,增加了額外的電刷,整個系統(tǒng)噪音增加,摩擦的電刷容易損壞,而且傳遞的數(shù)據(jù)無法保證信號能夠良好的傳導至單片機,很容易出現(xiàn)錯誤信號。時間的設(shè)定和調(diào)整問題還沒有比較好的解決方案,尚待進一步考慮。通過這段時間的設(shè)計,終于完成了旋轉(zhuǎn)電子鐘的設(shè)計,雖然在做的時候遇到一些困難,但經(jīng)過一翻很大的努力也完全達到設(shè)計要求的。 這次設(shè)計真的讓我長進了很多,單片機的設(shè)計重點就在于軟件程序的設(shè)計,需要有很巧妙的編程方法,在編程時,由于粗心大意馬虎,有些語句看似沒問題,可就是不出效果,經(jīng)仔細揣摩修改后,程序才正常運行。學習單機片機更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高。 從這次的設(shè)計中,我真真正正的意識到,在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識用到實際當中,理論指導實踐,在實踐中對理論知識加以理解。我所設(shè)計的這個旋轉(zhuǎn)時鐘僅僅是顯示了要求的功能,尚有很多不足的地方,以后我可以考慮改進一下,使它的功能更加完善。在此感謝老師和同學們的幫助和指導!附錄附錄一:項目源代碼#include"NEW_8051.H"#include"task.h"#include<stddef.h>sbitLed1=P3^0;//最里面LEDsbitLed2=P3^1;sbitLed3=P3^4;ucharDelay=1;bitBIT_timeout=0;uintuitime=0;datauintuiicount=0;uintuiCountFontNumber=0;ucharucMode=2;datauintuiicountTwo=0;ucharBuffCount=0;ucharucPCA0_TimeCount;datauintuiBaseAddress=0;datauintuiFontNumber=0;datauintuiFontNumber_P=0;dataucharucNumRows=224;//定義一周顯示字個數(shù)一個字16列224/16=13個字dataucharucNumRows_p=128;ucharDelayTimeCount=0;bitStop_move=0;ucharMod=0;ucharBuff[448]=0xFF;ucharucLine_count=0;ucharRow;uchari=0;ucharj=0;uchark;ucharStop_time=0;ucharucline=0;bitbDot=0;ucharcodesw[8]={0XFE,0XFC,0XF8,0XF0,0XE0,0XC0,0X80,0X00};//ucharcodesw2[8]={0X01,0XC0,0XE0,0XF0,0XF8,0XFC,0XFE,0XFF};/***************模擬表盤變量**************/uintDISP_LINE=0;ucharDISP_LINE_ADJ=0;ucharDISP_TIME_ADJ=0;//ucharTime0_count=0;//====參數(shù)初始化ucharDISP_TIME_SET;//單列顯示時間設(shè)置值/********************************************//*********延時子程序**********/voiddelay(unsignedcharn) //每列顯示的時間{ unsignedchara,b,c; c=2;//+DelayTimeCount; for(;n>0;n--) { for(b=65;b>0;b--)for(a=c;a>0;a--); }}/*********PCA中斷子程序**********/voidPCA()interrupt7 //PCA定時器{ if(CCF0) { CCF0=0; CL=0; CH=0; ucPCA0_TimeCount++; if(ucPCA0_TimeCount>12) { ucPCA0_TimeCount=0; //調(diào)時閃爍 if(ucMode==2) { flag=~flag; } elseif(ucMode==3) { du1302();//獲取時間 Sec=59-(Sec/16*10+Sec%16);//由于電機反轉(zhuǎn)所以需要用最大值減去當前值 Cent=59-(Cent/16*10+Cent%16); Hour=Hour/16*10+Hour%16; if(Hour>11) { Hour=Hour-12; } Hour=12-Hour; Sec=Sec*3;//秒針定位="秒"*3 Hour=(Hour*15)+(Cent/4);//時針定位="時"*15+"分"/4 Cent=Cent*3;//分針定位="分"*3 } } }}/************************************/voidTimer0Interrupt(void)interrupt1{ ucharDISP_TIME; TF0=0; TR0=0; DISP_TIME=DISP_TIME_SET; TH0=(65536-DISP_TIME)/256; TL0=(65536-DISP_TIME)%256; TR0=1;//if(++Time0_count>250)Time0_count=250;//溢出計數(shù)器+1,>最大值,=最大值if(++DISP_LINE>180)DISP_LINE=0;//顯示列計數(shù)器+1,>最大值,=0 /***********清空顯示************/ P1=0XFF; P0=0XFF; Led1=0; Led2=1; Led3=1; /*************形成表盤*******************/ switch(DISP_LINE){ case180*1/12://1點 case180*2/12://2點 case180*4/12://4點 case180*5/12://5點 case180*7/12://6點 case180*8/12://7點 case180*10/12://10點 case180*11/12://11點 P1=0x7F; break; case180*3/12://3點 case180*6/12://6點 case180*9/12://9點 P1=0x3F; break; case0://12點 P1=0x1F; break;}/****************************************/ //顯示指針"時" if(((Hour-3)<=DISP_LINE)&&((Hour+3)>=DISP_LINE)) { if(((Hour-2)==DISP_LINE)||((Hour+2)==DISP_LINE)) P0=0XFB; elseif(((Hour-3)==DISP_LINE)||((Hour+3)==DISP_LINE)) P0=0XFD; } if(Hour==DISP_LINE)//||(DISP_LINE==i)||(DISP_LINE==j{P1=P1|0X1F;P0=0XF0; Led1=0; Led2=0; Led3=0;}//顯示指針"分" if(((Cent-2)<=DISP_LINE)&&((Cent+2)>=DISP_LINE)) { if(((Cent-1)==DISP_LINE)||((Cent+1)==DISP_LINE)) P0=0XBF; elseif(((Cent-2)==DISP_LINE)||((Cent+2)==DISP_LINE)) P0=0XDF; } if(Cent==DISP_LINE){P1=P1|0X1F;P0=0X00;Led1=0; Led2=0; Led3=0; } //顯示指針"秒" if(((Sec-2)<=DISP_LINE)&&((Sec+2)>=DISP_LINE)) { if(((Sec-1)==DISP_LINE)||((Sec+1)==DISP_LINE)) P1=P1&0XF7; elseif(((Sec-2)==DISP_LINE)||((Sec+2)==DISP_LINE)) P1=P1&0XFB; }if(Sec==DISP_LINE){P1=P1&0XE0;P0=0X00; Led1=0; Led2=0; Led3=0;} //}}/*********中斷子程序**********/voidint0()interrupt0 //使用外部中斷0{ EX0=0; BIT_timeout=1; if(ucMode==0x03) { DISP_LINE=0;//DISP_LINE_ADJ;//DISP_LINE_ADJ;//顯示列計數(shù)器(0~179)=校正值 } EX0=1; }/********************************/voidstart(void){ P1=0XFF; P2=0XFF; P0=0XFF; P3=0XFF; P4=0XFF; P5=0XFF;// uiFontNumber=(byte_read(0x0100)<<8)+byte_read(0x0101); uiFontNumber=((byte_read(0)<<8)+byte_read(1))*16;//讀取EEP立體數(shù)據(jù)總數(shù) uiFontNumber_P=((byte_read(0x3600)<<8)+byte_read(0x3601))*16;//讀取EEP平面數(shù)據(jù)總數(shù)}/***************************************/voidOS_ALLRun(void){ //BIT_timeout=1; if(BIT_timeout)//起始點 { BIT_timeout=0; if(new_code)//有紅外按鍵 { new_code=0; //Send_data(key_code); switch(key_code)//根據(jù)不同的按鍵值執(zhí)行不同的動作 { case0x07: if(ucMode==3) { if(DISP_TIME_SET<250) { DISP_TIME_SET++; //write_1302Data(DISP_TIME_adder,DISP_TIME_SET);//寫入DS1302RAM中保存 } } else { DelayTimeCount++;//單列延時時間+ } break; case0x09:// if(ucMode==3) { if(DISP_TIME_SET>80) { DISP_TIME_SET--; //write_1302Data(DISP_TIME_adder,DISP_TIME_SET);//寫入DS1302RAM中保存 } } else { if(DelayTimeCount>0)//單列延時時間- DelayTimeCount--; } break; /*********************************/ case0x0C: ucMode=0x01;//立體顯示字移動效果+靜態(tài)顯示 CR=0; TR0=0; uiCountFontNumber=0; break; case0x1C: ucMode=0x05;//立體顯示字下拉效果+靜態(tài)顯示 CR=0; TR0=0; Led3=1; uiCountFontNumber=0; break; case0x5A: ucMode=0x06;//立體顯示簡單動畫 CR=0; TR0=0; uiCountFontNumber=0; break; case0x42: ucMode=0x07;//立體顯示心型變化 CR=0; TR0=0; uiCountFontNumber=0; break; case0x52: ucMode=0x08;//笑臉變化 CR=0; TR0=0; uiCountFontNumber=0; break; case0x4A: CR=0; TR0=0; uiCountFontNumber=0; ucMode=0x09;//打印字效果 ucLine_count=0; break; case0x18: TR0=0; CR=0; Auto_Set1302(starts_time); ucMode=0x02;//數(shù)字鐘模式 break; case0x5E: DISP_TIME_SET=R1302(DISP_TIME_adder+1);//讀取單列顯示時間 if((DISP_TIME_SET>250)||(DISP_TIME_SET<80))//防止值過大 過小 { DISP_TIME_SET=170; } ucMode=0x03;//指針時鐘模式 TR0=1; CR=1; Led1=0; break; case0x08: ucMode=0x04;//平面顯示字模式 CR=0; TR0=0; break; /*********************************/ case0x40: //調(diào)時加 if(ucMode==0x02) { Set(id,1); } elseif(ucMode==0x03) { if(++DISP_LINE_ADJ>179) //盤面校正值 { DISP_LINE_ADJ=0; } write_1302Data(LINE_ADJ_adder,DISP_LINE_ADJ);//寫入DS1302RAM中保存 } break; case0x19://調(diào)時減 if(ucMode==0x02) { Set(id,0); } elseif(ucMode==0x03) { if(--DISP_LINE_ADJ==0)//盤面校正值 { DISP_LINE_ADJ=179; } write_1302Data(LINE_ADJ_adder,DISP_LINE_ADJ);//寫入DS1302RAM中保存 } break; case0x15://調(diào)時切換 if(ucMode==2) { id++; //CCAPM1=0x49;//開PCA0中斷 //CCAPM0=0x00;//關(guān)PCA1中斷 CR=1;//啟動PCA計數(shù) if(id>5) { id=0; CR=0;//關(guān)閉PCA計數(shù) // CCAPM0=0x00;//關(guān)PCA0中斷 } }// elseif(ucMode==3)// {// write_1302Data(DISP_TIME_adder,DISP_TIME_SET);//寫入DS1302RAM中保存 // } elseif((ucMode==4)||(ucMode==5)||(ucMode==1)) { Stop_move=~Stop_move; } break; case0x47://時鐘初始化 Set1302(starts_time);//初始化 W1302(0x8e,0x00);//控制命令,WP=0,寫操作 W1302(0x90,0xa5);//打淶二級?一個二級管串聯(lián)一個2K玷 write_1302Data(DISP_TIME_adder,170); break; default:break; } key_code=0; } //DelayTime=TimeCount/(ucNumRows+60); //TimeCount=0; //延時周期計數(shù)清零 switch(ucMode) { case0x01://立體顯示字移動模式 //uiCountFontNumber++; Led3=1; if(Stop_move==0)//是否暫停移動 { uiCountFontNumber++; } if(uiCountFontNumber>uiFontNumber)//uiFontNumber { uiCountFontNumber=0; } for(uiicount=uiCountFontNumber;uiicount<ucNumRows+uiCountFontNumber;uiicount++) { P2=byte_read(2+uiicount*2);//讀取內(nèi)部EEPROM字幕數(shù)據(jù)數(shù)據(jù)在2地址后所以要加上2 P4=byte_read(2+uiicount*2+1); P5=byte_read(2+uiicount*2+1)>>4; delay(1); P2=P4=P5=0XFF; if(BIT_timeout) { break; } } break; case0x05: j++; if(j>448)//根據(jù)顯示的字數(shù)定義改數(shù)值768/16=48個字顯示完48個字后重新開始 { j=0; } //由于半徑問題平面顯示一列立體要顯示兩列才夠平衡不然立體的字很寬 for(i=j;i<112+j;i++)//每轉(zhuǎn)一圈前進一列這里定義一圈中同時顯示96/16=6個字, {//在這個程序中如果此參數(shù)設(shè)置過大會造成頭吃尾的后果,如果過少盲點又會太大 //所以比較麻煩要根據(jù)電機速度來調(diào)整此參數(shù) P1=love[i*2];//字幕數(shù)據(jù)低位送顯示 P0=love[i*2+1]; //字幕數(shù)據(jù)高位送顯示//這里行和列都是IO口獨立驅(qū)動的LED P2=zimo[i*4];//送數(shù)據(jù)低位顯示 P4=zimo[i*4+1];//送數(shù)據(jù)高位顯示 這里用了單片機P4和P5口是LQFP48腳才有的 P5=zimo[i*4+1]>>4;//這里行和列都是IO口獨立驅(qū)動的LED delay(1); //延時讓LED亮起來每列延時的時間 P4=P5=0XFF; P2=zimo[i*4+2];//送數(shù)據(jù)低位顯示 P4=zimo[i*4+3];//送數(shù)據(jù)高位顯示 這里用了單片機P4和P5口是LQFP48腳才有的 P5=zimo[i*4+3]>>4;//這里行和列都是IO口獨立驅(qū)動的LED delay(1); //延時讓LED亮起來每列延時的時間 P2=0XFF; P4=P5=0XFF; P1=0XFF; P0=0XFF; } break; case0x06://立體顯示兩顆心動畫 for(k=0;k<4;k++) { for(uiicount=0;uiicount<32;uiicount++) { P2=Buff[uiicount*2]; P4=Buff[uiicount*2+1]; P5=Buff[uiicount*2+1]>>4; delay(2); P2=P4=P5=0XFF; if(BIT_timeout) { break; } } } for(k=0;k<32;k++) { Buff[k*2]=flash[uiCountFontNumber+k*2]; Buff[k*2+1]=flash[uiCountFontNumber+k*2+1]; } if(++Row>=8) { Row=0; uiCountFontNumber+=64; if(uiCountFontNumber>=192) {uiCountFontNumber=0;} } break; case0x07://立體顯示心形動畫 for(k=0;k<4;k++) { for(uiicount=0;uiicount<32;uiicount++) { P2=Buff[uiicount*2]; P4=Buff[uiicount*2+1]; P5=Buff[uiicount*2+1]>>4; delay(2); P2=P4=P5=0XFF; if(BIT_timeout) { break; } } } for(k=0;k<32;k++) { Buff[k*2]=xinxing[uiCountFontNumber+k*2]; Buff[k*2+1]=xinxing[uiCountFontNumber+k*2+1]; } if(++Row>=8) { Row=0; uiCountFontNumber+=64; if(uiCountFontNumber>=576) {uiCountFontNumber=0;} } break; case0x08://立體顯示笑臉動畫 for(k=0;k<4;k++) { for(uiicount=0;uiicount<32;uiicount++) { P2=Buff[uiicount*2]; P4=Buff[uiicount*2+1]; P5=Buff[uiicount*2+1]>>4; delay(2); P2=P4=P5=0XFF; if(BIT_timeout) { break; } } } for(k=0;k<32;k++) { Buff[k*2]=xiaolian[uiCountFontNumber+k*2]; Buff[k*2+1]=xiaolian[uiCountFontNumber+k*2+1]; } if(++Row>=15) { Row=0; uiCountFontNumber+=64; if(uiCountFontNumber>=256) {uiCountFontNumber=0;} } break; case0x09://打印字效果 for(uiicount=0;uiicount<176;uiicount++) { P2=Buff[uiicount*2]; P4=Buff[uiicount*2+1]; P5=Buff[uiicount*2+1]>>4; delay(1); P2=P4=P5=0XFF; if(BIT_timeout) { break; } } ucline=0; for(k=0;k<176;k++) { if(k<ucLine_count) { Buff[k*2]=qinaide[uiCountFontNumber+k*2]; Buff[k*2+1]=qinaide[uiCountFontNumber+k*2+1]; } elseif(k<(ucLine_count+16)) { if((bDot==1)&&(ucLine_count==160)) { Buff[k*2]=0XFF; Buff[k*2+1]=0XFF; } else { Buff[k*2]=line[ucline++]; Buff[k*2+1]=line[ucline++]; } } else { Buff[k*2]=0XFF;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 熊貓吃竹子作文400字(13篇)
- 獨家文化創(chuàng)意產(chǎn)品開發(fā)承諾函(7篇)
- 2026及未來5年中國紫外線技術(shù)應用行業(yè)市場競爭現(xiàn)狀及未來趨勢研判報告
- 2026年及未來5年中國工業(yè)清潔設(shè)備市場運行態(tài)勢及行業(yè)發(fā)展前景預測報告
- 跨境合作信譽保證函(5篇)
- 天馬行空的宇宙之旅想象作文(9篇)
- 統(tǒng)辦樓門衛(wèi)值班制度規(guī)范
- 如何規(guī)范車場停車制度
- 醫(yī)院醫(yī)保規(guī)范處置制度
- 企業(yè)內(nèi)部控制規(guī)范制度
- 2025成人腸造口護理指南課件
- 電焊工安全宣講課件
- 水泵基礎(chǔ)知識培訓課件教學
- 內(nèi)鏡院感培訓課件
- 2026中征(北京)征信有限責任公司招聘13人考試題庫附答案
- 期末重點易錯知識點復習(課件)-2025-2026學年一年級上冊數(shù)學北師大版
- 2026年楊凌職業(yè)技術(shù)學院單招職業(yè)技能考試題庫含答案詳解
- 2025云南昆明元朔建設(shè)發(fā)展有限公司第二批收費員招聘9人筆試考試參考題庫及答案解析
- 國開本科《國際法》期末真題及答案2025年
- 2025年榆林神木市信息產(chǎn)業(yè)發(fā)展集團招聘備考題庫(35人)及完整答案詳解1套
- 2026年中考作文備考之10篇高分考場范文
評論
0/150
提交評論