基于51系列單片機(jī)的led旋轉(zhuǎn)顯示器_第1頁(yè)
基于51系列單片機(jī)的led旋轉(zhuǎn)顯示器_第2頁(yè)
基于51系列單片機(jī)的led旋轉(zhuǎn)顯示器_第3頁(yè)
基于51系列單片機(jī)的led旋轉(zhuǎn)顯示器_第4頁(yè)
基于51系列單片機(jī)的led旋轉(zhuǎn)顯示器_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、. . . . 題目:基于51單片機(jī)的LED旋轉(zhuǎn)顯示器LED旋轉(zhuǎn)顯示器LED旋轉(zhuǎn)顯示器的設(shè)計(jì)摘要LED旋轉(zhuǎn)顯示器時(shí)基于視覺暫留原理,開發(fā)的一種旋轉(zhuǎn)式LED顯示屏。其在具有一定轉(zhuǎn)速地載體上安裝16個(gè)LED發(fā)光器件,各LED發(fā)光管等間距排位一條直線,隨著旋轉(zhuǎn)速度的加快,在計(jì)算機(jī)軟件精確的時(shí)序控制下,不斷掃描出預(yù)設(shè)的文字,圖案等。使用一個(gè)光耦(U型槽的紅外對(duì)管)作為定位傳感器,當(dāng)旋轉(zhuǎn)一周時(shí),擋光板遮擋光源,光敏三極管的集電極輸出高電平,當(dāng)離開擋光板時(shí),集電極再次輸出低電平,從而給單片機(jī)一個(gè)下降沿的跳變型號(hào),產(chǎn)生一個(gè)中斷,從而更新顯示。供電部分,因?yàn)檎麄€(gè)裝置是在不停的高速旋轉(zhuǎn)當(dāng)中,所以我們做了一個(gè)簡(jiǎn)單

2、的電刷裝置,把220V的交流電通過變壓器變成12V的交流電,再由橋式整流電路,和濾波電路,變?yōu)槠交闹绷麟?,最后通過7805芯片輸出我們需要的5V直流電源,通過電刷把電源和指針板上的單片機(jī)連接為其供電。而旋體因?yàn)樾枰?2V的電壓源,所以采用分別供電的方式。關(guān)鍵字: LED, 視覺暫留,直流電機(jī),橋式整流,旋轉(zhuǎn)。目 錄摘要II1 LED旋轉(zhuǎn)顯示器在實(shí)際中的意義12 顯示原理23 系統(tǒng)硬件電路的設(shè)計(jì)33.1 系統(tǒng)硬件框圖33.2 系統(tǒng)硬件原理圖33.3 光耦傳感器模塊的設(shè)計(jì)43.4 遙控模塊的設(shè)計(jì)43.5 顯示模塊的設(shè)計(jì)73.6 電源模塊的設(shè)計(jì)73.7 指針板的制作94程序的設(shè)計(jì)104.1 程序設(shè)

3、計(jì)的分析104.2 各模塊程序的流程圖與功能說明114.2.1.MAIN函數(shù)部分114.2.2.外部中斷0服務(wù)程序部分(void INT00(void)interrupt 0)114.2.3定時(shí)器T0中斷服務(wù)程序(void kjp_test(void)interrupt 1)124.2.4定時(shí)器T1中斷服務(wù)程序(void Time_luoji()interrupt 3)124.3完整的C程序135 作品的改進(jìn)215.1遙控器部分215.2時(shí)鐘芯片的部分21- 1 - / 251 LED旋轉(zhuǎn)顯示器在實(shí)際中的意義LED的特點(diǎn)非常明顯,壽命長(zhǎng)、光效高、無(wú)輻射與低功耗。LED的光譜幾乎全部集中于可見光

4、頻段,其發(fā)光效率可達(dá)8090%。將LED與普通白熾燈、螺旋節(jié)能燈與T5三基色熒光燈進(jìn)行對(duì)比,結(jié)果顯示:普通白熾燈的光效為12lmW,壽命小于2000小時(shí),螺旋節(jié)能燈的光效為60lmW,壽命小于8000小時(shí),T5熒光燈則為96lmW,壽命大約為10000小時(shí),而直徑為5毫米的白光LED為2028lmW,壽命可大于100000小時(shí)。有人還預(yù)測(cè),未來的LED壽命上限將無(wú)窮大。由于LED的種種優(yōu)勢(shì),使得其在現(xiàn)在的各個(gè)領(lǐng)域里運(yùn)用越來越廣泛,我們?cè)O(shè)計(jì)的旋轉(zhuǎn)LED顯示屏幕,具有結(jié)構(gòu)新穎,節(jié)約材料的特點(diǎn),一列16個(gè)LED燈旋轉(zhuǎn)顯示之后,可以代替顯示近似于16x180像素的顯示寬度和容,我想以后不斷完善和改進(jìn)之

