漢字點陣顯示屏設計報告_第1頁
漢字點陣顯示屏設計報告_第2頁
漢字點陣顯示屏設計報告_第3頁
漢字點陣顯示屏設計報告_第4頁
漢字點陣顯示屏設計報告_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

aaaa廣西交通職業(yè)技術學院信息工程系作品設計報告書課程名稱電子電路設計與制作題 目 16*16漢字點陣顯示屏班級電信2011-1班學號 007032姓名 范杰任課老師 韋家正二O一三年一月

目錄卩TOC\o"1-5"\h\z摘要 1一、 系統(tǒng)方案選擇和論證 1設計要求 1系統(tǒng)基本方案 1主控電路選擇 1點陣顯示屏部分 1顯示屏控制部分 2二、 電路模塊的設計與分析 2系統(tǒng)程序的設計 2單片機系統(tǒng)及外圍電路 3LED點陣顯示 7漢字掃描的原理 8方案的實現(xiàn) 8三、 系統(tǒng)軟件設計 9四、 系統(tǒng)測試與分析 11點陣顯示屏的仿真與程序調(diào)試 11整機測試 12系統(tǒng)主程序 12系統(tǒng)測試結果分析 12五、 設計制作總結 12總結 12\o"CurrentDocument"致謝詞 13\o"CurrentDocument"六、 參考文獻 13\o"CurrentDocument"附錄一:系統(tǒng)主要元件清單 14摘要卩摘要led點陣顯示屏作為一種新興的顯示器件,是由多個獨立的高亮度的LED發(fā)光二極管封裝而成。LED點陣顯示屏可以顯示數(shù)字或符號,通常用來顯示時間、速度、系統(tǒng)狀態(tài)等靈活的動態(tài)顯示。文章給出了一種基于MCS-51/52單片機的16X16點陣LED顯示屏的設計方案,包括系統(tǒng)具體的硬件設計方案,軟件流程圖和匯編語言程序等方面內(nèi)容。在負載范圍內(nèi),只需通過簡單的級聯(lián)就可以對顯示屏進行擴展,是一種成本低廉、亮度高、工作電壓低、功耗小、微型化、易與集成電路匹配、驅(qū)動簡單、壽命長、耐沖擊、性能穩(wěn)定的圖文顯示方案?!酢魽bstractLEDdotmatrixdisplay,asanewdisplaydevice,byanumberofindependenthigh-brightnessLEDlight-emittingdiodepackages.LEDdotmatrixdisplaycandisplaynumbersorsymbols,usuallyusedtodisplaytime,speed,systemstatus,andaflexibledynamicdisplay.Paper,amicrocomputer-basedMCS-51/5216X16dotmatrixLEDdisplaydesign,includingthesystemspecifichardwaredesign,softwareaaaaflowchartsandassemblylanguageprogramsandotheraspects.Withintheloadrange,bysimplycascadingJiuexpansioncanrightdisplayJinXing,isalowcost,highbrightness,lowvoltageGongHaoXiao,miniaturization,YiYuICmatch,QuDongsimple,ShouMinglong,impactresistance,stableperformance,graphicsanddisplayoptions.―、系統(tǒng)方案選擇和論證1.1設計要求基本要求:要求點陣顯示屏能夠顯示中文漢字、英文字母、阿拉伯數(shù)字等信息。要求點陣顯示屏能夠顯示三角形、矩形等各類簡單的圖形。要求通過按鍵進行顯示模式(漢字、英文、數(shù)字、圖形)的切換。要求整個系統(tǒng)只使用兩節(jié)1.5V的電池進行供電。發(fā)揮要求:要求所顯示的內(nèi)容能夠?qū)崿F(xiàn)上、下、左、右的移動功能。移動方向和移動速度(至少分三個等級)可以通過按鍵進行設置。顯示屏能夠通過紅外遙控的方式進行控制2.1系統(tǒng)基本方案主控電路選擇方案一:數(shù)字電路控制的原理是LED點陣顯示屏由單片機控制電路和顯示驅(qū)動電路兩大部分組成。一般的單片機控制部分采用ATMEL公司的AT89S51/52系列單片機,顯示驅(qū)動部分由4片8X8LED點陣模塊和相應的驅(qū)動電路組成,位碼掃描信號和段碼信號都由單片機提供,并且AT89S52單片機構成的主控電路,支持ISP下載技術,控制操作簡單,價格低廉,通用性強。方案二:由CPLD器件組成的控制電路,具有很高的可靠性和設計靈活性,所實現(xiàn)的顯示效果樣式較多,但采用可編程邏輯器件CPLD的設計成本相對較高。由于采用由單片機組成的控制電路已能完成設計的要求,且其性價比要優(yōu)于采用由CPLD組成的控制電路。因此,主控電路采用方案一作為控制電路。點陣顯示屏部分方案一:串行方式顯示。這種方式可同時顯示4個8X8漢字點陣的漢字、字符或數(shù)字。點陣顯示屏每個單元由4個8X8點陣LED顯示模塊、驅(qū)動器74HC154、數(shù)據(jù)移位寄存器74HC595和行驅(qū)動器組成,單元顯示屏可以接收控制器(主控制電路板)或上一級顯示單元模塊傳輸下來的數(shù)據(jù)信息和命令信息,并可將這些數(shù)據(jù)信息和命令信息不經(jīng)任何變化地再傳送到下一級顯示模塊單元中,因此顯示屏可擴展至更多的顯示單元,用于顯示更多的內(nèi)容。此方案為點陣顯示屏系統(tǒng)中比較常用的,所用器件也比較常用,容易買到。但是它存在一個致命的缺點,就是刷新速度不夠快。如果要驅(qū)動64列點陣顯示,通用51單片機會比較吃力,出現(xiàn)比較嚴重的閃爍停滯現(xiàn)象。此外,要實現(xiàn)文字的左右移動和調(diào)整移動速度等功能,都會給軟件設計帶來較多困難。方案二:并行方式顯示??梢酝ㄟ^鎖存器芯片來擴展I/O口,達到控制LED點陣的64個列線的目的。方案中運用16片鎖存器74HC154來組成8組雙緩沖寄存器。驅(qū)動LED點陣的8組列線,移位寄存器74HC595對LED點陣的16行進行掃描。在送每一行的數(shù)據(jù)到LED點陣前,先把數(shù)據(jù)分別送到第一級的8個74HC154,然后再給第二級的8個74HC154送鎖脈沖,數(shù)據(jù)一起輸出到LED點陣列中,這樣就避免了各行數(shù)據(jù)顯示不同步問題。由于并行數(shù)據(jù)傳輸速度比串行快,所以字符閃爍的問題得到較好地解決,文字左右aaaa/上下移動也比較容易控制。綜上所述,本作品制作最終選擇了方案二。2.1.3.顯示屏控制部分方案一:單機工作模式。采用一個單片機控制實現(xiàn)所有功能,其中包括LED點陣顯示屏的刷新顯示、模式選擇等。只用一個單片機控制點陣顯示屏可以使電路大大減化,軟件設計方面也容易實現(xiàn)。但是,將所有功能集成在一起,一片AT89S51/52單片機處理能力是不夠的。此時,單片機的CPU內(nèi)部資源已顯不足,會導致系統(tǒng)功能欠佳,達不到較好的性能。方案二:主從工作模式。采用主從單片機工作方式來控制整個系統(tǒng)。其中一個單片機用于控制LED點陣顯示,另外一個單片機用于擴展鍵盤、串口等工作。相對單機工作方式,主從工作模式的處理能力大大提高,并且分工明確,執(zhí)行速度得到很大的提高。雖然硬件電路以及軟件設計方面要求相對高了一些,更涉及到主從單片機通信問題。至此,為了更好地實現(xiàn)各項性能指標,本設計采用了這種方案。二、電路模塊的設計與分析2.1.系統(tǒng)程序的設計顯示屏軟件的主要功能是向屏體提供顯示數(shù)據(jù),并產(chǎn)生各種控制信號,使屏幕按設計的要求顯示。根據(jù)軟件分層次設計的原理,可以把顯示屏的軟件系統(tǒng)分為兩層;第一層是底層的顯示驅(qū)動程序,第二層是上層的系統(tǒng)應用程序。顯示驅(qū)動程序負責向屏體送顯示數(shù)據(jù),并負責產(chǎn)生行掃描信號和其他控制信號,配合完成LED顯示屏的掃描顯示工作。顯示驅(qū)動器程序由定時器T0中斷程序?qū)崿F(xiàn)。系統(tǒng)應用程序完成系統(tǒng)環(huán)境設置(初始化)、顯示效果處理等工作,由主程序來實現(xiàn)。從有利于實現(xiàn)較復雜的算法(顯示效果處理)和有利于程序結構化考慮,顯示屏程序適宜采用匯編語言編寫。16X16LED顯示屏電路大致上可以分成單片機系統(tǒng)及外圍電路、列驅(qū)動電路和行驅(qū)動電路三部分,系統(tǒng)框如下所示:草片機-|磯草片機-|磯2.2.單片機系統(tǒng)及外圍電路單片機采用MSC-51或其兼容系列芯片,采用12MHZ或更高頻率晶振,以獲得較高的刷新頻率,使顯示更穩(wěn)定。

