版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 1 引 言</b></p><p><b> 1.1系統(tǒng)設(shè)計要求</b></p><p> 設(shè)計并制作一個依靠搖動能顯示字符、圖形的LED顯示棒。</p><p> 系統(tǒng)設(shè)計的基本要求:</p><p> 設(shè)計一個基于LED的顯示棒,其中LED燈必須呈線狀排列,
2、并至少使用16只,系統(tǒng)采用電池供電,搖動顯示棒時形成的亮燈扇形區(qū)域能讓人分辨出字符“A”、文字“電” 以及國際奧委會五環(huán)圖形,并用按鍵實現(xiàn)顯示的切換。</p><p> 系統(tǒng)設(shè)計的發(fā)揮部分:</p><p> 搖動顯示棒時形成的亮燈扇形區(qū)域能夠讓人分辨出英文單詞“Welcome”、漢字詞組“美亞”和北京奧運(yùn)會會徽圖形,并適當(dāng)增加設(shè)計特色與創(chuàng)新。</p><p>
3、 1.2 系統(tǒng)設(shè)計思路及特點</p><p> 該LED顯示棒搖動時顯現(xiàn)的字符或圖形由LED燈顯示,LED燈成線狀排列,每個瞬間線陣只能顯示數(shù)字編碼后的文字或圖形的一列,利用人眼的視覺暫留原理,將需要顯示的字符或圖形分成N列(N≥16),一般人手左右擺動的頻率為幾赫茲到十幾赫茲,因此,通過單片機(jī)控制LED線陣以一較低頻率掃描顯示字符或圖形的每一列,擺動顯示棒時即可因視覺暫留看出顯示的字符或圖形;左右擺動一次通
4、過端口電平變化,調(diào)用相應(yīng)的顯示子程序,字符切換通過外部中斷實現(xiàn),該系統(tǒng)設(shè)計對程序設(shè)計的要求較硬件電路要高。</p><p><b> 2 系統(tǒng)理論設(shè)計</b></p><p> 2.1 系統(tǒng)總體方案比較及說明</p><p> 方案一:選用單片機(jī)AT89C51作為掃描顯示控制核心,由其直接控制LED線陣的顯示,并外加掃描控制開關(guān)控制字符或
5、圖形的掃描顯示,原理框圖如圖-1所示。 </p><p> 圖-1 方案一原理框圖</p><p> 該方案線路簡單,掃描控制開關(guān)可選擇機(jī)械開關(guān)或編碼開關(guān)或水銀開關(guān),在顯示棒搖擺時接通線路控制單片機(jī)掃描輸出字符或圖形的列編碼信號;單片機(jī)外另接有中斷控制按鈕用以切換不同字符或圖形的顯示,LED線陣采用普通三極管驅(qū)動,電路采用4節(jié)充電電池供電。</p><p>
6、此方案的優(yōu)點是:單片機(jī)C51的端口較多,可實現(xiàn)顯示數(shù)據(jù)并行傳輸,速度較快,且外圍電路簡單,調(diào)試較方便。</p><p> 缺點是:為了增大顯示清晰度,除去可能由背景LED燈占用的端口外,單片機(jī)剩余端口無法使線陣中LED燈數(shù)量擴(kuò)展至24只以上;單片機(jī)使用的晶振頻率較大,軟件不易實現(xiàn)對計數(shù)的控制。</p><p> 方案二:由單片機(jī)AT89C2051最小系統(tǒng)、寄存器組、驅(qū)動電路、LED線陣
7、和電源部分組成,原理方框圖如圖-2所示。</p><p> 圖2 方案二系統(tǒng)設(shè)計框圖</p><p> 該方案通過單片機(jī)將列編碼輸入寄存器,通過寄存器組移位功能實現(xiàn)字符圖像的掃描輸出。</p><p> 與方案一比較,方案二中單片機(jī)所需輸出端口很少,可選用小型單片機(jī)AT89C2051,不僅功能強(qiáng),而且尺寸小,價位比較低,其數(shù)據(jù)輸出串口輸出方式,所需端口較少,
8、編程同C51兼容,總體線路較簡單,電路板占用面積??;利用寄存器移位功能可輕易實現(xiàn)顯示LED燈數(shù)量的擴(kuò)展,不僅具備方案一的大部分優(yōu)點,而且外圍器件更少,能耗更低,電路調(diào)試簡單,故選擇方案二。 </p><p> 2.2 系統(tǒng)總體結(jié)構(gòu)設(shè)計及說明 </p><p> 以小型單片機(jī)AT89C2051為控制核心,使用三只串行連接的八位移位寄存器74HC164組成具有24位移位功能的寄存器組,控制
9、由24只LED燈組成的線陣掃描顯示字符或圖形,并附加有自動斷電控制部分,降低能源消耗,電源采用四節(jié)1.5V的可充電電池供電,系統(tǒng)總框圖如圖-3所示。</p><p> 圖3 系統(tǒng)總體結(jié)構(gòu)框圖</p><p> 2.3 系統(tǒng)硬件理論設(shè)計、電路原理圖</p><p> 2.3.1單片機(jī)AT89C2051最小系統(tǒng) </p><p> 單片機(jī)
10、最小系統(tǒng)原理如圖-4所示。</p><p> AT89C2051有20個引腳,采用DIP-20封裝.其內(nèi)部含2KB的FLASH存儲器,128B的RAM.它為用戶提供了15條可編程雙向I/O口線.P1口是一個完整的8位雙向I/O口,另有2個外中斷口(INT0,INT1)。2個16位可編程定時計數(shù)器信號輸入端(T0,T1),全雙向串行通信口數(shù)據(jù)接收端RXD和數(shù)據(jù)發(fā)送端TXD,1個模擬比較放大器輸入端(P1.0,P1
11、.1為同向或反向輸入端。另外,AT89C2051的時鐘頻率可為零,具備可用軟件設(shè)置睡眠省電功能。</p><p> 最小系統(tǒng)包括了時鐘電路、復(fù)位電路等,另外還設(shè)置了按鍵,鎖存器,LED管等外圍電路。在89C2051引腳X1和X2跨接晶振和微調(diào)電容就構(gòu)成了時鐘電路,系統(tǒng)的時鐘脈沖由它提供.復(fù)位電路不接按鍵,使其始終處于無效狀態(tài).。</p><p> 圖4 單片機(jī)最小系統(tǒng)</p>
12、;<p> 2.3.2 寄存器組電路</p><p> 寄存器組電路如圖-5所示,寄存器組由三個八位移位寄存器74HC164組成,時鐘觸發(fā)信號同時來自單片機(jī)P3.1口,寄存器U3輸入端接入來自P3.0口的串行輸出信號,其余兩寄存器輸入端接在左邊寄存器的輸出端上,組成的寄存器組具有24位移位功能,可以滿足按列至少16只LED燈掃描顯示的要求。</p><p> 圖5 寄
13、存器組電路</p><p> 2.2.3 掃描控制開關(guān)</p><p> 該開關(guān)接線原理圖如圖-6(a)所示,掃描控制開關(guān)起著擺動傳感作用,每當(dāng)顯示棒擺動至左端位置時,開關(guān)瞬時接通,中斷信號送入單片機(jī),控制若干次掃描信號輸出。</p><p> 方案一:采用機(jī)械式開關(guān),如圖-6(b)所示,紅色弧線代表擺子的導(dǎo)軌,限制其擺動軌道,P1和P2為左右觸點,P1接至中
14、斷口INTO,P0接地,該開關(guān)材料和制作簡單,但擺子轉(zhuǎn)軸和地線接觸可靠性較差。</p><p> (a)開關(guān)接線原理圖 (b)機(jī)械開關(guān)</p><p><b> 圖6 掃描控制開關(guān)</b></p><p> 方案二:采用光限位開關(guān),可靠性很強(qiáng),但擺棒的粗細(xì)需匹配,開關(guān)體積過大,而且難以購買,價格昂貴。&l
15、t;/p><p> 方案三:采用水銀開關(guān),其體積較小,價格適中,可靠性強(qiáng),選擇此方案。</p><p> 2.3.4 自動掉電控制電路</p><p> 自動掉電控制電路原理如圖-7所示, 其中按鍵S作為電源開關(guān)和顯示切換開關(guān),按下此鍵時,PNP型三極管進(jìn)入飽和導(dǎo)通狀態(tài),接通單片機(jī)電源,此時由程序控制單片機(jī)持續(xù)送入低電平信號,使三極管保持導(dǎo)通狀態(tài);若一段時間內(nèi)掃描
16、控制開關(guān)和顯示切換開關(guān)均未送入中斷信號,則單片機(jī)送出高電平,三極管截止,系統(tǒng)進(jìn)入休眠省電狀態(tài);未進(jìn)入省電狀態(tài)時再次按下開關(guān)S,單片機(jī)產(chǎn)生中斷,變換顯示的字符或圖形。</p><p> 圖7 自動掉電控制電路</p><p> 2.3.5 LED驅(qū)動及顯示電路</p><p> LED驅(qū)動及顯示電路如圖8所示,LED燈點亮所需電流一般為三至五毫安,八只LED總電
17、流只有幾十毫安,因此驅(qū)動采用一只普通三極管即可,圖中二極管D1~D3起分壓作用,所有LED點亮的控制信號來自三個寄存器74HC164。</p><p> 圖8 LED驅(qū)動及顯示電路</p><p> 2.3.6 系統(tǒng)總圖: </p><p> 將以上設(shè)計的單片機(jī)最小系統(tǒng)、寄存器組、掃描控制、自動斷電控制、驅(qū)動與顯示等各部分電路進(jìn)行接口連接,構(gòu)成LED顯示棒的系
18、統(tǒng)總體電路圖。(見附件B)</p><p> 2.4系統(tǒng)軟件設(shè)計、各程序流程圖</p><p> 程序分為若干子程序,硬件的功能描述可完全在軟件上實現(xiàn)。</p><p> 1.主程序流程圖如圖9(a)所示,需實現(xiàn)的功能是初始化各端口和變量。判斷圖文切換按鍵和中斷開關(guān)是否被按下,若沒按下,則延時若干秒后進(jìn)入休眠省電模式;若按下,則進(jìn)行字符的切換顯示。</p
19、><p> 2.按鍵中斷實現(xiàn)數(shù)據(jù)掃描切換程序流程圖如圖-9(b)所示,單片機(jī)外部中斷源有2個,采用外部中斷0作為判斷是否搖擺的端口,該端口連接水銀開關(guān),如果有搖擺,則觸發(fā)外部中斷,進(jìn)行掃描數(shù)據(jù)處理。</p><p> 3.賦值子程序流程圖如圖10(a)所示,賦值前先檢測中斷是否有效,如有效,則將要顯示的字符數(shù)據(jù)依次送入寄存器,送完后返回。否則返回到中斷入口處等待下一次中斷的到來。</
20、p><p> 4.定時間隔子程序流程圖如圖10(b)所示,首先判斷掃描間隔是否太大,如果太大,則使用默認(rèn)間隔,否則啟動定時器,在定時期間判斷中斷是否又被觸發(fā),如果有,則定時停止,強(qiáng)行返回。否則等到定時結(jié)束后再返回到掃描子程序中。</p><p> 圖10 程序流程圖2</p><p><b> 3 系統(tǒng)實現(xiàn)</b></p>&l
21、t;p> 3.1硬、軟件分別調(diào)試及聯(lián)合調(diào)試</p><p> 3.1.1 階段調(diào)試 </p><p> 各部分線路連接前對各元器件的功能進(jìn)行檢測,確保元件功能正常后,再對各局部電路功能進(jìn)行調(diào)試。</p><p> 寄存器組電路調(diào)試:利用函數(shù)發(fā)生器產(chǎn)生的方波作為時鐘信號,對進(jìn)行移位功能測試。</p><p> LED線陣驅(qū)動及顯
22、示電路調(diào)試:輸入穩(wěn)壓源產(chǎn)生的6V直流穩(wěn)定電壓,用萬用表分別測出一只至八只LED全亮?xí)r的電流,改變限流電阻大小,直至電流大小和顯示正常。</p><p> 單片機(jī)最小系統(tǒng)調(diào)試:寫入簡單程序,用萬用表測出相應(yīng)端口的電壓,判斷出高低電平,改變外圍元件參數(shù),直至達(dá)到設(shè)計要求。</p><p> 軟件調(diào)試:采用了自頂向下的調(diào)試方法,先調(diào)試功能電路,在調(diào)試整個系統(tǒng),調(diào)試過程中軟件調(diào)試和硬件調(diào)試相結(jié)
23、合,提高了效率。</p><p> 3.1.2 聯(lián)合調(diào)試 </p><p> 軟、硬件聯(lián)合調(diào)試:當(dāng)軟硬件基本功能發(fā)分別調(diào)試后,進(jìn)行聯(lián)合調(diào)試,調(diào)試過程中出現(xiàn)的問題有:字符呈倒立顯示,文字只能顯示中間部分等;通過分析軟件程序和硬件電路,對程序進(jìn)行了大量的調(diào)試,最終實現(xiàn)了設(shè)計目標(biāo)。</p><p> 3.2 方案的修改、說明</p><p>
24、 設(shè)計方案通過論證和實際測試,系統(tǒng)原理正確且可行,未作大量修改,只通過改變外圍少量元件的參數(shù)對電路進(jìn)行優(yōu)化,逐步達(dá)到設(shè)計目標(biāo)要求。 </p><p><b> 4 系統(tǒng)測試</b></p><p> 4.1實驗、測試儀器與測試試驗方法</p><p> 基本儀器清單如表1所示。</p><p> 表1 基本儀
25、器清單</p><p> 4.2 測試數(shù)據(jù)及測試結(jié)果分析</p><p> 4.2.1 測試數(shù)據(jù)</p><p> 安裝好電池后,按下電源開關(guān),LED線陣開始閃爍,在光線適當(dāng)?shù)沫h(huán)境下?lián)u動棒時在亮燈扇形區(qū)域能夠讓人分辨出初始的“A”字符,按下切換按鈕開關(guān),顯示變換為“電”字,依次按下切換開關(guān)可分別辨認(rèn)出國際奧委會五環(huán)圖形,英文單詞“Welcome” ,漢字詞組“
26、 美亞”和北京奧運(yùn)會會徽圖形;當(dāng)30秒內(nèi)未擺動和按下中斷開關(guān),系統(tǒng)自動進(jìn)入休眠省電模式。</p><p> 4.2.2 測試結(jié)果分析</p><p><b> 5 設(shè)計總結(jié) </b></p><p> 本LED顯示棒可以實現(xiàn)以下要求或功能:</p><p> 1.該顯示棒依靠LED顯示字符或圖形,且24只LED燈
27、呈線狀排列,LED數(shù)量超過至少使用16只的要求 。</p><p> 2.顯示棒搖動時形成的亮燈區(qū)域能讓人分辨出字符“A” 漢字“ 電”和國際奧委會五環(huán)圖形。 </p><p> 3. 顯示棒搖動時形成的亮燈區(qū)域能讓人分辨出漢字詞組“ 美亞”和北京奧運(yùn)會會徽圖形;英文單詞“Welcome”稍有些模糊。</p><p> 4.顯示棒具有自動斷電功能,三十秒內(nèi)不使
28、用則將進(jìn)入休眠省電狀態(tài),以降低能耗。</p><p> 本設(shè)計制作完成了題目要求的基本部分的全部要求和發(fā)揮部分的大部分要求,而且具有一定的特色功能。 </p><p> 隨著科技進(jìn)步和生活水平的提高,越來越多的高科技的電子產(chǎn)品逐漸融入日常生活中,該種顯示棒操作簡易、效果新奇,深具吸引力,市場潛力巨大。</p><p> 當(dāng)然,我們的設(shè)計還存在著一些缺陷,由于設(shè)
29、計時間緊迫,字符或圖形編碼設(shè)計時,水平分格較少,導(dǎo)致顯示的水平幅度較低;由于掃描時間間隔設(shè)定的偏差,顯示時出現(xiàn)少量的疊影,同時顯示的穩(wěn)定還有待進(jìn)一步的提高,在此懇請各位老師批評指正。 </p><p><b> 參考文獻(xiàn)</b></p><p> [1] 趙建領(lǐng). 51系列單片機(jī)開發(fā)寶典[M]. 北京: 電子工業(yè)出版社, 2007.</p><
30、p> [2] 邊春元等. C51單片機(jī)典型模塊設(shè)計及應(yīng)用[M]. 北京: 機(jī)械工業(yè)出版社,2008.</p><p> [3] 彭 為等. 單片機(jī)典型系統(tǒng)設(shè)計實例精講[M]. 北京: 電子工業(yè)出版社, 2006.</p><p> [4] 徐愛鈞等. Keil C51 V7.0單片機(jī)高級語言編程與μVision2應(yīng)用實踐[M].北京:電子工業(yè)出版社,2008.</p>
31、;<p> [5] 李朝青. 單片機(jī)&DSP外圍數(shù)字IC技術(shù)手冊(第2版)[M]. 北京:北京航空航天大學(xué)出版社,2005.</p><p> [9] 周志敏等. 集成穩(wěn)壓電源電路圖集[M]. 北京: 中國電力出版社, 2008.</p><p> 附錄A:系統(tǒng)操作說明 </p><p> 該系統(tǒng)實現(xiàn)了一個基于LED的顯示棒,24只LE
32、D燈呈線狀排列,搖動時形成的亮扇形區(qū)域能夠讓人分辨出字符,漢字,英文單詞,漢字詞組以及多種圖形。 </p><p> (1) 搖動時或搖動前將握柄處按鈕開關(guān)按下,此時電源被接通,電路被觸發(fā)而啟動;</p><p> (2)供電部分是 4 節(jié) 1.5V 5號電池,供電電壓為6V;</p><p> ?。?)按下顯示切換按鈕開關(guān),可切換顯示的內(nèi)容;</p>
33、;<p> ?。?)長期不使用時,請取出電池,另行保管。 </p><p> 附錄B:系統(tǒng)總電路原理圖</p><p> 附錄C:系統(tǒng)程序清單</p><p> #ifndef __PS2__</p><p> #define __PS2__</p><p> //#define d
34、ebugprint1</p><p> #include <reg51.h></p><p> #include <stdio.h></p><p> #include <absacc.h></p><p> #include <string.h></p>&
35、lt;p> #include <intrins.h></p><p> typedef unsigned char byte;</p><p> typedef unsigned int word;</p><p> ////////////////////////////////////////////////////////
36、////////////////////////////////////////////////</p><p> #define setbit(B,b)((B)|=(0x01<<(b)))</p><p> #define clrbit(B,b)((B)&=~(0x01<<(b)))</p><p> #def
37、ine tstbit(B,b)((B)&(0x01<<(b)))</p><p> #define ASWORD(x,ofs) (*((word *)&x+ofs))</p><p> #define ASBYTE(x,ofs) (*((byte *)&x+ofs))</p><p> #
38、define XTALL11059200L</p><p> #define BAUD9600</p><p> #define BAUDRATE(x)(256-(byte)((XTALL)/(32L*12L*(x))))</p><p> #define DELAY_US(x)(256-(word)(x*((XTALL)/
39、(12*1000*1000L))))</p><p> #define DELAY_MS(x)(256-(word)(x*((XTALL)/(12L*1000L))))</p><p> #define DLY_15MS (word)33333L</p><p> #define TIMEOUT 0x
40、8000</p><p> //#define PS2MAX14</p><p> //#define KEYMAX 10</p><p> sbit KEY=P1^4;</p><p> sbit LED_POWER=P1^7;</p><
41、p> sbit LS164_DATA=P3^0;</p><p> sbit LS164_CLK=P3^1;</p><p> sbit POWER =P1^5;</p><p> sbit GND =P3^7;</p><p> sbit TEST
42、=P3^5;</p><p> #include "qs3kb.h"</p><p> byte code A0[60]= {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0
43、xff,0xf8,0xc0,0x80,0x87,0x8f,0x81,0xc0,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};</p><p> byte code A1[60]=
44、 {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xe0,0x00,0x00,0x38,0x78,0xf8,0xf8,0xf8,0x38,0x00,0x00,0xc0,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf
45、f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};</p><p> byte code A2[60]= {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
46、0xfd,0xe1,0x01,0x03,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x07,0x01,0xc1,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};</p>&l
47、t;p> //byte code A0[24]= {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xc0,0x80,0x87,0x8f,0x81,0xc0,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};</p><p> //byte code A1[24]= {0xff,0xff,0xff,0xff,0xff,
48、0xf8,0xe0,0x00,0x00,0x38,0x78,0xf8,0xf8,0xf8,0x38,0x00,0x00,0xc0,0xf8,0xff,0xff,0xff,0xff,0xff};</p><p> //byte code A2[24]= {0xff,0xff,0xfd,0xe1,0x01,0x03,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
49、0xff,0x3f,0x07,0x01,0xc1,0xf1,0xff,0xff};</p><p> byte code dian0[60]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,
50、0x30,0x30,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};</p><p> byte code dian1[60]= {0xff,0xff
51、,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x10,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
52、,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};</p><p> byte code dian2[60]= {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0
53、f,0x0f,0xcf,0xcf,0xcf,0xcf,0xcf,0x03,0x00,0xc8,0xcc,0xcc,0xcc,0xcc,0xcc,0x0c,0x8c,0xf8,0x71,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};</p><p>
54、 byte code wuhuan0[60]= {0xff,0xff,0xff,0xff,0xff,0xfc,0xf0,0x73,0x3f,0x9f,0x9f,0xcf,0xcf,0xcf,0xcf,0x8f,0x9f,0x1f,0x37,0x73,0xf0,0xfc,0xf8,0x70,0x37,0x1f,0x9f,0x8f,0xcf,0xcf,0xcf,0xcf,0xcf,0x9f,0x1f,0x37,0x70,0xf0,0x0e,
55、0xf8,0x70,0x37,0x1f,0x9f,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x9f,0x3f,0x37,0x70,0xf8,0xff,0xff,0xff,0xff,0xff};</p><p> byte code wuhuan1[60]= {0xff,0xff,0xff,0xff,0xff,0x8f,0x07,0x71,0xf9,0xfc,0xfc,0xfe,0xfe,0x
56、fc,0x70,0x32,0x1c,0xc8,0xc1,0x41,0x07,0x8f,0x0f,0x01,0xc0,0xc8,0x9c,0x34,0x70,0xf0,0x70,0x36,0x9e,0x9c,0xcc,0xc1,0x03,0x0f,0xcf,0x0f,0x03,0x91,0x19,0xf0,0xfc,0xfe,0xfe,0xfe,0xfe,0xfc,0xfc,0xf9,0xf3,0x07,0x0f,0xff,0xff,0x
57、ff,0xff,0xff};</p><p> byte code wuhuan2[60]= {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xef,0xcf,0x0f,0x07,0x73,0xf1,0xf9,0xf9,0xfc,0xfc,0xfc,0xfc,0xf9,0xf9,0xf3,0x37,0x0f,0x8f,0x07,0x63
58、,0xf1,0xf9,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xf9,0xf9,0x73,0x17,0x0f,0xcf,0xef,0xef,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff} ;</p><p> byte code welcome0[60]={0xff, 0xff,0x10,0x10,0xff,0xff
59、,0x10,0x10,0xff,0xff,0x10,0x10,0xff,0x10,0x10,0x1f,0x1f,0x11,0x11,0xff,0x1f,0x10,0x10,0x1f,0xff,0xff,0xff,0xff,0xf0,0x30,0x1f,0x1f,0x10,0x10,0xff,0xf1,0x30,0x1f,0x1f,0x30,0xf8,0xff,0x10,0x10,0x10,0xf8,0xff,0xf8,0x10,0x10
60、,0x10,0xff,0xff,0x10,0x10,0x1f,0x11,0x11,0xff,0xff };</p><p> byte code welcome1[60]={0xff, 0xff,0xef,0x00,0xf0,0x70,0x03,0x01,0x70,0xf0,0x00,0xef,0xff,0x00,0x00,0x37,0x37,0x37,0xff,0xff,0xff,0x00,0x00,0xff
61、,0xff,0xf8,0xf8,0xff,0x00,0x00,0xff,0xff,0xee,0xee,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0x00,0x00,0xef,0x01,0x10,0x01,0xef,0x00,0x00,0xff,0xff,0x00,0x00,0x37,0x37,0xff,0xff,0xff};</p><p> byte code welco
62、me2[60]={0xff, 0xff,0xff,0xcf,0x01,0x01,0xff,0xff,0x01,0x01,0xcf,0xff,0xff,0x01,0x01,0xf1,0xf1,0x01,0x01,0xff,0xf1,0x01,0x01,0xf1,0xf1,0x01,0x01,0xff,0x8f,0x03,0xf1,0xf1,0x01,0x07,0xff,0x8f,0x0c3,0xf1,0xf1,0x03,0x8f,0xff
63、,0x01,0x01,0xf1,0xff,0x0f,0xff,0xf1,0x01,0x01,0xf1,0xff,0x01,0x01,0xf1,0x01,0x01,0xff,0xff};</p><p> byte code meiya0[60]={0xff,0xff,0xff,0xff,0xff,0xf3,0xf3,0xf3,0xf3,0xd3,0x93,0x33,0x73,0xf0,0xf0,0xf0,0x7
64、3,0x13,0x93,0xf3,0xf3,0xf3,0xf3,0xf3,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x30,0x30,0x3f,0x3f,0x3f,0x30,0x30,0x3f,0x3f,0x3f,0x3e,0x3f,0x3f,0xff,0xff,0xff,0xf3,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0xff};&l
65、t;/p><p> byte code meiya1[60]={0xff,0xff,0xff,0xff,0xfe,0x76,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x00,0x00,0x00,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x76,0xfe,0xff,0xff,0xff,0xef,0x0f,0x10,0xf0,0xf0,0xff,0xff,0x
66、00,0x00,0xff,0xff,0xff,0x00,0x00,0xfe,0xf8,0x31,0x07,0xcf,0xff,0xff,0xff,0xfe,0x76,0x46,0xff,0xff,0xff,0xff,0xff,0xff,0xff};</p><p> byte code meiya2[60]={0xff,0xff,0xff,0xff,0xeb,0xe9,0xe9,0xe9,0xe3,0xe3,0
67、x67,0x2f,0x8f,0xcf,0xef,0x8f,0x2f,0x67,0x67,0xe3,0xe3,0xe9,0xe9,0xe9,0xeb,0xff,0xff,0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x01,0x01,0xf9,0xf9,0xf9,0x01,0x01,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xeb,0xe9,0xe9,0xff,0
68、xff,0xff,0xff,0xff,0xff,0xff};</p><p> byte code huihui0[60]= {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x0c,0x04,0x06,0x06,0x07,0x7
69、7,0x76,0x77,0x07,0x06,0x0c,0x0c,0x88,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};</p><p> byte code huihui1[60]= {0xff,0xff,0xff,
70、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x80,0xc0,0xce,0xcf,0x03,0x33,0xff,0xce,0xf8,0x3c,0x0e,0x07,0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
71、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff} ;</p><p> byte code huihui2[60]= {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0
72、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0f,0x8f,0xc8,0xf0,0x70,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};</p><p> by
73、te timecount=0;</p><p> byte dispstate=0;</p><p> byte savehtime=0;</p><p> byte saveltime=0;</p><p> byte pretime=0;</p><p> bit intflag=0;</p>
74、;<p> bit backflag=0;</p><p> //byte Display_data[4]={3,5,6,0};</p><p> //byte dotflag=0;</p><p> //byte pushflag=1;</p><p> void Timer_Init(void);</p&
75、gt;<p> void Int_Init(void);</p><p> void keyproc(void);</p><p> void setvalue(void);</p><p> void Timer1_Delay(void);</p><p> void uart_init(void);</p&g
76、t;<p> void uart_putc(byte c);</p><p> void delay(word w);</p><p> void PS2_Receive () interrupt 0 using 0 {</p><p> //pushflag=0;</p><p> //byte usetime=0
77、;</p><p> byte temp;</p><p> EX0 = 0; //disable int0</p><p> //diaable timer0</p><p> //temp = TH0;</p><p> //if(temp>=0x10){</
78、p><p> TR0 = 0;</p><p> savehtime = timecount;</p><p> saveltime = TH0;</p><p> timecount = 0;</p><p> TH0 = 0x00;</p>
79、<p> TL0 = 0x00;</p><p> intflag = 1;</p><p> TR0 = 1;</p><p><b> //}</b></p><p> //pretime = timecount;</p>
80、<p> EX0 = 1; //enable int0</p><p> return ; </p><p><b> }</b></p><p> void Timer0_Proc () interrupt 1 using 1 {</p>&
81、lt;p> timecount++; </p><p> TH0 = 0x00;</p><p> TL0 = 0x00;</p><p> TR0 = 1;</p><p> return ; </p><p><b> }&
82、lt;/b></p><p> void main(void) {</p><p><b> byte i;</b></p><p> POWER = 0;</p><p> GND = 0;</p><p> TEST = 0;</p>&l
83、t;p> uart_init();</p><p> /*while(1){</p><p> for(i=0;i<60;i++){</p><p> LED_POWER=1; //led power off</p><p> LS_164(meiya0[i]);</p><p> LS
84、_164(meiya1[i]);</p><p> LS_164(meiya2[i]);</p><p> //uart_putc(meiya0[i]);</p><p> //uart_putc(meiya1[i]);</p><p> //uart_putc(meiya2[i]);</p><p>
85、 LED_POWER=0; // led power on</p><p> delay(20000);</p><p> delay(20000);</p><p><b> }</b></p><p><b> }*/</b></p><p><b
86、> while(1){</b></p><p> Timer_Init();</p><p> Int_Init(); </p><p> while(KEY) {</p><p> if(timecount>0xf0){</p><p> POWER = 1; //po
87、wer off</p><p><b> }</b></p><p> else setvalue();</p><p><b> //TEST=1;</b></p><p><b> }</b></p><p> keyproc();<
88、/p><p><b> } </b></p><p><b> }/*</b></p><p> void Display(void){</p><p><b> byte i;</b></p><p><b> byte j;</
89、b></p><p> for(i=0;i<4;i++){</p><p> j=Display_data[i];</p><p> LS_164(TAB_LED[j]);</p><p><b> }</b></p><p><b> } */</b>
90、;</p><p> void Timer_Init(void){</p><p> TMOD = 0x11;</p><p> TH0 = 0x00;</p><p> TL0 = 0x00;</p><p> TR0 = 1;</p><p><
91、b> }</b></p><p> void Timer1_Init(void){</p><p><b> }</b></p><p> void Int_Init(void){</p><p> IT0 = 1;</p><p> PT0 = 1;
92、 //timer0 prioty is higher </p><p> IE = 0x83;</p><p><b> }</b></p><p> void keyproc(void){</p><p> if(KEY==0){</p><p> while(KEY==
93、0) ;</p><p> dispstate++;</p><p> if(dispstate>=6) dispstate=0;</p><p><b> }</b></p><p> uart_putc((0xff>>(dispstate+1)));</p><p>
94、<b> }</b></p><p> void setvalue(void){</p><p> byte i,j,loop_num,delay_num;</p><p> byte *p0,*p1,*p2;</p><p> if(intflag){</p><p> intfla
95、g = 0;</p><p> switch(dispstate){</p><p><b> case 0:{</b></p><p><b> p0=A0;</b></p><p><b> p1=A1;</b></p><p>&l
96、t;b> p2=A2;</b></p><p> loop_num=60;</p><p> delay_num=2;</p><p><b> break;</b></p><p><b> }</b></p><p><b> ca
97、se 1:{</b></p><p><b> p0=dian0;</b></p><p><b> p1=dian1;</b></p><p><b> p2=dian2;</b></p><p> loop_num=60;</p><
98、p> delay_num=2;</p><p><b> break;</b></p><p><b> }</b></p><p><b> case 2:{</b></p><p> p0=wuhuan0;</p><p> p1=
99、wuhuan1;</p><p> p2=wuhuan2;</p><p> loop_num=60;</p><p> delay_num=2;</p><p><b> break;</b></p><p><b> }</b></p><p
100、><b> case 3:{</b></p><p> p0=welcome0;</p><p> p1=welcome1;</p><p> p2=welcome2;</p><p> loop_num=60;</p><p> delay_num=2;</p>
101、<p><b> break;</b></p><p><b> }</b></p><p> case 4:{p0=meiya0;p1=meiya1;p2=meiya2;</p><p> loop_num=60;delay_num=2;break;}</p><p>
102、 case 5:{p0=huihui0;p1=huihui1;p2=huihui2;</p><p> loop_num=60;delay_num=2;break;}</p><p> default:{p0=A0;p1=A1;p2=A2;</p><p> loop_num=24;delay_num=5;break;}</p>
103、;<p><b> }</b></p><p> for(i=0;i<loop_num;i++){</p><p> LED_POWER=1; //led power off</p><p> //LS_164(meiya0[i]);</p><p> //LS_164(meiya
104、1[i]);</p><p> //LS_164(meiya2[i]);</p><p> uart_putc(*(p0+i));</p><p> uart_putc(*(p1+i));</p><p> uart_putc(*(p2+i));</p><p> LED_POWER=0; // le
105、d power on</p><p> for(j=0;j<delay_num;j++) Timer1_Delay();</p><p> //if(backflag) {//backflag=0;//break;</p><p><b> //}</b></p><p><b> }&l
106、t;/b></p><p><b> }</b></p><p><b> }</b></p><p> void Timer1_Delay(void){</p><p> if(savehtime>0xc0){</p><p> savehtime =
107、 0x08;</p><p><b> }</b></p><p> TH1 = 0xff-savehtime;</p><p> TL1 = 0xff-saveltime;</p><p><b> TR1 = 1;</b></p><p> while(T
108、F1==0){</p><p> if(intflag){//backflag =1;TR1= 0;return ;}</p><p> } TF1= 0; TR1= 0;</p><p><b> }</b></p><p> void uart_init(void){ SCON=0x00; }&
109、lt;/p><p> void uart_putc(byte c ) {TI=0;SBUF=c;while (!TI) ;}</p><p> void delay(word w) {word i; for (i=0;i<w;i++);</p><p> 附錄D:系統(tǒng)主要元器件清單 </p><p> 表2 系統(tǒng)元器件清單<
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計論文---基于單片機(jī)的搖搖棒設(shè)計
- 基于單片機(jī)的led點陣顯示畢業(yè)設(shè)計
- 畢業(yè)論文-基于at89s51單片機(jī)的led搖搖棒設(shè)計
- 單片機(jī)畢業(yè)設(shè)計--單片機(jī)控制的led點陣顯示
- led搖搖棒畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---基于單片機(jī)的led顯示屏設(shè)計
- 畢業(yè)設(shè)計---基于單片機(jī)led滾動顯示系統(tǒng)設(shè)計
- 基于單片機(jī)的led顯示原理與畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---基于單片機(jī)的led顯示屏設(shè)計 (2)
- 畢業(yè)論文---單片機(jī)實現(xiàn)搖搖棒設(shè)計
- 畢業(yè)論文---單片機(jī)實現(xiàn)搖搖棒設(shè)計
- 畢業(yè)設(shè)計---基于單片機(jī)的led電子顯示屏
- 基于51單片機(jī)搖搖棒的設(shè)計說明
- 基于51單片機(jī)搖搖棒的設(shè)計說明
- 基于單片機(jī)的神奇搖搖棒畢業(yè)論文
- 單片機(jī)畢業(yè)論文--基于單片機(jī)的led顯示屏設(shè)計
- 畢業(yè)設(shè)計---基于單片機(jī)的led點陣字符顯示器的設(shè)計
- 基于單片機(jī)的led點陣顯示電子鐘畢業(yè)設(shè)計
- 單片機(jī)畢業(yè)設(shè)計---基于單片機(jī)控制的模擬電梯顯示
- 畢業(yè)設(shè)計--基于單片機(jī)控制的led點陣顯示屏設(shè)計論文
評論
0/150
提交評論