5、后應(yīng)該可以在燈箱廣告和兒童玩具方面有一定的發(fā)展空間。2 顯示原理旋轉(zhuǎn)時(shí)鐘是利用視覺暫留效應(yīng)設(shè)計(jì)出來的,物體在快速運(yùn)動(dòng)時(shí), 當(dāng)人眼所看到的影像消失后,人眼仍能繼續(xù)保留其影像0.1-0.4秒左右的圖像,這種現(xiàn)象被稱為視覺暫留現(xiàn)象。是人眼具有的一種性質(zhì)。人眼觀看物體時(shí),成像于視網(wǎng)膜上,并由視神經(jīng)輸入人腦,感覺到物體的像。但當(dāng)物體移去時(shí),視神經(jīng)對(duì)物體的印象不會(huì)立即消失,而要延續(xù)0.1 -0.4秒的時(shí)間,人眼的這種性質(zhì)被稱為“眼睛的視覺暫留”。假設(shè)我們?cè)O(shè)定我們的眼睛的暫留時(shí)間是0.4秒,如果我們的16個(gè)LED旋轉(zhuǎn)一周的時(shí)間快過0.4秒,那么我們看到的圖像就是這一列LED在各個(gè)位置顯示的圖像的疊加,如右圖

6、,如果我們用定時(shí)器把LED旋轉(zhuǎn)一周的各個(gè)位置分割出180分,讓它在相應(yīng)的位置顯示相應(yīng)的圖像,那么我們就可以得到一個(gè)累加的圖像效果了。12V電源5V電源3 系統(tǒng)硬件電路的設(shè)計(jì)3.1 系統(tǒng)硬件框圖系統(tǒng)硬件框圖右圖所示。直流電機(jī)單片機(jī)STC89C52LED顯示光耦傳感器3.2 系統(tǒng)硬件原理圖系統(tǒng)硬件原理如下圖所示。3.3 光耦傳感器模塊的設(shè)計(jì)對(duì)射式U型槽光耦具有,響應(yīng)速度快,驅(qū)動(dòng)簡(jiǎn)單,安裝容易,容易于單片機(jī)通信等特點(diǎn)。如圖所示,當(dāng)上電之后,光耦的光敏三極管的集電極時(shí)輸出低電平,當(dāng)有物體擋住了光敏三極管感應(yīng)的紅外光線時(shí),光敏三極管的集電極和發(fā)射極處于高阻態(tài),所以集電極輸出高電平,當(dāng)光敏三極管再次感應(yīng)到

7、紅外光源的時(shí)候,集電極再次輸出低電平,從而給單片機(jī)一個(gè)中斷信號(hào)。3.4 遙控模塊的設(shè)計(jì)3.4.1.遙控接收硬件部分遙控模塊部分,我們選擇了一個(gè)市面上最常見的一種紅外遙控接收頭,把它的信號(hào)引腳直接接在單片機(jī)的外部中斷1的借口上(P3.3),然后,遙控器,我們用了一個(gè)以前用的CD播放器的一個(gè)遙控器。接收頭如圖3.4.2.遙控編碼特點(diǎn)我們采用的遙控器是脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進(jìn)制的“1”,其波形如圖2所示。上述“0”和“1”組成的32位二進(jìn)制碼經(jīng)

