2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘要</b></p><p>  系統(tǒng)以高速單片機STCF1132為核心,設(shè)計并制作了一個基于32×32點陣LED模塊顯示屏。該點陣可以實現(xiàn)掃描微亮和顯示點亮兩種工作模式,在掃描過程中通過自制光筆檢測,獲取行列坐標(biāo)信息,實現(xiàn)“點亮、劃亮、反顯、整屏擦除、筆畫擦除、連寫多字、對象拖移”等書寫顯示功能,并且通過按鍵可以實現(xiàn)不同功能之間的切換。同時還能夠根據(jù)

2、環(huán)境光強的變化,自動連續(xù)調(diào)節(jié)顯示屏上顯示的亮度。設(shè)計方案運用了4-16線譯碼器74HC154驅(qū)動點陣的行和列,通過單片機的控制實現(xiàn)各種顯示功能,顯示屏亮度的自動調(diào)節(jié)采用光敏電阻檢測環(huán)境光強,通過A/D轉(zhuǎn)換、D/A轉(zhuǎn)換實現(xiàn)對顯示亮度的自動調(diào)節(jié)。</p><p>  關(guān)鍵詞:LED點陣 單片機 74HC154</p><p><b>  目錄</b></p&

3、gt;<p><b>  摘要I</b></p><p><b>  目錄II</b></p><p><b>  第一章 緒論1</b></p><p><b>  1.1課題來源1</b></p><p>  1.2設(shè)計任務(wù)及要求

4、1</p><p>  第二章 系統(tǒng)方案設(shè)計3</p><p>  2.1.系統(tǒng)的總體設(shè)計3</p><p>  2.2各模塊的設(shè)計。3</p><p>  2.2.1.核心控制模塊的的設(shè)計3</p><p>  2.2.2.光筆設(shè)計3</p><p>  2.2.3.顯示方案的設(shè)計

5、4</p><p>  2.2.4.點陣顯示模式設(shè)計4</p><p>  第三章 系統(tǒng)硬件設(shè)計5</p><p>  3.1光筆的設(shè)計5</p><p>  3.2 32×32LED點陣的連接6</p><p>  3.3 32×32LED點陣的驅(qū)動控制電路7</p>&

6、lt;p>  3.4 顯示電路部分功能及原理7</p><p>  3.5 鍵盤的使用及設(shè)計8</p><p>  3.6 光照的檢測與控制9</p><p>  第四章 系統(tǒng)軟件設(shè)計11</p><p>  4.1主程序設(shè)計11</p><p>  4.2 外中斷0服務(wù)程序(坐標(biāo)檢測)12</

7、p><p>  4.3.外中斷1服務(wù)程序(按鍵處理)13</p><p>  4.4.LCM103驅(qū)動程序設(shè)計13</p><p>  第五章 系統(tǒng)測試與結(jié)果15</p><p>  5.1 劃亮反顯擦除拖移的測試和結(jié)果15</p><p>  5.2屏亮自動調(diào)節(jié)測試和結(jié)果15</p><p&

8、gt;  5.3 超時關(guān)顯示節(jié)電測試和結(jié)果15</p><p><b>  總結(jié)及展望16</b></p><p><b>  致謝17</b></p><p><b>  參考文獻18</b></p><p>  附錄1 總電原理圖(單片機系統(tǒng)與點陣驅(qū)動電路)19&

9、lt;/p><p>  附錄2 總電原理圖(32×32點陣連接電路)20</p><p>  附錄3 源程序21</p><p><b>  第一章 緒論</b></p><p><b>  1.1課題來源 </b></p><p>  本課題來源于全國大學(xué)生電子設(shè)

10、計競賽LED點陣書寫顯示屏,它是一種控制半導(dǎo)體發(fā)光二極管的顯示裝置,其主要功能是實現(xiàn)“點亮、劃亮、反顯、整屏擦除、筆畫擦除、連寫多字、對象拖移”等書寫顯示。</p><p>  1.2設(shè)計任務(wù)及要求</p><p>  設(shè)計并制作一個基于32×32點陣LED模塊的書寫顯示屏,其系統(tǒng)結(jié)構(gòu)如圖1-1所示。在控制器的管理下,LED點陣模塊顯示屏工作在人眼不易覺察的掃描微亮和人眼可見的顯

11、示點亮模式下;當(dāng)光筆觸及LED點陣模塊表面時,先由光筆檢測觸及位置處LED點的掃描微亮以獲取其行列坐標(biāo),再依據(jù)功能需求決定該坐標(biāo)處的LED是否點亮至人眼可見的顯示狀態(tài),從而在屏上實現(xiàn)“點亮、劃亮、反顯、整屏擦除、筆畫擦除、連寫多字、對象拖移”等書寫顯示功能。</p><p>  圖1-1 LED點陣書寫顯示屏系統(tǒng)結(jié)構(gòu)示意圖</p><p>  設(shè)計的最終要求是:在點亮功能下當(dāng)光筆接觸屏上某

12、點LED時,能即時點亮該LED;在劃亮功能下當(dāng)光筆快速劃過時,能同步點亮劃過的各LED,其速度要求2S內(nèi)能劃過并點亮40點LED;在反顯功能下能對屏上顯示的信息實現(xiàn)反向顯示;在屏幕擦除功能下能實現(xiàn)對屏上所顯示信息整屏擦除;在筆畫擦除功能下,能用光筆擦除屏上所顯漢字的筆畫;在連寫多字功能下,能結(jié)合自選的擦除方式,在30S內(nèi)以劃亮方式寫出四個漢字且存入機內(nèi);在對象拖移功能下,能用光筆將選定顯示內(nèi)容在屏上進行拖移,先用光筆以劃亮方式在屏上圈定