RP1PD.DJAOjP0.2.WEP0.3ZW3PD.4.紂耳PU.5.W6pc.e/<ePU2頃39Lj2'RP1PD.DJAOjP0.2.WEP0.3ZW3PD.4.紂耳PU.5.W6pc.e/<ePU2頃39Lj2'33L1漑:37—124L351.4634L5■7~ir~■,s■■站.■-L7Q1關P2.Li7.tf:P2.1泗P2.2/A1DP2.3/A11P2.4/A12P2.6/A13P2.6/A14P2.7/A15P,上非山口P3.1/THDP3.2jTCiP3.3/imP3.4-1DP3-5."TI亟P3.7.-RD101617IDu1213El0C:i74154<TE-:T4.7K23'rr-顯示驅(qū)動程序在進入中斷后首先要對定時器TO重新賦初值,以保證顯示屏刷新率的穩(wěn)定,1/16掃描顯示屏的刷新率(幀頻)計算公式如下:刷頻率(幀頻)=1/16X=1/16Xf/12(65536-t)其中f位晶振頻率,七為定時器T。初值(工作在16位定時器模式)。然后顯示驅(qū)動程序查詢當前燃亮的行號,從顯示緩存區(qū)內(nèi)讀取下一行的顯示數(shù)據(jù),并通過串口發(fā)送給移位寄存器。為消除在切換行/列顯示數(shù)據(jù)的時候產(chǎn)生拖尾現(xiàn)象,驅(qū)動程序先要關閉顯示屏,即消隱。等顯示數(shù)據(jù)打入輸出鎖存器并鎖存,然后再輸出新的行/列號,重新打開顯示。aaaa圖1顯示驅(qū)動程序流程圖圖2顯示驅(qū)動電路2.3.LED點陣顯示從下圖5LED內(nèi)部結構可以看出,8X8點陣共需要64個發(fā)光二極管組成,且每個發(fā)光二極管是放置在行線和列線的交叉點上,當對應的某一列置1電平,某一行置。電平,則相應的二極管就亮。對應的一列為一根豎柱,或者對應的一行為一根橫柱,因此實現(xiàn)柱的亮的方法如下所述:一根豎柱:對應的列置1,而行則采用掃描的方法來實現(xiàn)。一根橫柱:對應的行置0,而列則采用掃描的方法來實現(xiàn)IjzSj卜IJCD.I貝, MJ" ?V.―FrG■■ I~M~1h.Jh.. —~~n1~f*",k*-j-#-■4*.■■■,知f,4\n?-■1■\r?~r?1j■IR\n^■l?r.-:rd*-■■■n*-1r^11AnF"p,一士■■■:*??lLcitL7十■hlIR“—wmiI¥■'ll「wI_H_-■w-■FPdF■npji『X j1!■M(r?-■Ul■A■1H1 mi11s1■H(r^\8X8點陣LE隋效電路圖5LED內(nèi)部結構LED點陣選用8x8模塊,每2塊排列成一個16x16的點陣,用于顯示一個漢字。點陣每一行的所有LED共陰極,每一列的所有LED共陽極。因為單片機I/O口的驅(qū)動能力有限,所以每一行LED陰極通過一個三極管9012(或者8550)與電源相連,I/O口僅需要提供幾個毫安的灌入電流即可控制其通斷。同一行漢字字模(即12個字節(jié))通過鎖存器74HC154并行送出后,由移位寄存器74HC595輸出行選通信號,來點亮該行的LED,接著再送下一行數(shù)據(jù),再選中下一行有效,直到16行全被掃描過一遍。至此,一幅完整的文字信息就顯現(xiàn)出來,然后按這種方式反復掃描,借助于程序的控制,即可實現(xiàn)信息從右至左aa(或者從上至下)的ZLED行掃描,