8、38kHz的載頻進(jìn)行二次調(diào)制以提高發(fā)射效率,達(dá)到降低電源功耗的目的。然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射,如圖3所示,連發(fā)波形如圖4所示。UPD6121G產(chǎn)生的遙控編碼是連續(xù)的32位二進(jìn)制碼組,其中前16位為用戶識(shí)別碼,能區(qū)別不同的電器設(shè)備,防止不同機(jī)種遙控碼互相干擾。該芯片的用戶識(shí)別碼固定為十六進(jìn)制01H;后16位為8位操作碼(功能碼)與其反碼。UPD6121G最多額128種不同組合的編碼。當(dāng)遙控器在按鍵按下后,周期性地發(fā)出同一種32位二進(jìn)制碼,周期約為108ms。一組碼本身的持續(xù)時(shí)間隨它包含的二進(jìn)制“0”和“1”的個(gè)數(shù)不同而不同,大約在4563ms之間,圖4為發(fā)射波形圖。當(dāng)一個(gè)鍵按

9、下超過36ms,振蕩器使芯片激活,將發(fā)射一組108ms的編碼脈沖,這108ms發(fā)射代碼由一個(gè)起始碼(9ms),一個(gè)結(jié)果碼(4.5ms),低8位地址碼(9ms18ms),高8位地址碼(9ms18ms),8位數(shù)據(jù)碼(9ms18ms)和這8位數(shù)據(jù)的反碼(9ms18ms)組成。如果鍵按下超過108ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼)將僅由起始碼(9ms)和結(jié)束碼(2.5ms)組成。代碼格式(以接收代碼為準(zhǔn),接收代碼與發(fā)射代碼反向)位定義單發(fā)代碼格式連發(fā)代碼格式3.4.3.遙控解碼解碼的關(guān)鍵是如何識(shí)別“0”和“1”,從位的定義我們可以發(fā)現(xiàn)“0”、“1”均以0.56ms的低電平開始,不同的是高電平的

10、寬度不同,“0”為0.56ms,“1”為1.68ms,所以必須根據(jù)高電平的寬度區(qū)別“0”和“1”。如果從0.56ms低電平過后,開始延時(shí),0.56ms以后,若讀到的電平為低,說明該位為“0”,反之則為“1”,為了可靠起見,延時(shí)必須比0.56ms長(zhǎng)些,但又不能超過1.12ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此取(1.12ms+0.56ms)/2=0.84ms最為可靠,一般取0.84ms左右均可。根據(jù)碼的格式,應(yīng)該等待9ms的起始碼和4.5ms的結(jié)果碼完成后才能讀碼。P0.0P0.2P0.3P0.4P0.5P0.6P0.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6

11、P1.73.5 顯示模塊的設(shè)計(jì)LED顯示器具有功耗低,接口控制方便等優(yōu)點(diǎn),而且模塊的接口信號(hào)和操作指令具有廣泛的兼容性,并能直接與單片機(jī)接口,可方便地實(shí)現(xiàn)各種不同的操作,在各類測(cè)量與控制儀表中被廣泛的應(yīng)用。當(dāng)在LED上顯示漢字時(shí),應(yīng)先取得漢字的點(diǎn)陣構(gòu)成數(shù)據(jù),然后將其寫入顯示存儲(chǔ)器中進(jìn)行顯示。旋轉(zhuǎn)LED顯示器是一種通過同步控制發(fā)光二極位置和點(diǎn)亮狀態(tài)來實(shí)現(xiàn)圖文顯示的新型顯示器,其結(jié)構(gòu)新穎,成本低廉,可視角度達(dá)360°。本設(shè)計(jì)采用16個(gè)并排發(fā)光二極管,利用人眼的“視覺暫留效應(yīng)”顯示文字與圖案。顯示模塊如圖1.8所示。圖 1.8 顯示模塊框圖3.6 電源模塊的設(shè)計(jì)電網(wǎng)提供的交流電源經(jīng)過整流、

12、濾波,可得到直流電壓,但此電壓仍然存在波紋。同時(shí),由于交流電網(wǎng)電壓的波動(dòng),負(fù)載的變化和溫度的影響等,使輸出電壓紋波會(huì)更大,即輸出電流電壓不穩(wěn)定。為了得到穩(wěn)定的輸出電壓,在濾波電路與負(fù)載之間常常加入穩(wěn)壓電路,以使負(fù)載得穩(wěn)定的輸出電壓。通過上面的分析可知,直流穩(wěn)壓電源主要由變壓器、整流電路、濾波電路和穩(wěn)壓電路四大部分組成。直流穩(wěn)壓電路組成框圖如圖1.10所示。圖1.10 直流穩(wěn)壓電源的組成框圖橋式整流濾波電路如圖1.11所示。+5V3217805圖1.11 橋式整流濾波電路220V交流電壓經(jīng)過變壓器輸出為12V交流電壓,再經(jīng)過橋式整流成為單向脈沖電壓,再經(jīng)過濾波電路成為比較平穩(wěn)的直流電壓,最后通過