13、欲拖移顯示對象,再用光筆將該對象拖移到屏上另一位置;當(dāng)光強改變時,能自動連續(xù)調(diào)節(jié)屏上顯示亮度;當(dāng)光筆連續(xù)未接觸屏面的時間超過1-5MIN時,自動關(guān)閉屏上顯示,并使系統(tǒng)進入休眠模式。</p><p>  第二章 系統(tǒng)方案設(shè)計</p><p>  2.1.系統(tǒng)的總體設(shè)計</p><p>  根據(jù)課題要求,LED點陣書寫顯示屏由主控模塊,按鍵電路、LED點陣模塊、光筆電路

14、及LED點陣驅(qū)動顯示等部分組成。系統(tǒng)框圖如圖2-1所示:</p><p><b>  圖2-1系統(tǒng)框圖</b></p><p>  2.2各模塊的設(shè)計。</p><p>  2.2.1.核心控制模塊的的設(shè)計</p><p>  核心控制模塊是系統(tǒng)的大腦,控制著系統(tǒng)的所有輸入輸出、計算、判斷與決策?!癓ED點陣書寫顯示屏”

15、檢測精度要求高且數(shù)據(jù)存儲容量大,選擇適合的控制模塊,能確保其快速是實現(xiàn)穩(wěn)定及達到系統(tǒng)要求的基本條件。使用STC系列單片機,該系列單片機是高集成單片機,功能和性能都要比51系列強大很多。比如STC11F32是1T單片機,速度是AT89S51的12倍。而且內(nèi)部集成了內(nèi)置振蕩器和復(fù)位,EEPROM、ADC、PWM、四態(tài)I/O接口。</p><p>  2.2.2.光筆設(shè)計</p><p>  光

16、筆設(shè)計的關(guān)鍵是選擇合適的傳感器件,只有具有很高的靈敏度和一定的響應(yīng)時間的傳感器才能完成系統(tǒng)的要求及功能。</p><p>  方案一:采用核心部件為光敏電阻制成的光筆檢測系統(tǒng)。光敏電阻是將光能轉(zhuǎn)換為電能的一種傳感器件,它是構(gòu)成光電式傳感器的主要部件。光敏電阻結(jié)構(gòu)簡單、使用方</p><p>  便、價格便宜,但經(jīng)調(diào)試發(fā)現(xiàn)其響應(yīng)時間長,不易檢測。</p><p>  

17、方案二:采用光敏二極管,與光敏電阻相比有較好的高頻特性,具有一定的可靠性,功耗低.相比于光敏電阻而言靈敏度較差,需要較高倍數(shù)的放大器才能實現(xiàn)精準(zhǔn)識別的效果。</p><p>  方案三:采用光敏三極管,其工作原理與光敏二極管相似。但光敏三極管除了具有光敏二極管能將光信號轉(zhuǎn)換成電信號的功能外,還有對電信號放大的功能。所以其靈敏度更高,響應(yīng)時間快。</p><p>  基于以上分析,我們采用光

18、敏三極管作為光筆的檢測部件。</p><p>  2.2.3.顯示方案的設(shè)計</p><p>  采用LCD液晶顯示器。LCD有明顯的優(yōu)點:微功耗、尺寸小,超薄輕巧、顯示信息量大、字跡清晰、美觀、視覺舒適。使整個控制系統(tǒng)更加人性化。采用LCM301液晶顯示器,其是串行口顯示,所需I/O口較少,節(jié)省了資源,焊接電路時也較為方便。</p><p>  2.2.4.點陣顯

19、示模式設(shè)計</p><p>  將點陣的驅(qū)動電源分為兩路,一路為正常電壓,另一路通過硬件電路調(diào)節(jié)恰好能使點陣處于微亮狀態(tài)。結(jié)合軟件實現(xiàn)點陣的顯示模式的改變。這樣節(jié)省了資源的同時,也節(jié)約了時間</p><p>  第三章 系統(tǒng)硬件設(shè)計</p><p><b>  3.1光筆的設(shè)計</b></p><p>  光筆用光電三極

20、管3DU33型光敏三極管檢測點陣屏發(fā)光的強弱變化電壓信號,LM393為比較器。由于點陣的光強相對較弱,通過光電三極管的電流很小,通過串接硅二極管來提升光電三極管發(fā)射極電壓,方便后級比較器作業(yè),便于單片機檢測信號。光筆原理圖如下圖3-1所示:</p><p><b>  圖3-1光筆原理圖</b></p><p>  在一空的筆殼內(nèi),將光敏三極管放置在筆殼底端,光敏三極

21、管的引腳從一個與其直徑等寬的空管引出至空管的頂部,并在其中一引腳中接一彈片,在接近的地方用銅片貫穿空管且正好卡在筆管的內(nèi)部。與此同時,用一彈簧套在空管外部,并將其底不固定,這樣,當(dāng)筆管在點陣屏上上下抖動時,內(nèi)部光敏三極管就能很好的檢測了。其結(jié)構(gòu)如圖3-2所示:</p><p>  圖3-2 光筆的結(jié)構(gòu)圖</p><p>  3.2 32×32LED點陣的連接</p>

