版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 摘要</b></p><p> 系統(tǒng)以高速單片機STCF1132為核心,設(shè)計并制作了一個基于32×32點陣LED模塊顯示屏。該點陣可以實現(xiàn)掃描微亮和顯示點亮兩種工作模式,在掃描過程中通過自制光筆檢測,獲取行列坐標信息,實現(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ù)程序(坐標檢測)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> 本課題來源于全國大學生電子設(shè)
10、計競賽LED點陣書寫顯示屏,它是一種控制半導體發(fā)光二極管的顯示裝置,其主要功能是實現(xiàn)“點亮、劃亮、反顯、整屏擦除、筆畫擦除、連寫多字、對象拖移”等書寫顯示。</p><p> 1.2設(shè)計任務(wù)及要求</p><p> 設(shè)計并制作一個基于32×32點陣LED模塊的書寫顯示屏,其系統(tǒng)結(jié)構(gòu)如圖1-1所示。在控制器的管理下,LED點陣模塊顯示屏工作在人眼不易覺察的掃描微亮和人眼可見的顯
11、示點亮模式下;當光筆觸及LED點陣模塊表面時,先由光筆檢測觸及位置處LED點的掃描微亮以獲取其行列坐標,再依據(jù)功能需求決定該坐標處的LED是否點亮至人眼可見的顯示狀態(tài),從而在屏上實現(xiàn)“點亮、劃亮、反顯、整屏擦除、筆畫擦除、連寫多字、對象拖移”等書寫顯示功能。</p><p> 圖1-1 LED點陣書寫顯示屏系統(tǒng)結(jié)構(gòu)示意圖</p><p> 設(shè)計的最終要求是:在點亮功能下當光筆接觸屏上某
12、點LED時,能即時點亮該LED;在劃亮功能下當光筆快速劃過時,能同步點亮劃過的各LED,其速度要求2S內(nèi)能劃過并點亮40點LED;在反顯功能下能對屏上顯示的信息實現(xiàn)反向顯示;在屏幕擦除功能下能實現(xiàn)對屏上所顯示信息整屏擦除;在筆畫擦除功能下,能用光筆擦除屏上所顯漢字的筆畫;在連寫多字功能下,能結(jié)合自選的擦除方式,在30S內(nèi)以劃亮方式寫出四個漢字且存入機內(nèi);在對象拖移功能下,能用光筆將選定顯示內(nèi)容在屏上進行拖移,先用光筆以劃亮方式在屏上圈定
13、欲拖移顯示對象,再用光筆將該對象拖移到屏上另一位置;當光強改變時,能自動連續(xù)調(diào)節(jié)屏上顯示亮度;當光筆連續(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)置振蕩器和復位,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)精準識別的效果。</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)部。與此同時,用一彈簧套在空管外部,并將其底不固定,這樣,當筆管在點陣屏上上下抖動時,內(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)在工作時能準確顯示光筆對應(yīng)亮點所處的行列坐標值,我們采用型號為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)當環(huán)境光強改變時能自動連續(xù)調(diào)節(jié)屏上顯示亮度的要求,其關(guān)鍵是對點陣周圍環(huán)境光照的檢測與控制。我們通過硬件電路很好的完成了對光照的檢測?;驹硎怯肔M358與
29、光敏電阻夠成一恒流源并于三極管的基極連接,當光敏電阻因光強的變化而改變其自身阻值時,三極管的基極電壓也會隨著變化。與其集電極連接的發(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、選,當需要點亮時,控制片選有效,反之,控制片選無效,利用微亮掃描過程實現(xiàn)點亮控制。</p><p> 4.2 外中斷0服務(wù)程序(坐標檢測)</p><p> 外中斷0是作為光筆的檢測使用,由圖3-2知,光筆碰觸顯示屏過程中,遇到發(fā)光點輸出翻轉(zhuǎn)的跳變信號,送給單片機中斷,作為中斷的觸發(fā)信號,由于中斷程序優(yōu)先執(zhí)行,打斷微亮掃描過程,在中斷服務(wù)程序中根據(jù)此時的行列掃描的序號,就可判斷光點的坐
32、標,進而為其他功能的實現(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上顯示亮點的精確坐標。用光筆快速的在書寫顯示屏上劃過,發(fā)現(xiàn)劃過的地方變亮,多次操作都能實現(xiàn)。再次按鍵,進入反顯模式,光筆劃過,發(fā)現(xiàn)經(jīng)過的地方?jīng)]有亮其他的部分高亮,反顯測試正常。再次按鍵進入擦除模式,用光筆在屏幕上劃過,顯示屏亮的地方變暗了。再按一次鍵可以看到整屏由亮變暗,
37、實現(xiàn)了擦除這一功能。最后進入多字連寫模式和區(qū)域拖動模式用光筆在LED點陣顯示屏上寫四個字,最后在屏上循環(huán)顯示。最后對寫的字用筆圈起來可以用筆移動。實現(xiàn)了對象拖移功能。經(jīng)過反復的測試,所有的功能都能很好的實現(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è)計的過程中提高了自己學習
40、思考的能力,讓自己能更好的去面對未來的工作。</p><p><b> 致謝</b></p><p> 通過這次畢業(yè)設(shè)計,綜合的應(yīng)用并學習了自己的專業(yè)知識,得到了許多平時很難道道的知識及經(jīng)驗。在設(shè)計的過程中我得到了很多其他老師和同學的幫助,從人才完成了這次設(shè)計。在本論文的寫作過程中,我的導師徐江海老師傾注了大量的心血,從選題到開題報告,從寫作提綱,到一遍又一遍地指
41、出每稿中的具體問題,嚴格把關(guān),循循善誘,在此我表示衷心感謝。同時我還要感謝在我學習期間給我極大關(guān)心和支持的各位老師以及關(guān)心我的同學和朋友。</p><p><b> 參考文獻</b></p><p> [1]周航慈,周立功,朱旻等.PHILIPS 51LPC系列單片機原理及應(yīng)用設(shè)計[M].北京:北京航空航天大學出版社,2001.</p><p&
42、gt; [2]何立民.單片機應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學出版社,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)標志</p><p> bit zp_cc_flag; //整屏擦除狀態(tài)標志</p><p> bit bh_cc_flag; //筆畫擦除標志</p><p> bit lz_dx_flag; //連字多寫標志</p><p> bit shijiang_flag;
51、 //時間設(shè)置標志</p><p> bit xz_bc_flag; //寫字保存標志</p><p> bit hx_flag; //喚醒標志</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; //點亮坐標位</p&g
53、t;<p> uint dlzbw1; //點亮坐標位 緩沖</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 // 坐標顯示</p><p><b> {</b></p><p> uint zbw; //坐標位初值</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; ////坐標位初值=1</p><p> zbw = _irol_(zbw,lsmcs); //左移到當前列位</
96、p><p> if(bh_cc_flag){ //筆畫反顯</p><p> // bh_cc_flag=0;</p><p> zbw=~zbw; //坐標對于與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{ //點亮對于坐標位</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; //坐標計算送顯示</p><p> xsdy8=hsmcs%10;</p><p> xsdy6=lsmcs/10;
106、</p><p> xsdy5=lsmcs%10;</p><p><b> }</b></p><p> bxzb=1; //坐標顯示標志</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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- led點陣顯示屏設(shè)計
- led點陣顯示畢業(yè)論文
- led點陣顯示畢業(yè)論文
- led點陣顯示屏課程設(shè)計
- 16 16led點陣顯示屏
- 漢字LED點陣顯示.doc
- 漢字LED點陣顯示.doc
- 畢業(yè)設(shè)計-----led點陣顯示屏
- 微機控制LED點陣顯示屏.pdf
- 畢業(yè)設(shè)計----led點陣顯示屏
- 畢業(yè)論文--動態(tài)led點陣顯示屏設(shè)計與制作
- led點陣書寫顯示屏9.13_ii
- led點陣顯示屏實驗研究報告
- LED漢字點陣顯示系統(tǒng)設(shè)計.pdf
- led點陣顯示屏畢業(yè)設(shè)計文獻綜述
- 16x16點陣led顯示屏畢業(yè)論文
- eda(led點陣顯示屏控制系統(tǒng)設(shè)計)
- LED漢字點陣顯示系統(tǒng)設(shè)計.pdf
- 基于51單片機的led點陣顯示屏-畢業(yè)論文
- led點陣顯示及設(shè)計
評論
0/150
提交評論