13、7805穩(wěn)壓成輸出穩(wěn)定的5V直流電。7805引腳圖如圖1.12所示。圖1.12 7805引腳圖對(duì)于7805三端穩(wěn)壓IC,它和其它78XX一樣,都屬于+V電壓穩(wěn)壓輸出鏈路。其1腳為輸入端,2腳接地,3腳穩(wěn)壓輸出。7805是正電壓三端固定穩(wěn)壓器集成電路,屬于線性穩(wěn)壓器件。7806應(yīng)用非常廣泛,在各種穩(wěn)壓電源、充電器、家電等產(chǎn)品中均有運(yùn)用。主要參數(shù):最高輸入電壓:36V最大輸出電流:1.5A。輸出電壓偏差:典型=5V;最低=4.75V;最高=5.25V。工作溫度圍:070 。AAAAAAAA A圖A圖3.7 指針板的制作3.7.1.指針板,由于為了使指針板的體積減小,減少飛線的發(fā)生,所以指針板,我們

14、選擇用PORTEL 99SE設(shè)計(jì),然后用手工制作PCB板的方式制作。首先我們?cè)赑ORTEL 99SE軟件上設(shè)計(jì)出原理圖的PCB文件,然后,把它的頂層信號(hào)層和底層信號(hào)層分別打印到光華的不干膠紙上面,如圖A. B圖3.7.2 將打印好的不干膠紙兩面的各個(gè)過孔對(duì)齊,然后把清洗干凈且剪裁大小合理的雙面覆銅板夾在兩不干膠紙之間,然后用電熨斗壓在上面加熱轉(zhuǎn)印,讓附著在不干膠紙上面的碳粉完全受熱融化后轉(zhuǎn)印到雙面覆銅板上面。如圖B。 C圖 3.7.3.然后把轉(zhuǎn)印好的覆銅板放入三氯化鐵溶液中腐蝕,三氯化鐵溶液會(huì)把沒有碳粉的所有銅箔都腐蝕掉,留下有碳粉的部分,就是PCB的信號(hào)線路圖了,腐蝕過程圖如圖C。3.7.

15、D圖4 等待的時(shí)候可以不停的搖晃容器,加速腐蝕過程,等到把所有沒有覆銅的部分全部腐蝕之后,不覆銅板拿出溶液清洗,然后剪裁掉多余的部分,打孔之后就可以焊接元件了。見D圖。4程序的設(shè)計(jì)4.1 程序設(shè)計(jì)的分析程序部分剛剛開始想了很久都沒有想到上面好的辦法,后來,還是決定去網(wǎng)絡(luò)上找找資料,看了很多程序后,總算有了一點(diǎn)自己的感悟,最讓人頭疼的是,用上面方法把電機(jī)轉(zhuǎn)一周的各個(gè)位置分成360分來送顯示,看到有的人說“先測(cè)得電機(jī)轉(zhuǎn)一周的時(shí)間,然后除以360就行了”,但是我覺得這樣做首先在程序上比較難實(shí)現(xiàn),而且這樣還有一個(gè)問題就是,如果這樣,那么我們顯示的標(biāo)準(zhǔn)總是以前面一周的轉(zhuǎn)速為基準(zhǔn)的。不太科學(xué),放棄了。后來