列順序輸出媽表延時以控制豆示斂巣(或者從上至下)的ZLED行掃描,

列順序輸出媽表延時以控制豆示斂巣循環(huán)處理聽示。圖6實驗程序框圖2.4.漢字掃描的原理漢字掃描顯示基本過程是這樣:通電后由于電阻,電容的作用,使單片機RST復位腳電平先高后低,從而達到復位。之后,在電阻、電容、晶振以及單片機內(nèi)部時鐘電路作用下,單片機89C51/52按照設定程序在P1和P3接口輸出與內(nèi)部漢字對應代碼電平送至LED點陣行選線(高電平驅(qū)動),同時在P1.0,P1.1,P1.2,P1.3接口輸出列選掃描信號(低電平驅(qū)動),從而選中相應象素LCD發(fā)光,并利用人眼視覺暫留特性合成整個漢字顯示。以UCDOS中文宋體字庫為例,每一個字由16行16列點陣組成顯示。即國標漢字庫中每一個字均由256點陣來表示。我們可以把每一個點理解為一個象素,而把每一個字字形理解為一幅圖像。事實上這個漢字屏不僅可以顯示漢字,也可以顯示在256象素范圍內(nèi)任何圖形。如查用8位AT89C51/52單片機控制,由于單片機總線為8位,一個字需要拆分為2個部分首先通過列掃描方法獲取漢字代碼。漢字可拆分為上部和下部,上部由8X16點陣組成,下部也由8X16點陣組成。漢字點陣顯示一般有點掃描、行掃描和列掃描3種。為了符合視覺暫留要求,點掃描方法掃描頻率必須大于16X64=1024Hz,周期小于1ms即可。行掃描和列掃描方法掃描頻率必須大于16X8=128Hz,周期小于7.8ms即可,但是一次驅(qū)動一列或一行(8顆LED)時需外加驅(qū)動電路提高電流,否則LED亮度會不足。aaaa2.5.方案的實現(xiàn)從理論上說,不論顯示圖形還是文字,只要控制組成這些圖形或文字的各個點所在的位置相對應的LED器件發(fā)光,就可以得到我們想要的顯示結果,這種同時控制各個發(fā)光點亮滅的方法稱為靜態(tài)驅(qū)動顯示方式。16x16的點陣共有256個發(fā)光二極管,顯然單片機沒有這么多的端口,如果采用鎖存器來擴展端口,按8位的鎖存器來計算,16x16的點陣需要256/8=32個鎖存器。這個數(shù)字很龐大,因為我們僅僅是16x16的點陣,在實際應用中的顯示屏往往要大得多,這樣在鎖存器上花的成本將是一個很龐大的數(shù)字。因此在實際應用中的顯示屏幾乎都不采用這種設計,而采用另外一種稱為動態(tài)掃描的顯示方法。動態(tài)掃描的意思簡單地說就是逐行輪流點亮。這樣掃描驅(qū)動電路就可以實現(xiàn)多行(比如16行)的同名列共用一套驅(qū)動器。具體就16x16的點陣來說,把所有同1行的發(fā)光管的陽極連在一起,把所有同一列的發(fā)光管的陰極連在一起(共陽極的接法),先送出對應第1行發(fā)光管亮滅的數(shù)據(jù)并鎖存,然后先通第1行使其燃亮一定時間,然后熄滅;再送出第2行的數(shù)據(jù)并鎖存,然后先通第2行使其燃亮相同的時間,然后熄滅;以此類推,第16行之后,又重新燃亮第1行,反復輪回。當這樣輪回的速度足夠快(每秒24次以上),由于人眼的視覺暫留現(xiàn)象,就能夠看到顯示屏上穩(wěn)定的圖形。采用掃描方式進行顯示時,每一行有一個行驅(qū)動器,各行的同名列共用一個驅(qū)動器。顯示數(shù)據(jù)通常存儲在單片機的存儲器中,按8位一個字節(jié)的形式順序排放。顯示時要把一行中各列的數(shù)據(jù)都傳送到相應的列驅(qū)動器上去,這就存在一個顯示數(shù)據(jù)傳輸?shù)膯栴}。從控制電路到列驅(qū)動器的數(shù)據(jù)傳輸可以采用并列方式或串行方式。顯然,采用并行方式時,從控制電路到列驅(qū)動器的線路數(shù)量大,相應的硬件數(shù)目多。當列數(shù)很多時,并列傳輸?shù)姆桨甘遣豢扇〉?。采用串行傳輸?shù)姆椒?,控制電路可以只用一根信號線,將列數(shù)據(jù)一位一位傳往列驅(qū)動器,在硬件方面無疑是十分經(jīng)濟的。但是,串行傳輸過程較長,數(shù)據(jù)按順序一位一位地輸出給列驅(qū)動器,只有當一行的各列數(shù)據(jù)都以傳輸?shù)轿恢?,這一行的各列才能并行地進行顯示。這樣,對于一行的顯示過程就可以分解成列數(shù)據(jù)準備(傳輸)和列數(shù)據(jù)顯示兩部分。對于串行傳輸方式來說,列數(shù)據(jù)準備時間可能相當長,在行掃描周期確定的情況下留給行顯示的時間就太少了,以致影響到led的亮度。解決串行傳輸中列數(shù)據(jù)準備和列數(shù)據(jù)顯示的時間矛盾問題,可以采用重疊處理的方法。即在顯示本行各列數(shù)據(jù)的同時,傳送下一列數(shù)據(jù),為了達到重疊處理的目的,列數(shù)據(jù)的顯示就需要具有所存功能。經(jīng)過上述分析,就可以歸納出列驅(qū)動器電路應具有的功能。對于列數(shù)據(jù)準備來說,它應能實現(xiàn)串入并處的移位功能;對于列數(shù)據(jù)顯示來說,應具有并行鎖存的功能。這樣,本行已準備好的數(shù)據(jù)打入并行鎖存器進行顯示時,串并移位寄存器就可以準備下一行的列數(shù)據(jù),而不會影響本行的顯示。三、系統(tǒng)軟件設計卩系統(tǒng)的軟件程序由匯編程序語言編寫,使用VW(偉福)編譯環(huán)境,詳細的程序流程圖發(fā)如下圖7所示,模式如圖8所示:< DI系統(tǒng)君始化