22、<p>  經(jīng)分析要想得到32×32的點陣需要用16個共陽型8×8點陣(其引腳圖如圖3-3所示)來構(gòu)建。其方法是將點陣對應(yīng)的行線和列線分別進行連接,使每一條行線引腳接一行32個LED,列線也相同。</p><p><b>  圖3-3LED點陣</b></p><p>  3.3 32×32LED點陣的驅(qū)動控制電路</p

23、><p>  32×32 LED點陣的行信息控制用2片74HC154,構(gòu)成5—32譯碼器,單片機口線控制其譯碼輸出。列的微亮掃描、點亮也分別用2片74HC154,4個片選分別單獨控制,微亮掃描(2.5V)、點亮(5V)電源分別通過三極管構(gòu)成的開關(guān)加到點陣的列控制端。由于整屏顯示是1024個燈循環(huán)亮,為提高顯示亮度,限流電阻取51歐姆(取消也可以,但為了防止制作調(diào)試過程中燒壞LED燈,不取消為好),電路如圖3

24、-4所示。</p><p>  微亮掃描時流過LED的電流為: (2.5-1.8)/51=13.7mA</p><p>  點亮點陣時流過LED的電流為: (5-1.8)/51=62.7mA</p><p>  流過LED電流雖然比較大,但時間很短,因此不會燒壞LED燈。</p><p>  圖3-4LED驅(qū)動電路</p>&l

25、t;p>  3.4 顯示電路部分功能及原理</p><p>  為了滿足系統(tǒng)在工作時能準(zhǔn)確顯示光筆對應(yīng)亮點所處的行列坐標(biāo)值,我們采用型號為LCM103的液晶顯示器顯示。LCM103為10位多功能通用型8段式液晶顯示模塊,內(nèi)含看門狗時鐘發(fā)生器2種頻率的蜂鳴驅(qū)動電路內(nèi)置顯示RAM,可顯示任意字段筆畫劃3-4線串行接口可與任何單片機接口。其接口應(yīng)用模塊如圖3-5所示:引腳排列圖如表3-1所示。</p>

26、<p>  圖3-5 LCD接口應(yīng)用模塊</p><p>  表3-1 LED接口引腳排列圖</p><p>  注:B 處焊盤為用戶需降低功耗時外加32.768KHz 晶體。A 處兩焊盤分別接VDD 與VLCD。</p><p>  3.5 鍵盤的使用及設(shè)計</p><p>  鍵盤是使用比較簡單的獨立式鍵盤,而且具有發(fā)光二極

27、管指示功能模塊。在程序中采用中斷掃描的方式,在沒有鍵操作時CPU執(zhí)行正常程序,只在有鍵操作時才處理鍵盤程序。其電路如圖3-6所示:</p><p>  圖3-6 獨立式鍵盤電路圖</p><p><b>  按鍵功能:</b></p><p>  按鍵一:實現(xiàn)點亮等功能;</p><p>  按鍵二:修改休眠時間;<

28、;/p><p>  按鍵三:實現(xiàn)多姿連寫時的保存與回放;</p><p>  按鍵四:實現(xiàn)整屏擦除于休眠喚醒</p><p>  3.6 光照的檢測與控制</p><p>  經(jīng)分析,想要實現(xiàn)當(dāng)環(huán)境光強改變時能自動連續(xù)調(diào)節(jié)屏上顯示亮度的要求,其關(guān)鍵是對點陣周圍環(huán)境光照的檢測與控制。我們通過硬件電路很好的完成了對光照的檢測?;驹硎怯肔M358與

29、光敏電阻夠成一恒流源并于三極管的基極連接,當(dāng)光敏電阻因光強的變化而改變其自身阻值時,三極管的基極電壓也會隨著變化。與其集電極連接的發(fā)光二極管的亮度也會伴隨著改變,以此判斷周圍光強的變化。電路如圖3-7所示:</p><p><b>  。</b></p><p>  圖3-7 光照檢測電路</p><p>  第四章 系統(tǒng)軟件設(shè)計</p&

30、gt;<p>  4.1主程序設(shè)計 </p><p>  主程序包括系統(tǒng)初始化,點陣掃描控制,液晶顯示,以及“反顯”、“擦除”等功能下數(shù)據(jù)處理程序,流程圖如圖4-1所示。其中點陣掃描控制程序,微亮掃描控制由單片機口控制對以譯碼器的片選和地址輸入,使點陣按行列有規(guī)律地循環(huán)點亮,由圖3-3知點亮顯示的列控制信息譯碼地址與微亮連接在一起,控制點亮的工作過程是通過判斷點陣顯示緩沖內(nèi)容對應(yīng)位的信息,控制其片

31、選,當(dāng)需要點亮?xí)r,控制片選有效,反之,控制片選無效,利用微亮掃描過程實現(xiàn)點亮控制。</p><p>  4.2 外中斷0服務(wù)程序(坐標(biāo)檢測)</p><p>  外中斷0是作為光筆的檢測使用,由圖3-2知,光筆碰觸顯示屏過程中,遇到發(fā)光點輸出翻轉(zhuǎn)的跳變信號,送給單片機中斷,作為中斷的觸發(fā)信號,由于中斷程序優(yōu)先執(zhí)行,打斷微亮掃描過程,在中斷服務(wù)程序中根據(jù)此時的行列掃描的序號,就可判斷光點的坐