16、又看到一個(gè)方法,他們是把程序?qū)懞弥蟛煌5牟鹦墩{(diào)試,知道用來控制顯示的總段服務(wù)程序的初值大概讓其顯示穩(wěn)定就把初值固定下來,這樣做,首先我想到,如果電機(jī)轉(zhuǎn)速時(shí)快時(shí)慢,那么顯示的字或者圖案就會(huì)被拉長(zhǎng)或者壓段,而且這樣我也不能真正很準(zhǔn)確的吧一周分成360個(gè)顯示單位,還是不科學(xué),再次放棄了。后來反復(fù)思考,總算找到一個(gè)解決這個(gè)問題的好辦法。通過思考,我發(fā)現(xiàn)需要讓LED的閃亮頻率與旋轉(zhuǎn)的頻率同步,所以采用了自適應(yīng)的算法,自適應(yīng)調(diào)節(jié)的算法的思想就是在外部中斷處理程序里,先給定時(shí)器T0一個(gè)合適的初始值,通過定時(shí)器T0處理程序給T0的中斷的次數(shù)計(jì)數(shù),當(dāng)旋轉(zhuǎn)一周完成后,根據(jù)實(shí)際中斷次數(shù)與預(yù)設(shè)的N比較,根據(jù)比較結(jié)果

17、,在外部中斷處理程序中對(duì)T0的初設(shè)值進(jìn)行修正,直到定時(shí)器T0的中斷次數(shù)達(dá)到N為止。如此一來就如同有一個(gè)反饋信號(hào)一樣,在不停的反饋的調(diào)節(jié)定時(shí)器的初值,旋轉(zhuǎn)一周所產(chǎn)生的終端次數(shù)始終保持在我設(shè)定的一個(gè)值里面,這樣我就可以很方便的設(shè)定在某一個(gè)位置顯示上面類容了,而且整個(gè)調(diào)節(jié)過程是動(dòng)態(tài)的,程序中并不需要知道旋轉(zhuǎn)一周的具體時(shí)間值。算法用了一個(gè)很簡(jiǎn)單的數(shù)學(xué)公式:D=D+(S-N)其中N為預(yù)設(shè)的固定值。 當(dāng)S>N時(shí),修正值D增大,使定時(shí)器T0的時(shí)間值增大,隨之N值減小。 當(dāng)S<N時(shí),修正值D減小,使定時(shí)器T0的時(shí)間值減小,隨之N值增大。 當(dāng)S=N時(shí),修正值不產(chǎn)生變化。附上大概的自適應(yīng)算法的框架:/

18、*外部中斷0處理函數(shù)*/ void intersvr0(void) interrupt 0 using 1 D= D+(S-N)*2; /修正值 Pt= Pt+D; /得到定時(shí)器T0的初設(shè)值 S= 0; /計(jì)數(shù)器清零,將重新計(jì)數(shù) /*定時(shí)中斷0處理函數(shù)*/ void timer0(void) interrupt 1 using 1 TH0=-Pt/256;TL0=-Pt%256; /設(shè)置定時(shí)器T0的初設(shè)值 S+; /計(jì)數(shù) 這樣一來,顯示穩(wěn)定的問題解決了,但是這個(gè)定時(shí)器T0因?yàn)槌踔禃r(shí)不確定的,所以不能再用它作為時(shí)間跳動(dòng)的定時(shí)器計(jì)數(shù)了,因此時(shí)間的邏輯要用T1單獨(dú)來實(shí)現(xiàn)。4.2 各模塊程序的流程圖與

19、功能說明4.2.1.MAIN函數(shù)部分Main函數(shù)主要是用來初始化各個(gè)函數(shù),然后進(jìn)入空指令的死循環(huán),這樣來等待其他中斷的來臨,顯示部分在中斷服務(wù)程序中實(shí)現(xiàn),參看右流程圖4.2.2.外部中斷0服務(wù)程序部分(void INT00(void)interrupt 0)外部中斷0主要用于顯示更新和定位用以與校正定時(shí)器T0的初值,所以我們?cè)谟布糠旨恿艘粋€(gè)光耦來給外部中斷0提供中斷信號(hào),當(dāng)旋轉(zhuǎn)一周就會(huì)產(chǎn)生一個(gè)中斷,當(dāng)中斷出現(xiàn)的時(shí)候,中斷服務(wù)程序就會(huì)把這一周實(shí)際的T0中斷次數(shù)與設(shè)定的值對(duì)比,然后校正T0的初值,最后,把各個(gè)顯示數(shù)據(jù)清零,達(dá)到更新顯示和定位的目的,詳細(xì)參看右流程圖。4.2.3定時(shí)器T0中斷服務(wù)程