疝釘一—,讀取顯示的內(nèi)客送掃描脈沖送顯示的點陣敎圖7程序流程圖J顯示效果選擇,,丨/、+§靜左上打下字定移移顯時動動示顯顯顯示 示示i返回主程序圖8模式選擇aaaa四、系統(tǒng)測試與分析4.1點陣顯示屏的仿真與程序調(diào)試protues是一款比較常用的單片機仿真軟件,許多仿真與實際電路非常相似。為了盡可能確保實際電路能達到預期的效果,減少無用功,要對許多電路模塊的方案進行了仿真。對點陣顯示的處理與相應程序設計,可以使用protuesl進行仿真,旨在改善提高整機系統(tǒng)的硬件與軟件方案,提高系統(tǒng)運行效率與穩(wěn)定性。在點陣顯示方式的方案選擇上,通過不斷修改程序與串行電路接法后發(fā)現(xiàn)串行方式很難實現(xiàn)字幕的右移功能,調(diào)整字幕移動的速度也不方便。經(jīng)過分析,決定試用并行方式顯示,結果發(fā)現(xiàn)這種方式電路不算復雜,并且給程序設計帶來很多便利,特別是便于實現(xiàn)字幕的左右移動與移動速度的設定。本系統(tǒng)仿真電路如圖9所示。aaaaRP-119::CTRL2RSTPDB'ftEiDPn.I.WEH叩22WD2叫一齡KPEL職[UPD.^.[i5PD.mCiSPD.7JWO732PSENALE畐MRT2H.1.T2E;1;:M2M.3M.iM方MJ6M.TPWRP-119::CTRL2RSTPDB'ftEiDPn.I.WEH叩22WD2叫一齡KPEL職[UPD.^.[i5PD.mCiSPD.7JWO732PSENALE畐MRT2H.1.T2E;1;:M2M.3M.iM方MJ6M.TPW口牌FEMMP22W0P23W11P2.4JW12P2J5mi3P2.7XA15P3H'RXDpn.imppjaitiTD-Pl^'lNTrPMTO卩輸~n叮丘,.匝P3.TJFD21222435穿38Is15ITg哄:其-=TE:cT^-HRH0rH12冷AB-GD□123€567I—I口_y□123L-5-=TB-:T=-圖9仿真電路圖4.2整機測試把編譯器生成的代碼—HEX文件下載到單片機Flash中,連接好各個模塊,將LED點陣顯示屏的功能逐一測試實現(xiàn)。4.3系統(tǒng)主程序#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintucharjj,k,m,n,i,j,kk,temp[2],mode_down,mode_up,mode_left,mode_right;uchara,b,c,A0,Al,A2,A3,Dl,D2,D3,mode;sbiten=P2A7;//使能端sbitflag_up=卩3人3;//上移sbitflag_down=卩3人4;//下移sbitflag_left=P3A5;//左移sbitflag_right=P3A6;//右移sbitkey_ting=P3A7;//切換ucharcodezi[4][128]={{0x08,0x04,0x08,0x04,0x08,0x04,0x08,0x04,0xBF,0x7F,0x08,0x04,0x08,0x06,0x1C,0x0E,0x2C,0x0D,0x2A,0x15,0x8A,0x14,0x49,0x64,0x28,0x24,0x08,0x04,0x08,0x04,0x08,0x04},/*”林”,0*/{0x08,0x00,0x08,0x70,0xE8,0x0E,0xBF,0x08,0x88,0x08,0x48,0x08,0x58,0x7E,0xEC,0x09,0x0B,0x09,0x98,0x08,0xA8,0x08,0x48,0x3E,0xC8,0x00,0x28,0x01,0x1A,0x7E,0x04,0x00},/*,挺”,1*/{0x20,0x04,0x20,0x04,0xFF,0x7F,0x20,0x06,0x02,0x00,0x8C,0x1F,0x89,0x10,0x86,0x10,0x92,0x10,0x90,0x1C,0x88,0x08,0x87,0x00,0x84,0x20,0x84,0x20,0x04,0x3F,0x04,0x00},/*”范”,2*/{0x80,0x00,0x80,0x00,0x80,0x00,0xFE,0x3F,0xC0,0x01,0xC0,0x02,0xA0,0x04,0x90,0x18,aaaa0x88,0x70,0x86,0x20,0x80,0x00,0x00,0x00,0xl2,0xll,0x22,0x22,0x21,0x22,0x00,0x00}};/*”杰",3*/ucharcodeshu[8][64]={{0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x1A,0x26,0x40,0x40,0x42,0x22,0x1C,0x00,0x00},/*”5”,0*/{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,0x42,0x7E,0x00,0x00},/*”2”,1*/{0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},/*”0”,2*/{0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x80,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x08,0x40,0x04,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};/*”4”,3*/ucharcodemu[8][48]={{0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xl0,0xlC,0xl0,0x2A,0xl0,0x49,0xl0,0x08,0xl0,0x08,0xl0,0x08,0x92,0x08,0x54,0x08,0x38,0x08,0xl0,0x00,0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x60,0xll,0xl0,0x10,0x10,0x10,0x10,0xl0,0xl0,0x08,0x20,0x04,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*”心形”,0*/{0x00,0x00,0x00,0x3F,0x42,0x12,0x12,0x1E,0x12,0x12,0x02,0x02,0x02,0x07,0x00,0x00},/*",。*/{0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x7F,0x00,0x00}};/*”L”,l*/ucharcodetuxing[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x04,0x80,0x08,0x40,0x10,0x20,0x20,0x10,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//延時程序 voiddelay(uintt)while(t--);}//*************************voidkeyscan(){if(flag_down==0) //下移{delay(1000);if(flag_down==0){while(flag_down==O);mode_down=l;mode_up=O;mode_left=O;mode_right=0;}}if(flag_up==0) //上移{delay(1000);if(flag_up==0){while(flag_up==0);mode_up=1;mode_down=0;mode_left=0;mode_right=0;}}if(flag_left==0) //左移{delay(1000);if(flag_left==0){while(flag_left==0);mode_left=1;mode_up=0;mode_down=0;mode_right=0;}}if(flag_right==0) 〃右移{delay(1000);if(flag_right==0){while(flag_right==0);mode_right=1;mode_up=0;mode_down=0;mode_left=0;}}if(key_ting==0)delay(1000);if(key_ting==0){while(key_ting==0);mode++;if(mode==4){mode=0;}}}}//*******************************voidshift_R()//右移函數(shù){bitlbit;lbit=temp[1]&0x01;//保存最低位temp[1]=temp[1]>>1;//右移一位temp[1]+=temp[0]v<7;temp[0]=temp[0]>>1;if(lbit)temp[0]+=0x80;}/*****************************************aaaavoidshift_L() //左移函數(shù){bithbit;hbit=temp[0]&0x80;//保存最高位temp[0]=temp[0]<<1;temp[0]+=temp[l]>>7;temp[1]=temp[1]<<1;if(hbit)temp[1]+=0x01;}// T0初始化函數(shù) voidinit_T0(){TMOD=0x01;TH0=-10000/256;TL0=-10000%256;EA=1;ET0=1;TR0=1;}//***********************************main(){

while(1)keyscan();for(A0=0;A0<16;A0++)if(mode_down==1)if(mode==1)for(i=0;i<16;i++)//for(i=0;i<16;i++)//行掃描循環(huán)掃描16行temp[0]=shu[c][i];//[2*i]表示每一列是temp[0]=shu[c][i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=shu[2*c][i];P1=temp[0];〃高8P1=temp[0];〃高8位P0=temp[1];//低八位en=0;en=0;P2=(a+i)%16;〃下P2=(a+i)%16;〃下移delay(100);en=1;elseif(mode==2){for(i=0;i<16;i++) 〃行掃描循環(huán)掃描16行temp[O]=mu[c][i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=mu[2*c][i];P1=temp[0]; //高8位P0=temp[1]; //低八位en=0;P2=(a+i)%16; 〃下移delay(100);en=1;}}elseif(mode==3){for(i=0;i<16;i++) //行掃描循環(huán)掃描16行temp[0]=tuxing[2*i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=tuxing[2*i+1];P1=temp[0]; //高8位P0=temp[1];//低八位en=0;P2=(i+a)%16;〃上移delay(100);en=1;}}else{for(i=0;i<16;i++) 〃行掃描循環(huán)掃描16行{temp[0]=zi[c][2*i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=zi[c][2*i+1];P1=temp[0]; 〃高8位P0=temp[1]; //低八位en=0;P2=(a+i)%16; 〃下移delay(100);en=1;}}}elseif(mode_up==1) //上移aaaa{if(mode==1){//行掃描循環(huán)掃描//行掃描循環(huán)掃描16行temp[0]=shu[c][i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=shu[2*c][i];P1=temp[0];//高8位P0=temp[1];//低八位en=0;P2=(i-a)%16;〃下移delay(100);en=1;}}elseif(mode==2){for(i=0;i<16;i++)//行掃描循環(huán)掃描16行{temp[0]=mu[c][i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=mu[2*c][i];P1=temp[0]; //高8位

P0=temp[1];//低八位en=0;P2=(i-a)%16;〃下移delay(50);en=1;elseif(mode==3)P0=temp[1];//低八位en=0;P2=(i-a)%16;〃下移delay(50);en=1;elseif(mode==3)for(i=0;i<16;i++)//行掃描循環(huán)掃描16行temp[0]=tuxing[2*i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=tuxing[2*i+1];P1=temp[0];//高8P1=temp[0];//高8位P0=temp[1];//低八位en=0;P2=(i-a)%16;〃上P2=(i-a)%16;〃上移elseelsedelay(100);en=1;for(i=0;i<16;i++) 〃行掃描循環(huán)掃描16行{temp[0]=zi[c][2*i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=zi[c][2*i+1];P1=temp[0]; //高8位P0=temp[1]; //低八位en=0;P2=(i-a)%16;〃上移delay(100);en=1;}}}elseif(mode_right==1) //右移{if(mode==1){for(i=0;i<16;i++) //行掃描循環(huán)掃描16行{temp[0]=shu[c][i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=shu[2*c][i];for(kk=a;kk>0;kk--){shift_R();}P1=temp[0]; 〃高8位P0=temp[1]; //低八位en=0;P2=i;delay(100);en=1;}}elseif(mode==2){//行掃描循環(huán)掃描//行掃描循環(huán)掃描16行{temp[0]=mu[c][i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=mu[2*c][i];for(kk=a;kk>0;kk--){shift_R();}P1=temp[0]; //高8位P0=temp[1]; //低八位en=0;P2=i;delay(100);en=1;aaaa}elseif(mode==3){//行掃描循環(huán)掃描//行掃描循環(huán)掃描16行{temp[0]=tuxing[2*i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=tuxing[2*i+1];for(kk=a;kk>O;kk--){shift_R();}P1=temp[0]; //高8位P0=temp[1]; //低八位en=0;P2=i;delay(100);en=1;}}else{for(i=0;i<16;i++)//行掃描循環(huán)掃描for(i=0;i<16;i++)//行掃描循環(huán)掃描16行temp[0]=zi[c][2*i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=zi[c][2*i+1];for(kk=a;kk>0;kk--){shift_R();}P1=temp[0]; 〃高8位P0=temp[1]; //低八位en=0;P2=i;delay(100);en=1;}}}elseif(mode_left==1)//左移{if(mode==1){for(i=0;i<16;i++)//for(i=0;i<16;i++)//行掃描循環(huán)掃描16行temp[0]=shu[c][i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=shu[2*c][i];for(kk=a;kk>0;kk--){shift_L();}P1=temp[0]; 〃高8位P0=temp[1];//低八位en=0;P2=i;delay(100);en=1;}}elseif(mode==2){for(i=0;i<16;i++) 〃行掃描循環(huán)掃描16行{temp[0]=mu[c][i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=mu[2*c][i];for(kk=a;kk>O;kk--){shift_L();}P1=temp[0]; //高8位P0=temp[1]; //低八位en=0;P2=i;delay(100);en=1;}}elseif(mode==3)

for(i=0;i<16;i++) 〃行掃描循環(huán)掃描16行{temp[0]=tuxing[2*i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=tuxing[2*i+1];for(kk=a;kk>O;kk--){shift_L();}P1=temp[0]; //高8位P0=temp[1]; //低八位en=0;P2=i;delay(100);en=1;}}else{for(i=0;i<16;i++)//行掃描循環(huán)掃描for(i=0;i<16;i++)//行掃描循環(huán)掃描16行temp[0]=zi[c][2*i];//[2*i]表示每一列是16位(剛好~1個字節(jié))temp[1]=zi[c][2*i+1];for(kk=a;kk>0;kk--){shift_L();}P1=temp[0]; //高8位aaaaP0=temp[1]; //低八位en=0;P2=i;delay(100);en=1;}}}elseif(mode==3){for(

溫馨提示

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

評論

0/150

提交評論