32、標(biāo),進而為其他功能的實現(xiàn)提供依據(jù),流程圖如圖4-2所示</p><p><b>  圖4-2</b></p><p>  圖4-2 中斷程序框圖</p><p>  4.3.外中斷1服務(wù)程序(按鍵處理)</p><p>  外中斷1為按鍵操作處理程序,如圖4-3所示:</p><p>  圖4-3

33、 外中斷1服務(wù)程序框圖</p><p>  4.4.LCM103驅(qū)動程序設(shè)計</p><p>  LCM103采用的是串行接口,所有數(shù)據(jù)都是在脈沖的作用下一位一位按順序?qū)懭肽K內(nèi)部,由時序圖知數(shù)據(jù)線上信息是在脈沖上升沿寫入。寫命令的數(shù)據(jù)格式是12位,單個寫數(shù)據(jù)的格式是13位,寫數(shù)據(jù)也可以連續(xù)寫,由于每個字位占用內(nèi)部3個RAM空間存放字段碼,因此寫數(shù)據(jù)采用連續(xù)寫方式比較好。在數(shù)據(jù)連續(xù)寫格式中

34、,前面9位為模式位和模塊內(nèi)部RAM的起始地址,后面數(shù)據(jù)格式是每3位加1個0,取三個一組構(gòu)成一個字位的信息,也是12位,這樣就可以將所有寫操作(命令和數(shù)據(jù))分為寫9位信息和寫12位信息兩個功能程序。</p><p>  顯示字段的排列方式與LED數(shù)碼管一致,每位字段編碼由8段構(gòu)成(顯示RAM</p><p>  筆畫表),占用連續(xù)的3個地址空間,但在寫入格式中每個數(shù)據(jù)是4位,編寫字符的字段碼

35、時要給每個數(shù)據(jù)后加0,0~9顯示字符的字段碼如表4-1所示。</p><p>  表4-1 0~9顯示字符的字段碼</p><p>  在寫數(shù)據(jù)送顯示之前,先按照初始化步驟進行初始化,然后寫數(shù)據(jù),程序見附錄。</p><p>  第五章 系統(tǒng)測試與結(jié)果</p><p>  5.1 劃亮反顯擦除拖移的測試和結(jié)果</p><p

36、>  各模塊均調(diào)通,將調(diào)好的模塊連在一起,加上5v電壓源,啟動進行系統(tǒng)初始化。按鍵進入點亮模式,用光電筆在LED點陣書寫顯示屏上接觸,可以看到接觸的點點亮,LCD上顯示亮點的精確坐標(biāo)。用光筆快速的在書寫顯示屏上劃過,發(fā)現(xiàn)劃過的地方變亮,多次操作都能實現(xiàn)。再次按鍵,進入反顯模式,光筆劃過,發(fā)現(xiàn)經(jīng)過的地方?jīng)]有亮其他的部分高亮,反顯測試正常。再次按鍵進入擦除模式,用光筆在屏幕上劃過,顯示屏亮的地方變暗了。再按一次鍵可以看到整屏由亮變暗,

37、實現(xiàn)了擦除這一功能。最后進入多字連寫模式和區(qū)域拖動模式用光筆在LED點陣顯示屏上寫四個字,最后在屏上循環(huán)顯示。最后對寫的字用筆圈起來可以用筆移動。實現(xiàn)了對象拖移功能。經(jīng)過反復(fù)的測試,所有的功能都能很好的實現(xiàn),系統(tǒng)正常。</p><p>  5.2屏亮自動調(diào)節(jié)測試和結(jié)果</p><p>  外部光環(huán)境人為地改變后,測試LED點陣書寫顯示屏的亮度是否發(fā)生變化如果發(fā)生變化,則表明能夠自動調(diào)節(jié),結(jié)

38、果屏亮隨外部環(huán)境的變化而改變,系統(tǒng)正常。</p><p>  5.3 超時關(guān)顯示節(jié)電測試和結(jié)果</p><p>  加5v電壓啟動系統(tǒng),對系統(tǒng)初始化。設(shè)定待機關(guān)顯示的時間,在測試點接入萬用表,不進行任何操作到設(shè)定的時間,看顯示屏是否自動關(guān)閉。結(jié)果書寫顯示屏自動關(guān)閉,電路板測試點上的電流小于5mA。表明測試正常,完成系統(tǒng)要求。</p><p><b>  總

39、結(jié)及展望</b></p><p>  本作品完成了題目的基本要求和發(fā)揮部分的全部要求,系統(tǒng)性能良好。通過對作品的各項進行了優(yōu)化,使系統(tǒng)的性能有了提高。應(yīng)用74HC154譯碼器設(shè)計32×32點陣的行列驅(qū)動控制信號,掃描速度滿足設(shè)計要求。</p><p>  雖然這次設(shè)計滿足了課題的要求,但在很多方面都有許多的不足,還不能滿足正常的書寫需求,但在設(shè)計的過程中提高了自己學(xué)習(xí)

40、思考的能力,讓自己能更好的去面對未來的工作。</p><p><b>  致謝</b></p><p>  通過這次畢業(yè)設(shè)計,綜合的應(yīng)用并學(xué)習(xí)了自己的專業(yè)知識,得到了許多平時很難道道的知識及經(jīng)驗。在設(shè)計的過程中我得到了很多其他老師和同學(xué)的幫助,從人才完成了這次設(shè)計。在本論文的寫作過程中,我的導(dǎo)師徐江海老師傾注了大量的心血,從選題到開題報告,從寫作提綱,到一遍又一遍地指