20、序(void kjp_test(void)interrupt 1)定時(shí)器T0的終端服務(wù)程序主要是為了把旋轉(zhuǎn)一周的各個(gè)位置分為180分,這樣方便顯示和確定顯示位置與顯示容。在T0的中斷服務(wù)程序中,首先重新給T0賦校正后的初值,然后判斷當(dāng)前的T0中斷次數(shù),與確定當(dāng)前顯示的位置,然后再判斷是否改送顯示,如果要送顯示,則調(diào)用相應(yīng)的現(xiàn)實(shí)之程序,然后T0中斷次數(shù)自加一,最后跳出中斷,詳細(xì)參看右流程圖4.2.4定時(shí)器T1中斷服務(wù)程序(void Time_luoji()interrupt 3)因?yàn)樯厦娴腡0的初值不是固定的,所以我們不能再使用T0用做時(shí)間運(yùn)行的標(biāo)準(zhǔn),要不時(shí)間會(huì)時(shí)快是慢,所以這里我們使用了T1作

21、為時(shí)間的運(yùn)行標(biāo)準(zhǔn),我們給T1的定時(shí)為20毫秒,當(dāng)產(chǎn)生50個(gè)中斷,就是一秒鐘,所以50個(gè)中斷,時(shí)間秒的值加1。詳細(xì)參看流程圖。4.3完整的C程序#include<reg52.h>unsigned char code shuzi_08=0x82,0x7C,0x7C,0x7C,0x7C,0x7C,0x82,0xfe;/*"0",0*/unsigned char code shuzi_18=0xfe,0x7e,0x7a,0x00,0x7e,0x7e,0xfe,0xfe;/*"1",1*/unsigned char code shuzi_28=0x3a

22、,0x3c,0x5c,0x5c,0x6c,0x6c,0x72,0xfe;/*"2",2*/unsigned char code shuzi_38=0xba,0x7c,0x7c,0x6c,0x6c,0x6c,0x92,0xfe;/*"3",3*/unsigned char code shuzi_48=0x9e,0xae,0xb6,0xba,0x00,0xbe,0xbe,0xfe;/*"4",4*/unsigned char code shuzi_58=0xa0,0x6c,0x6c,0x6c,0x6c,0x6c,0x9c,0xfe;/*&

23、quot;5",5*/unsigned char code shuzi_68=0x82,0x6c,0x6c,0x6c,0x6c,0x6c,0x9a,0xfe;/*"6",6*/unsigned char code shuzi_78=0xfc,0xfc,0xfc,0x0c,0xf4,0xf8,0xfc,0xfe;/*"7",7*/unsigned char code shuzi_88=0x92,0x6c,0x6c,0x6c,0x6c,0x6c,0x92,0xfe;/*"8",8*/unsigned char code shuz

24、i_98=0xb2,0x6c,0x6c,0x6c,0x6c,0x6c,0x82,0xfe;/*"9",9*/unsigned char codefuhao_A8=0xfe,0xfe,0xbb,0xbb,0xfe,0xfe,0xfe,0xfe;/*":",10*/*/unsigned char code hanzi_a216=0xf7,0x37,0x47,0x70,0x17,0x73,0xb7,0xbd,0xdd,0xdd,0xed,0xe5,0xc9,0xdd,0xbf,0xff,0xf7,0xe7,0xf7,0xf7,0x00,0xfb,0xbb,0x

25、bd,0xbd,0xbd,0x81,0xbd,0xbc,0x9d,0xbf,0xff;/*輕*/unsigned char code hanzi_b216=0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x03,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0xff,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xc0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xff;/*工*/unsigned char code hanzi_c216=0xfb,0xcb,0x3d,0xfb,0x3b,0x

26、c3,0xdf,0xef,0xf0,0x17,0xf7,0xf7,0xd7,0xe7,0xff,0xff,0xef,0xf7,0xf9,0xfe,0x7d,0x73,0xbf,0xcf,0xf3,0xfc,0xf3,0xef,0x9f,0x3f,0xbf,0xff;/*歡*/unsigned char code hanzi_d216=0xbf,0xbd,0xbb,0x37,0xff,0x03,0xfb,0xfd,0x7d,0x03,0xfb,0xfb,0xfb,0x01,0xfb,0xff,0xff,0xbf,0xdf,0xe0,0xdf,0xb8,0xbd,0xbe,0xbf,0x80,0x

27、bf,0xbd,0xbb,0x9c,0xdf,0xff;/*迎*/unsigned char code hanzi_e216=0xbf,0xdf,0xef,0x03,0xdc,0xef,0x73,0x98,0xfb,0x0b,0xfb,0xbb,0x6b,0x73,0xff,0xff,0xbf,0xcf,0xff,0x88,0x7f,0x7e,0x77,0x6d,0x4b,0x7c,0x7f,0x1f,0xff,0xee,0x9f,0xff;/*您*/unsigned int Tcz,s=0,bt=0;/s表示中斷次數(shù) ,Tcz表示定時(shí)器TO的初值unsigned char iDex=0,hi

28、Dex=0;/控制字母和漢字的碼值具體位數(shù)unsigned char Hour=10,Minute=15,Second=45,Hour_Flag=0,buffer=0;void hanzi_Show(unsigned char m);void Time_Show(unsigned char m);/數(shù)字0-9加:顯示函數(shù)void Time_Amend();/時(shí)間邏輯控制函數(shù)void Hour_Display();/小時(shí)顯示函數(shù)void Minute_Display();/分鐘顯示函數(shù)void Second_Display();/秒鐘顯示函數(shù)void A_Display();/“:”顯示函數(shù)vo

29、id Init();/初始化函數(shù)int k=0;void INT00(void)interrupt 0 /外部中斷服務(wù)函數(shù),定位更新顯示和定時(shí)器0初值校正 k=k+(s-180); /k為校正值,當(dāng)定時(shí)中斷過快,K 變大,Tcz同時(shí)變大;Tcz=Tcz+k; /Tcz是用來給定時(shí)器T0賦初值的,通過這個(gè)公式來校正T0的初值,iDex=0; /iDex值清零,防止調(diào)用顯示子函數(shù)中時(shí)的值不同步,出現(xiàn)亂碼hiDex=0; /hiDex值清零,防止調(diào)用顯示子函數(shù)中時(shí)的值不同步,出現(xiàn)亂碼s=0;/定時(shí)器中斷次數(shù)清零,更新顯示第二周 說明:因?yàn)橛昧诵U踔档姆椒?,所以?dāng)旋轉(zhuǎn)穩(wěn)定下來的時(shí)候,旋轉(zhuǎn)一周的中斷次

30、數(shù)就是我預(yù)設(shè)的180次,這樣一來,旋轉(zhuǎn)的位置就和我中斷的次數(shù)是同步的,他們是正比的關(guān)系,顯示的角度也就是中斷次數(shù)乘以2的值,與“顯示角度=S*2”;因此,這里可以用中斷的當(dāng)前次數(shù)來判斷顯示的位置。void kjp_test(void)interrupt 1 /定時(shí)器中斷0中斷服務(wù)程序。用于判斷顯示位置,和/控制顯示TH0=(-Tcz)/256; /把校正后的值給定時(shí)器T0賦值TL0=(-Tcz)%256;if(buffer=0) /判斷buffer的值,確定顯示上面容 /顯示模式選擇,0為數(shù)字式時(shí)鐘if(iDex>=8)iDex=0;if(s<16) /判斷T0的終端次數(shù),是否小于

31、16 Hour_Display(); /小于16,調(diào)用顯示“小時(shí)值”的子函數(shù)if(s>=16&&s<24) /判斷T0的中斷次數(shù)是否大于16且小于24A_Display(); /是則調(diào)用顯示“:”的子函數(shù)if(s>=24&&s<40) /判斷位置, Minute_Display(); /調(diào)用顯示“分鐘值”的子函數(shù)if(s>=40&&s<48) /判斷位置, A_Display(); /調(diào)用顯示“:”的子函數(shù)if(s>=48&&s<64) /判斷位置 Second_Display();

32、 /調(diào)用顯示“秒鐘值”的子函數(shù)if(s>=64) /判斷位置P0=0xfe;P2=0xff; /關(guān)閉所有LEDif(buffer=1) /判斷buffer的值,確定顯示容,1為顯示“輕工歡迎您”if(hiDex>=16)hiDex=0;if(s<16) /判斷位置是否在0-32度之間hanzi_Show(0); /調(diào)用顯示“輕”的子函數(shù)if(s>=16&&s<32) /判斷位置是否在32-64度之間hanzi_Show(1); /調(diào)用顯示“工”的子函數(shù)if(s>=32&&s<48) /判斷位置是否在64-96度之間han