41、出每稿中的具體問題,嚴(yán)格把關(guān),循循善誘,在此我表示衷心感謝。同時我還要感謝在我學(xué)習(xí)期間給我極大關(guān)心和支持的各位老師以及關(guān)心我的同學(xué)和朋友。</p><p><b>  參考文獻</b></p><p>  [1]周航慈,周立功,朱旻等.PHILIPS 51LPC系列單片機原理及應(yīng)用設(shè)計[M].北京:北京航空航天大學(xué)出版社,2001.</p><p&

42、gt;  [2]何立民.單片機應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1999</p><p>  附錄1 總電原理圖(單片機系統(tǒng)與點陣驅(qū)動電路)</p><p>  附錄2 總電原理圖(32×32點陣連接電路)</p><p><b>  附錄3 源程序</b></p><p>  #include

43、 "reg52.h"</p><p>  #include"intrins.h"</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit cs103=P1^0; // 液晶&

44、lt;/p><p>  sbit wr103=P1^1; // 液晶</p><p>  sbit da103=P1^2; // 液晶</p><p>  sbit csH=P2^6;//</p><p>  sbit p14=P1^4;</p><p>  sbit p15=P1^5;</p>

45、<p>  sbit p16=P1^6;</p><p>  sbit p17=P1^7;</p><p>  uint idata zb[32][2]={0}; //點亮存儲單元</p><p>  uint xdata zb1[32][2]={0}; //第一個字存儲</p><p>  uint xdata zb2[3

46、2][2]={0}; //第二個字存儲</p><p>  uint xdata zb3[32][2]={0}; // 第三個字存儲</p><p>  uint xdata zb4[32][2]={0}; // 第四個字存儲</p><p>  uchar xsdy0=2; // 顯示緩沖,低位</p><p>  uchar x

47、sdy1=1;</p><p>  uchar xsdy2=11;</p><p>  uchar xsdy3=3;</p><p>  uchar xsdy4=10;</p><p>  uchar xsdy5=5;</p><p>  uchar xsdy6=6;</p><p>  uch

48、ar xsdy7=11;</p><p>  uchar xsdy8=8;</p><p>  uchar xsdy9=9; // 顯示緩沖,高位</p><p>  uchar hsmcs=0; //行掃描控制</p><p>  uchar lsmcs=0; //列掃描控制</p><p>  

49、uchar p0hc; //P0緩沖</p><p>  uchar p2hc; //P2緩沖</p><p>  bit bxzb=0; //</p><p>  bit bhzl=0;</p><p>  bit blzl=0; //</p><p>  bit f_x

50、_flag; //反顯狀態(tài)標(biāo)志</p><p>  bit zp_cc_flag; //整屏擦除狀態(tài)標(biāo)志</p><p>  bit bh_cc_flag; //筆畫擦除標(biāo)志</p><p>  bit lz_dx_flag; //連字多寫標(biāo)志</p><p>  bit shijiang_flag;

51、 //時間設(shè)置標(biāo)志</p><p>  bit xz_bc_flag; //寫字保存標(biāo)志</p><p>  bit hx_flag; //喚醒標(biāo)志</p><p>  bit xm_flag; //休眠</p><p>  bit yjxs_flag;</p><

52、;p>  uchar js_5ms;</p><p>  uchar js_s;</p><p>  uchar js_fen;</p><p>  uchar js_fen_set=5;</p><p>  uchar clzl=0;</p><p>  uint dlzbw; //點亮坐標(biāo)位</p&g

53、t;<p>  uint dlzbw1; //點亮坐標(biāo)位 緩沖</p><p>  uchar z_t=0; //顯示方式狀態(tài)</p><p>  uchar xzgs;//寫字個數(shù)</p><p>  uchar xs_s;//字符顯示時間</p><p>  uchar xs_weishu;</p>&

54、lt;p>  sfr AUXR = 0x8e; //擴展RAM的SFR</p><p>  uint code lcd[]= //字段編碼</p><p>  {0x86e0,0x8200,0x8ca0,0x8e20,0x8a40,0x0e60,0x0ee0,0x8600,0x8ee0,0x8e60,0x0000,0x0800};</p><p>  

55、// 0 1 2 3 4 5 6 7 8 9 空 -</p><p>  void delay(uint x) //12MHZ晶振延時Xms的子函數(shù)</p><p><b>  {</b></p><p><b>  uint

56、y=0;</b></p><p>  while(x>0){</p><p>  while(y<1000) y++;</p><p><b>  x--;</b></p><p><b>  }</b></p><p><b>  }<

57、;/b></p><p>  void del() //延時函數(shù)</p><p><b>  {</b></p><p><b>  uchar j;</b></p><p>  for(j=0;j<10;j++);</p><p><b&

58、gt;  }</b></p><p>  void write12(int data1) //液晶寫12位數(shù)據(jù)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i=0;i<12;i++)</