33、zi_Show(2); /調(diào)用顯示“歡”的子函數(shù)if(s>=48&&s<64) /判斷位置是否在96-128度之間hanzi_Show(3); /調(diào)用顯示“迎”的子函數(shù)if(s>=64&&s<80) /判斷位置是否在128-160度之間hanzi_Show(4); /調(diào)用顯示“您”的子函數(shù)if(s>=80) /判斷位置是否大于160度P0=0xff;P2=0xff; /關(guān)閉所有顯示s+; /定時(shí)器T0中斷次數(shù)加1void Time_luoji()interrupt 3 /定時(shí)器T1中斷服務(wù)程序,用于控制秒鐘的跳動(dòng)。TH1=(6553

34、5-20000)/256; /給定時(shí)器T1賦初值,定時(shí)20毫秒TL1=(65535-20000)%256;bt+; /定時(shí)器中斷次數(shù)加1if(bt=50) /判斷T1中斷次數(shù)是否到了50,與判斷一秒定時(shí)到了沒有bt=0; /定時(shí)器T1中斷次數(shù)清零,為下一秒做準(zhǔn)備Second+; /秒鐘值加1Time_Amend(); /調(diào)用時(shí)間控制的邏輯子函數(shù),讓秒鐘到60分鐘加1。類推顯示數(shù)字子函數(shù),用來顯示某個(gè)數(shù)字或“:”編碼表中的某一個(gè)編碼值,調(diào)用一次顯示一個(gè)編碼,然后iDex自加1,為下一次調(diào)用依次顯示下一個(gè)編碼做準(zhǔn)備;void Time_Show(unsigned char m)switch (m)

35、case 0 :P0=0xff; P0=shuzi_0iDex;iDex+;P2=0xff;break;/顯示1case 1 :P0=0xff; P0=shuzi_1iDex;iDex+;P2=0xff;break; /顯示2case 2 :P0=0xff; P0=shuzi_2iDex;iDex+;P2=0xff;break;/顯示3case 3 :P0=0xff; P0=shuzi_3iDex;iDex+;P2=0xff;break; /顯示4case 4 :P0=0xff; P0=shuzi_4iDex;iDex+;P2=0xff;break;/顯示5case 5 :P0=0xff; P

36、0=shuzi_5iDex;iDex+;P2=0xff;break; /顯示6case 6 :P0=0xff; P0=shuzi_6iDex;iDex+;P2=0xff;break; /顯示7case 7 :P0=0xff; P0=shuzi_7iDex;iDex+;P2=0xff;break; /顯示8case 8 :P0=0xff; P0=shuzi_8iDex;iDex+;P2=0xff;break; /顯示9case 9 :P0=0xff; P0=shuzi_9iDex;iDex+;P2=0xff;break; /顯示0case 10 :P0=0xff; P0=fuhao_AiDex;

37、iDex+;P2=0xff;break; /顯示:顯示漢字子函數(shù),用來顯示某一漢字在漢字編碼表中的某個(gè)編碼值,調(diào)用一次顯示一個(gè)編碼,然后hiDex自加1,為下次調(diào)用依次顯示后一個(gè)編碼做準(zhǔn)備void hanzi_Show(unsigned char m)switch (m)case 0 :P0=0xff; P0=hanzi_a0hiDex;P2=0xff;P2=hanzi_a1hiDex;hiDex+;break;/輕case 1 :P0=0xff; P0=hanzi_b0hiDex;P2=0xff;P2=hanzi_b1hiDex;hiDex+;break; /工case 2 :P0=0xff

38、; P0=hanzi_c0hiDex;P2=0xff;P2=hanzi_c1hiDex;hiDex+;break;/歡case 3 :P0=0xff; P0=hanzi_d0hiDex;P2=0xff;P2=hanzi_d1hiDex;hiDex+;break;/迎case 4 :P0=0xff; P0=hanzi_e0hiDex;P2=0xff;P2=hanzi_e1hiDex;hiDex+;break;/您void A_Display() /顯示“:”的子函數(shù)Time_Show(10); /調(diào)用顯示數(shù)字子函數(shù),void Hour_Display()/顯示“小時(shí)值”的子程序unsigned char m=0,n=0;m=Hour/10; /把hour值求模,得到十位值n=Hour%10; /把hour值求余,得到各位值if(s<8)Time_Show(m); /調(diào)用顯示數(shù)字子函數(shù),顯示十位。elseTime_Show(n); /調(diào)用顯示數(shù)字子函數(shù),顯示個(gè)位void Minute_Display

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論