59、p><p><b>  {</b></p><p>  wr103=0; //wr=0</p><p>  if((data1&0x8000)!=0){//最高位為1</p><p>  da103=1; //輸出1</p><p><b>  }</b>&l

60、t;/p><p>  else {//最高位為0</p><p>  da103=0; //輸出0</p><p><b>  }</b></p><p><b>  del();</b></p><p>  wr103=1; //上

61、升沿</p><p><b>  del();</b></p><p>  data1<<=1; //數(shù)據(jù)整體左移1位</p><p><b>  }</b></p><p><b>  }</b></p><p>  

62、void write9(int data1) //液晶寫9位數(shù)據(jù)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i=0;i<9;i++)</p><p><b>  {</b><

63、/p><p>  wr103=0; //wr=0</p><p>  if((data1&0x8000)!=0){//最高位為1</p><p>  da103=1; //輸出1</p><p><b>  }</b></p><p>  else {

64、//最高位為0</p><p>  da103=0; //輸出0</p><p><b>  }</b></p><p><b>  del();</b></p><p>  wr103=1; //上升沿</p><p><b>  del();&l

65、t;/b></p><p>  data1<<=1; //數(shù)據(jù)整體左移1位</p><p><b>  }</b></p><p><b>  }</b></p><p>  void yjcsh() //液晶初始化</p><p&

66、gt;<b>  {</b></p><p><b>  uint k;</b></p><p>  for(k=0;k<2000;k++);</p><p>  cs103=0; //cs=0</p><p><b>  del();</b></p>

67、<p>  write12(0x8480); //定義模塊</p><p><b>  del();</b></p><p>  cs103=1; //cs=1</p><p><b>  del();</b></p><p>  cs103=0; //cs=0

68、</p><p><b>  del();</b></p><p>  write12(0x8300); //定義內(nèi)部振蕩方式</p><p><b>  del();</b></p><p>  cs103=1; //cs=1</p><p><b&g

69、t;  del();</b></p><p>  cs103=0; //cs=0</p><p><b>  del();</b></p><p>  write12(0x8020); //開振蕩器</p><p><b>  del();</b></p>&

70、lt;p>  cs103=1; //cs=1</p><p><b>  del();</b></p><p>  cs103=0; //cs=0</p><p><b>  del();</b></p><p>  write12(0x8060); //開顯示器<

71、;/p><p><b>  del();</b></p><p>  cs103=1; //cs=1</p><p><b>  }</b></p><p>  void yjxs() //液晶顯示</p><p><b>  {</b>

72、</p><p>  cs103=0; //cs=0</p><p><b>  del();</b></p><p>  write9(0xa000); //連續(xù)寫,從地址00000開始</p><p>  write12(lcd[js_s%10]);</p><p>  write

73、12(lcd[js_s/10]);</p><p>  write12(lcd[xsdy2]);</p><p>  write12(lcd[js_fen]);</p><p>  write12(lcd[xsdy4]);</p><p>  write12(lcd[xsdy5]);</p><p>  write12

74、(lcd[xsdy6]);</p><p>  write12(lcd[xsdy7]);</p><p>  write12(lcd[xsdy8]);</p><p>  write12(lcd[xsdy9]);</p><p><b>  del();</b></p><p>  cs103=1

75、; //cs=1,寫結(jié)束</p><p><b>  }</b></p><p>  void del1() //掃描延時函數(shù)</p><p><b>  {</b></p><p><b>  uchar j;</b></p><p>

76、  for(j=0;j<30;j++);</p><p><b>  }</b></p><p>  void lsm() //列掃描函數(shù)</p><p>  { ucharj;</p><p>  dlzbw=0x0001;</p><p>  lsmcs=0;

77、 // 列次數(shù)初值</p><p>  p0hc=p0hc&0xf0;//p0緩沖低4位清0</p><p>  p0hc=p0hc|lsmcs;//p0緩沖添列信息</p><p>  P0=p0hc; //微亮輸出列</p><p>  for(j=0;j<16;j++) { //zb[hsmcs] //點亮信息&l

78、t;/p><p><b>  if(bhzl){</b></p><p>  dlzbw1=zb[hsmcs+16][clzl]&dlzbw;</p><p><b>  }</b></p><p><b>  else {</b></p><p>

79、;  dlzbw1=zb[hsmcs][clzl]&dlzbw;</p><p><b>  }</b></p><p>  if (dlzbw1==0) { //不亮</p><p>  p0hc=p0hc|0xc0;</p><p><b>  }</b></p><

80、p>  else { //點亮</p><p>  if(bhzl){ //高</p><p>  p0hc=p0hc|0x40;</p><p>  p0hc=p0hc&0x7f;</p><p><b>  }</b></p><p>  else {

81、 //低</p><p>  p0hc=p0hc|0x80;</p><p>  p0hc=p0hc&0xbf;</p><p><b>  }</b></p><p><b>  }</b></p><p>  p0hc=p0hc&0xf0;//p0緩沖低

82、4位清0</p><p>  p0hc=p0hc|lsmcs;//p0緩沖添列信息</p><p>  P0=p0hc; //微亮輸出列</p><p>  del1(); //亮延時</p><p><b>  lsmcs++;</b></p><p>  dlzbw = _irol_(dlz

83、bw,1); //左移1位</p><p><b>  }</b></p><p><b>  lsmcs=15;</b></p><p>  p0hc=p0hc&0xf0;//p0緩沖低4位清0</p><p>  p0hc=p0hc|lsmcs;//p0緩沖添列信息</p>

84、<p>  P0=p0hc; //微亮輸出列</p><p><b>  }</b></p><p>  void dzsm()</p><p>  { uchark;</p><p>  p0hc=p0hc|0x20;// // 微亮片選低位</p><p>  p0h

85、c=p0hc&0xef;// // 微亮片選低位</p><p><b>  P0=p0hc;</b></p><p>  bhzl=0; //行小于16</p><p>  hsmcs=0; //行次數(shù)初值</p><p>  for(k=0;k<16;k++){ //

86、行循環(huán)16次 0~15行</p><p>  blzl=0; //列小于16</p><p><b>  clzl=0;</b></p><p>  p2hc=p2hc&0xbf; //p26</p><p>  p2hc=p2hc&0xf0; //</p><

87、p>  p2hc=p2hc|hsmcs;//p0緩沖添列信息</p><p>  P2=p2hc; //微亮輸出列</p><p>  lsm(); //調(diào)列掃描函數(shù)</p><p>  blzl=1; ////列大于16</p><p><b>  clzl=1;</b></p><p

88、>  p2hc=p2hc|0x40; //p26</p><p>  p2hc=p2hc|hsmcs;//p0緩沖添列信息</p><p>  P2=p2hc; //微亮輸出列</p><p>  lsm(); //調(diào)列掃描函數(shù)</p><p><b>  hsmcs++;</b></p>

89、<p><b>  }</b></p><p>  p0hc=p0hc|0x10;// // 微亮片選低位</p><p>  p0hc=p0hc&0xdf;// // 微亮片選低位</p><p><b>  P0=p0hc;</b></p><p>  bhzl=

90、1; //行大于16</p><p>  hsmcs=0; //行次數(shù)初值</p><p>  for(k=0;k<16;k++){ //行循環(huán)16次 16~31 行</p><p>  blzl=0; //列小于16</p><p><b>  clzl=0;</b>&

91、lt;/p><p>  p2hc=p2hc&0xbf; //p26</p><p>  p2hc=p2hc&0xf0; //</p><p>  p2hc=p2hc|hsmcs;//p0緩沖添列信息</p><p>  P2=p2hc; //微亮輸出列</p><p><b>  l

92、sm();</b></p><p>  blzl=1; //列大于16</p><p><b>  clzl=1;</b></p><p>  p2hc=p2hc|0x40; //p26</p><p>  p2hc=p2hc|hsmcs;//p0緩沖添列信息</p><p>

93、  P2=p2hc; //微亮輸出列</p><p><b>  lsm();</b></p><p><b>  hsmcs++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&

94、gt;  void zbhs() interrupt 0 // 坐標(biāo)顯示</p><p><b>  {</b></p><p>  uint zbw; //坐標(biāo)位初值</p><p>  xm_flag=0;</p><p><b>  js_s=0;</b></p>

95、<p><b>  js_5ms=0;</b></p><p>  js_fen=js_fen_set;</p><p>  if(bxzb==0){</p><p>  zbw=1; ////坐標(biāo)位初值=1</p><p>  zbw = _irol_(zbw,lsmcs); //左移到當(dāng)前列位</

96、p><p>  if(bh_cc_flag){ //筆畫反顯</p><p>  // bh_cc_flag=0;</p><p>  zbw=~zbw; //坐標(biāo)對于與0</p><p><b>  if(bhzl){</b></p><p><b> 

97、 if(blzl){</b></p><p>  zb[hsmcs+16][1]=zb[hsmcs+16][1]&zbw;//行大于16 列大于16</p><p><b>  }</b></p><p><b>  else {</b></p><p>  zb[hsmc

98、s+16][0]=zb[hsmcs+16][0]&zbw;//行大于16 列小于16</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else{//</b></p><p><b>  if(blz

99、l){</b></p><p>  zb[hsmcs][1]=zb[hsmcs][1]&zbw;//行小于16 列大于16</p><p><b>  }</b></p><p><b>  else {</b></p><p>  zb[hsmcs][0]=zb[hsmc

100、s][0]&zbw;//行小于16 列小于16</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  else{ //點亮對于坐標(biāo)位</p&g

101、t;<p><b>  if(bhzl){</b></p><p>  if(blzl){ //</p><p>  zb[hsmcs+16][1]=zb[hsmcs+16][1]|zbw;//行大于16 列大于16</p><p><b>  }</b></p><p><

102、b>  else {</b></p><p>  zb[hsmcs+16][0]=zb[hsmcs+16][0]|zbw;//行大于16 列小于16</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else

103、{//</b></p><p><b>  if(blzl){</b></p><p>  zb[hsmcs][1]=zb[hsmcs][1]|zbw;//行小于16 列大于16</p><p><b>  }</b></p><p><b>  else {</b

104、></p><p>  zb[hsmcs][0]=zb[hsmcs][0]|zbw;//行小于16 列小于16</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

105、;  if(bhzl){hsmcs=hsmcs+16; }//行大于16</p><p>  if(blzl){lsmcs=lsmcs+16; }//列大于16</p><p>  xsdy9=hsmcs/10; //坐標(biāo)計算送顯示</p><p>  xsdy8=hsmcs%10;</p><p>  xsdy6=lsmcs/10;

106、</p><p>  xsdy5=lsmcs%10;</p><p><b>  }</b></p><p>  bxzb=1; //坐標(biāo)顯示標(biāo)志</p><p><b>  }</b></p><p>  void timer0() interrupt

107、 1</p><p><b>  {</b></p><p>  TH0=(65536-5000)/256;</p><p>  TL0=(65536-5000)%256;</p><p><b>  js_5ms++;</b></p><p>  if(js_5ms==2

108、00)</p><p><b>  {</b></p><p><b>  js_5ms=0;</b></p><p>  yjxs_flag=1;</p><p><b>  xs_s++;</b></p><p>  if(xs_s==3)</

109、p><p><b>  {</b></p><p><b>  xs_s=0;</b></p><p>  xs_weishu++;</p><p>  if( xs_weishu==5 )</p><p><b>  {</b></p>&l

110、t;p>  xs_weishu=0;</p><p>  } </p><p><b>  }</b></p><p>  if(js_s) //秒倒計時</p><p><b>  {</b></p><p><b> 

111、 js_s--;</b></p><p><b>  }</b></p><p><b>  else {</b></p><p>  if(js_fen) //分倒計時</p><p><b>  {</b></p><p><b

112、>  js_fen--;</b></p><p><b>  js_s=59;</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  xm_flag=1;//倒計時結(jié)束,進入休眠</p>

113、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void anjian() interrupt 2 /

114、/按鍵</p><p><b>  {</b></p><p>  p14=1;p15=1;p16=1;p17=1; //按鍵輸入口置1</p><p>  if(p14==0){//狀態(tài)切換</p><p>  z_t++; //</p><p>  if(z_t==1){<

115、;/p><p>  f_x_flag=1; //反顯狀態(tài)</p><p>  bh_cc_flag=0;</p><p><b>  }</b></p><p>  if(z_t==2){</p><p>  bh_cc_flag=1; //筆畫擦除</p><p>  z

116、b[0][0]=0x0000|0x0008;</p><p><b>  }</b></p><p>  if(z_t==3){</p><p>  lz_dx_flag=1; //連字多寫</p><p>  zb[0][0]=0x0000|0x0210;</p><p>  bh_cc_fl

117、ag=0;</p><p><b>  }</b></p><p>  if (z_t>=6){z_t=0;}</p><p><b>  }</b></p><p>  if(p15==0){</p><p>  bh_cc_flag=0;</p>&l

118、t;p>  shijiang_flag=1; //時間設(shè)置</p><p><b>  }</b></p><p>  if(p16==0){//寫字保存</p><p>  xz_bc_flag=1;</p><p>  bh_cc_flag=0;</p><p><b>  

119、}</b></p><p>  if(p17==0){</p><p>  // hx_flag=1;//喚醒</p><p>  zp_cc_flag=1;//整屏擦除狀態(tài)</p><p>  bh_cc_flag=0;</p><p><b>  }</b></p>

120、<p><b>  }</b></p><p>  /*************************************/</p><p>  void key()</p><p>  { uchar m;</p><p>  if(f_x_flag){

121、//反顯狀態(tài)</p><p>  f_x_flag=0;</p><p>  lz_dx_flag=0;</p><p>  zb[0][0]=0x0000|0x0004;</p><p>  zb[0][1]=~zb[0][1];</p><p>  for(m=1;m<32;m++){</p>

122、<p>  zb[m][0]=~zb[m][0];zb[m][1]=~zb[m][1];</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(zp_cc_flag){</p><p><b>  //整屏擦除狀態(tài)</b&

123、gt;</p><p>  lz_dx_flag=0;</p><p>  zp_cc_flag=0;</p><p>  zb[0][0]=0x0000|0x0002;</p><p>  zb[0][1]=0;</p><p>  for(m=1;m<32;m++){</p><p>

124、  zb[m][0]=0;zb[m][1]=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(shijiang_flag){ //</p><p>  shijiang_flag=0;</p><

125、p>  lz_dx_flag=0;</p><p>  zb[0][0]=0x0000|0x0040; //時間設(shè)置</p><p><b>  js_fen++;</b></p><p>  if(js_fen==6)</p><p><b>  {</b></p><p

126、><b>  js_fen=1;</b></p><p><b>  }</b></p><p>  js_fen_set=js_fen;</p><p><b>  js_s=0;</b></p><p><b>  yjxs();</b><

127、/p><p><b>  }</b></p><p>  if( xz_bc_flag){ //寫字保存</p><p>  xz_bc_flag=0;</p><p><b>  xzgs++;</b></p><p>  if(xzgs==1)</

128、p><p><b>  { </b></p><p>  for(m=0;m<32;m++){</p><p>  zb1[m][0]=zb[m][0];zb1[m][1]=zb[m][1];</p><p><b>  }</b></p><p><b>  }

129、</b></p><p>  if(xzgs==2)</p><p><b>  {</b></p><p>  for(m=0;m<32;m++){</p><p>  zb2[m][0]=zb[m][0];zb2[m][1]=zb[m][1];</p><p><b&g

130、t;  }</b></p><p><b>  }</b></p><p>  if(xzgs==3)</p><p><b>  {</b></p><p>  for(m=0;m<32;m++){</p><p>  zb3[m][0]=zb[m][0]

131、;zb3[m][1]=zb[m][1];</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(xzgs==4)</p><p><b>  {</b></p><p>  for(m=0;m<3

132、2;m++){</p><p>  zb4[m][0]=zb[m][0];zb4[m][1]=zb[m][1];</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(xzgs==5)</p><p><b>  

133、{</b></p><p><b>  xzgs=0;</b></p><p>  // 定時器T0輪流顯示四個字 </p><p><b>  }</b></p><p><b>  }</b></p><p>  if(hx_fla

134、g) //喚醒</p><p>  { lz_dx_flag=0;</p><p>  hx_flag=0;</p><p>  xm_flag=0;</p><p><b>  js_s=0;</b></p><p><b>  

135、js_5ms=0;</b></p><p>  js_fen=js_fen_set; //</p><p>  // 控制繼電器 </p><p><b>  //送顯示</b></p><p><b>  }</b></p><p&g

136、t;<b>  }</b></p><p>  void xianshi_zf()</p><p>  { uchar s;</p><p>  if(lz_dx_flag)</p><p><b>  {</b></p><p>  if(xs_weishu==1)<

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論