版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 1 緒論</b></p><p> 隨著人們生活環(huán)境的不斷改善和美化,在許多場(chǎng)合可以看到LED燈。在大型商場(chǎng)車(chē)站,地鐵站以及各類辦事窗口等越來(lái)越多的場(chǎng)所需要用LED點(diǎn)陣顯示漢字或者圖像。LED行業(yè)已成為一個(gè)快速發(fā)展的新興產(chǎn)業(yè),市場(chǎng)空間巨大,前景廣闊。LED顯示屏是利用發(fā)光二極管點(diǎn)陣模型或者像素單元組成平面的顯示屏幕。不但擁有色彩豐富,組態(tài)靈活,能夠適應(yīng)室內(nèi)外
2、各種環(huán)境的特點(diǎn),還具有發(fā)光效率高,使用壽命長(zhǎng)的優(yōu)勢(shì)。LED顯示屏經(jīng)歷了初期的不可更換顯示內(nèi)容,單色,雙色的圖文顯示到如今的可隨時(shí)更換顯示內(nèi)容,全彩色的視頻顯示,歷經(jīng)發(fā)展,LED顯示屏得到了廣泛的應(yīng)用和發(fā)展。</p><p> LED點(diǎn)陣顯示屏概述</p><p> 目前,國(guó)內(nèi)的LED點(diǎn)陣顯示屏大部分是單顯示,其顯示的內(nèi)容相對(duì)較少,顯示花樣較單一。一般在產(chǎn)品出廠時(shí),顯示內(nèi)容就已經(jīng)寫(xiě)入顯示
3、屏控制系統(tǒng)中的EPROM芯片中,當(dāng)需要更換顯示內(nèi)容時(shí)就非常困難,這樣使該類型的顯示屏使用范圍受到了限制。國(guó)內(nèi)還有另一種LED顯示屏——可編程序型LED顯示屏,雖然增加了顯示屏系統(tǒng)的編程能力,顯示內(nèi)容和顯示花樣都有所增加,但也存在著更換顯示內(nèi)容不便的缺點(diǎn)。隨著社會(huì)經(jīng)濟(jì)的迅速發(fā)展,如今的廣告牌都存在著顯示內(nèi)容豐富,信息量大,信息更換速度快的特點(diǎn)。因此傳統(tǒng)的LED顯示屏控制系統(tǒng)已經(jīng)越來(lái)越不能滿足現(xiàn)代社會(huì)的需要。而利用PC機(jī)通信技術(shù)控制LED顯
4、示屏,則具有顯示內(nèi)容豐富,信息更換更靈活等優(yōu)點(diǎn)。LED點(diǎn)陣顯示屏是通過(guò)PC機(jī)將要顯示的漢字字模提取出來(lái),并發(fā)送給單片機(jī),然后顯示在點(diǎn)陣屏上。單片機(jī)具有優(yōu)異的性價(jià)比、體積小、可靠性高、控制功能強(qiáng),廣泛應(yīng)用在智能儀表、機(jī)電一體化、實(shí)時(shí)過(guò)程控制、機(jī)器人、家用電器、模糊控制、通信系統(tǒng)等領(lǐng)域。</p><p> 1.2 LED顯示屏控制技術(shù)狀況</p><p> LED漢字顯示的控制系統(tǒng)主
5、要有輸入接口電路、信號(hào)控制、轉(zhuǎn)換和數(shù)字化處理電路及其輸出接口電路等,雖然包括的相關(guān)技術(shù)比較多,但關(guān)鍵技術(shù)是串行傳輸與并行傳輸技術(shù)、動(dòng)態(tài)掃描和靜態(tài)鎖存技術(shù)等。</p><p> 1.2.1 串行傳輸與并行傳輸技術(shù)</p><p> LED漢字顯示屏的數(shù)據(jù)傳輸方式有串行和并行兩種。,目前主要采用的是串行控制技術(shù),即顯示屏每個(gè)單元內(nèi)部的不同驅(qū)動(dòng)電路和各級(jí)聯(lián)動(dòng)單元之間,每個(gè)時(shí)鐘只傳送一位數(shù)據(jù)
6、,此方式可有效減少顯示單元的數(shù)據(jù)傳輸驅(qū)動(dòng)元件,從而提高整個(gè)系統(tǒng)的可靠性和性價(jià)比。</p><p> 1.2.2 動(dòng)態(tài)掃描與靜態(tài)鎖存技術(shù)</p><p> LED漢字顯示屏實(shí)現(xiàn)顯示信息的刷新技術(shù)有動(dòng)態(tài)掃描和靜態(tài)鎖存兩種方式。安裝在室內(nèi)的顯示屏一般宜采用動(dòng)態(tài)掃描技術(shù),也即是一行放光二極管共用一行驅(qū)動(dòng)寄存器,根據(jù)共用一行驅(qū)動(dòng)寄存器的發(fā)光二極管像素?cái)?shù)目,可以分為1/4,1/16掃描等等。而安
7、裝在室外的顯示屏大多使用靜態(tài)鎖存技術(shù),也就是每一個(gè)發(fā)光一級(jí)管都對(duì)應(yīng)一個(gè)驅(qū)動(dòng)寄存器,這樣就不需要分時(shí)工作,保證了每一個(gè)發(fā)光一級(jí)管的亮度占空比為100%。因?yàn)閯?dòng)態(tài)掃描法可以有效減少控制器的I/O口,應(yīng)用廣發(fā),本畢業(yè)設(shè)計(jì)也采用動(dòng)態(tài)掃描。</p><p> 1.2.3 自動(dòng)檢測(cè)與遠(yuǎn)程控制控制技術(shù)</p><p> LED漢字顯示屏的構(gòu)成復(fù)雜,安裝位置,供電、周?chē)炼?、環(huán)境溫度等條件都直接影響
8、著顯示屏的正常工作與否。所以,在LED漢字顯示屏的控制系統(tǒng)中,不但需要對(duì)以上條件進(jìn)行自動(dòng)檢測(cè)控制,還要實(shí)現(xiàn)能夠遠(yuǎn)程對(duì)顯示屏的亮度,色度,垂直位置,顯示內(nèi)容和工作方式的轉(zhuǎn)換的控制。</p><p> 2 總體方案論證及設(shè)計(jì)</p><p> 本畢業(yè)設(shè)計(jì)要求利用單片機(jī)設(shè)計(jì)出LED漢字顯示屏的控制系統(tǒng),本設(shè)計(jì)由四個(gè)部分構(gòu)成:LED點(diǎn)陣顯示條屏(LED驅(qū)動(dòng)模塊)、譯碼驅(qū)動(dòng)電路和移位寄存系
9、統(tǒng)(數(shù)據(jù)存儲(chǔ)模塊)、單片機(jī)控制系統(tǒng)(PC機(jī)通信模塊)。下面對(duì)各個(gè)模塊的設(shè)計(jì)逐一進(jìn)行論證比較。</p><p> 2.1 LED驅(qū)動(dòng)模塊</p><p> 方案一:采用靜態(tài)鎖存方式,每一個(gè)LED發(fā)光管的一端接至單片機(jī)的一個(gè)I/O口,另一端通過(guò)電阻連接到電源。此方案可以直接驅(qū)動(dòng)LED,原理簡(jiǎn)單,驅(qū)動(dòng)能力很強(qiáng),LED的亮度也可以通過(guò)限流電阻進(jìn)行適當(dāng)?shù)恼{(diào)節(jié),非常方便,但此方案過(guò)于浪費(fèi)單片機(jī)
10、的I/O口,只適合適用于較小的系統(tǒng)。</p><p> 方案二:采用動(dòng)態(tài)掃描方式,通過(guò)三極管驅(qū)動(dòng)并聯(lián)在一起的LED發(fā)光管的一端(共陰或者共2端),LED發(fā)光管的另一腳連接通用I/O口,來(lái)控制LED亮滅。這種方法能同時(shí)驅(qū)動(dòng)較多的LED,方式靈活,可以節(jié)省單片機(jī)的I/O口資源。</p><p> 比較兩種方案,本設(shè)計(jì)采用方案二。</p><p> 2.2 數(shù)據(jù)
11、存儲(chǔ)模塊</p><p> 方案一:采用靜態(tài)RAM存儲(chǔ)需要顯示的內(nèi)容,盡管靜態(tài)存儲(chǔ)器具有存儲(chǔ)內(nèi)容大,傳輸速度快的優(yōu)點(diǎn),但是斷電后,其存儲(chǔ)的數(shù)據(jù)就會(huì)消失,所以不適合用于存儲(chǔ)固定或者長(zhǎng)時(shí)間不變的數(shù)據(jù)。</p><p> 方案二:采用ROM存儲(chǔ)需要顯示的內(nèi)容,ROM可以長(zhǎng)時(shí)間的存儲(chǔ)信息,并且掉電后數(shù)據(jù)不丟失,此種方案適合存儲(chǔ)不變的數(shù)據(jù)。</p><p> 方案三:采
12、用串行EEPROM存儲(chǔ)需要顯示的內(nèi)容。串行EEPROM技術(shù)幾乎擁有了所有類型存儲(chǔ)器的優(yōu)點(diǎn):不易丟失、可更新、高性價(jià)比、低功耗。普遍適合應(yīng)用于各類工業(yè)測(cè)控系統(tǒng)。在速度要求不是很高的情況下,串行EEPROM(暫定使用24C256)是比較理想的選擇。</p><p> 以上方案,第三種方案有明顯的優(yōu)點(diǎn),所以選擇方案三。</p><p> 2.3 本設(shè)計(jì)任務(wù)</p><
13、p> 綜合以上技術(shù)選擇的論述和LED的發(fā)展趨勢(shì),本設(shè)計(jì)將以AT89C51單片機(jī)為核心,采用串行傳輸、動(dòng)態(tài)掃描技術(shù)、制作一款擁有PC機(jī)通信功能的,模塊化LED多功能漢字顯示屏。</p><p> 2.4 總體硬件組成框圖</p><p> 3 系統(tǒng)硬件設(shè)計(jì)</p><p> 為使該模塊化LED顯示屏顯示屏控制系統(tǒng)具有更加方便的實(shí)用性和靈活性,需
14、要對(duì)系統(tǒng)的各個(gè)硬件進(jìn)行精心設(shè)計(jì)。其中硬件電路包括LED點(diǎn)陣顯示條屏、譯碼驅(qū)動(dòng)電路、移位寄存系統(tǒng)、單片機(jī)控制系統(tǒng)等。</p><p> 3.1 LED點(diǎn)陣顯示條屏的硬件設(shè)計(jì)</p><p> LED驅(qū)動(dòng)模塊是LED顯示屏設(shè)計(jì)的關(guān)鍵部分,其驅(qū)動(dòng)電路的設(shè)計(jì)合理與否直接關(guān)系到LED顯示屏的亮度、穩(wěn)定的重要指標(biāo)。本設(shè)計(jì)中LED的驅(qū)動(dòng)采用三極管和74LS154實(shí)現(xiàn)的。</p>&
15、lt;p> 3.1.1 74LS154的簡(jiǎn)單介紹</p><p> 74LS154是一個(gè)4—16譯碼器,主要電特性的典型值如下:</p><p> 當(dāng)選通端(G1、G2)均為低電平時(shí),可將地址端(ABCD)的二進(jìn)制編碼在一個(gè)對(duì)應(yīng)的輸出端,以低電平譯出。</p><p> 若將 G1 和G2 中的一個(gè)作為數(shù)據(jù)輸入端,由ABCD 對(duì)輸出尋址,54/741
16、54 還可作1 線-16 線數(shù)據(jù)分配器</p><p><b> 真值表如下:</b></p><p> 74LS154的真值表</p><p> 3.1.2 驅(qū)動(dòng)電路的設(shè)計(jì)</p><p> 該系統(tǒng)的驅(qū)動(dòng)電路由74LS154與三極管共同組成的,原理圖如下:</p><p> 如上圖所
17、示,首先采用AT89C51為本系統(tǒng)的單片機(jī)型號(hào)。其中,AT89C51是一種帶4 kb閃爍可編程可擦除只讀存儲(chǔ)器(Falsh Programmable and Erasabl Read OnlyMemory FPEROM)的低電壓、高性能CMOS型8位微處理器,俗稱單片機(jī)。器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集、輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,能夠進(jìn)行1000次
18、寫(xiě)/擦循環(huán),數(shù)據(jù)保留時(shí)間為10年。</p><p> 時(shí)鐘電路由AT89C51的18,19腳的時(shí)鐘端(XTALl及XTAL2)以及12 MHz晶振X1,電容C2,C3組成,采用片內(nèi)振蕩方式。</p><p> 復(fù)位電路采用簡(jiǎn)易的上電復(fù)位電路,主要由電阻R1,R2,電容C1,開(kāi)關(guān)K1組成,分別接至AT89C51的RST復(fù)位輸入端。</p><p> LED的行掃
19、描端接到單片機(jī)P0口,而列掃描接到三極管的發(fā)射極。其中列掃描端(B1—B8)用于LED的數(shù)據(jù)掃描,憑借74LS154的譯碼和三極管的驅(qū)動(dòng),使得LED能發(fā)光。(A1—A8)通過(guò)P0口提供給LED的顯示數(shù)據(jù)??紤]到P0口必須設(shè)置上拉電阻,本設(shè)計(jì)采用4.7kΩ排電阻作為單片機(jī)的上拉電阻。</p><p> 下圖為AT89C51的引腳圖:</p><p> 3.2 數(shù)據(jù)存儲(chǔ)電路的設(shè)計(jì)<
20、;/p><p> 本設(shè)計(jì)由串行的ROM 24C256組成數(shù)據(jù)存儲(chǔ)電路。其中,24C256是一款1—256K位的支持I2C總線數(shù)據(jù)傳送協(xié)議,可以用電擦拭,可編程自定時(shí)寫(xiě)周期的串行CMOS EEPROM。此芯片有兩種寫(xiě)入方式,一種是字節(jié)寫(xiě)入方式,另一種是頁(yè)寫(xiě)入方式。此芯片允許在一個(gè)寫(xiě)周期內(nèi)進(jìn)行對(duì)一個(gè)字節(jié)到一頁(yè)的若干個(gè)字節(jié)的編程寫(xiě)入。</p><p> 24C256的引腳排列和各個(gè)引腳的功能如下
21、圖和下表:</p><p> 數(shù)據(jù)存儲(chǔ)器24C256的接口設(shè)計(jì)原理圖如下圖所示:</p><p> 該存儲(chǔ)電路只由24C256芯片組成,SCL為串行時(shí)鐘引腳,用來(lái)產(chǎn)生器件所有數(shù)據(jù)發(fā)送或接受的時(shí)鐘。SDA是串行數(shù)據(jù)/地址,這是一個(gè)雙向的傳輸端,功能是接收或者發(fā)送所有的數(shù)據(jù)以及傳送地址。LED顯示器的控制系統(tǒng)工作時(shí),單片機(jī)89C51依靠SDA引腳與SCL引腳讀取24C256中存儲(chǔ)的內(nèi)容,并
22、在LED顯示屏上顯示出來(lái)。當(dāng)然也可以通過(guò)PC機(jī)(上位機(jī))將已經(jīng)編輯好的數(shù)據(jù)內(nèi)容下載到24C256的芯片內(nèi)。</p><p> 3.3 PC機(jī)(上位機(jī))通信模塊的設(shè)計(jì)</p><p> LED顯示屏和電腦的通訊方式采用了標(biāo)準(zhǔn)RS232接口,電路原理圖如下圖所示:</p><p> 通訊方式為10位的異步通訊。RS232接口實(shí)際上是一種串行通信標(biāo)準(zhǔn),是由美國(guó)
23、EIA(電子工業(yè)聯(lián)合會(huì))和BELL 公司一起開(kāi)發(fā)的通訊協(xié)議,它對(duì)信號(hào)線的功能、電氣特性、連接器等都有明確的規(guī)定。由于RS-232接口的EIA是用正負(fù)電平表示邏輯關(guān)系的(-3V—-15V為1、+3V—+15V為0)。與TTL以高低電平表示邏輯關(guān)系不同,因此,為了能夠和計(jì)算機(jī)接口通信,必須在EIA電平和TTL電平之間進(jìn)行電平轉(zhuǎn)換。MAX232芯片可完成TTL-EIA電平轉(zhuǎn)換,且只用單一+5V電源,因此得到廣泛應(yīng)用。由于采用的是標(biāo)準(zhǔn)RS232
24、接口,所以傳輸距離不能很遠(yuǎn),當(dāng)傳輸距離超過(guò)15M,就要采用422或485接口,則只要加上一塊RS232轉(zhuǎn)422/485電路模塊就可以了。</p><p> 3.4 LED顯示屏的選擇</p><p> LED顯示屏模塊技術(shù)指標(biāo)參數(shù)表如下表所示:</p><p><b> 系統(tǒng)的軟件設(shè)計(jì)</b></p><p>
25、; 軟件也是LED漢字顯示屏控制系統(tǒng)的重要組成部分。在系統(tǒng)的軟件設(shè)計(jì)中,我同樣采用模塊化的設(shè)計(jì),將系統(tǒng)的各個(gè)部分編寫(xiě)出子模塊的形式,通過(guò)這樣的方式,可以增加系統(tǒng)軟件的可移植性和可讀性。</p><p> 4.1 下位機(jī)軟件流程</p><p> 本系統(tǒng)的下位機(jī)(單片機(jī)89C51)主要作用是用來(lái)實(shí)現(xiàn)LED漢字顯示屏上字樣的移位、顯示和數(shù)據(jù)的讀取等等功能。所以主程序的流程圖如下:&l
26、t;/p><p> 4.2 上位機(jī)軟件</p><p> 本系統(tǒng)的上位機(jī)軟件主要是編輯LED顯示屏顯示的內(nèi)容,在設(shè)計(jì)中采用Visual Basic語(yǔ)言LED顯示屏控制系統(tǒng)的內(nèi)容下載軟件。</p><p> 4.2.1 Visual Basic 中串口通訊的應(yīng)用</p><p> 現(xiàn)在大量的智能儀器或數(shù)據(jù)采集模塊都采用了RS—232或
27、485通訊接口,通過(guò)相應(yīng)的通訊協(xié)議,將測(cè)試、采集的數(shù)據(jù)傳輸給上位機(jī),以滿足各種形式的數(shù)據(jù)處理的要。VisualBasic6.0(以下簡(jiǎn)VB)是許多工程技術(shù)人員熟悉和常用的應(yīng)用程序開(kāi)發(fā)軟件,VB以其簡(jiǎn)單易學(xué)、32位面向?qū)ο蟮某绦蛟O(shè)計(jì)等特點(diǎn),倍受廣大計(jì)算機(jī)開(kāi)發(fā)者的青睞,已廣泛地應(yīng)用于各個(gè)領(lǐng)域;如何用VB編寫(xiě)數(shù)據(jù)通訊程序,并進(jìn)行數(shù)據(jù)處理,意義重大。 用VB開(kāi)發(fā)串口通訊一般有兩種方法:一是采用VB自身的標(biāo)準(zhǔn)控件Mscomm來(lái)實(shí)現(xiàn);另一種是利用w
28、indows的通訊API函數(shù)。</p><p> 4.2.2 通訊基礎(chǔ)知識(shí)</p><p> 一般來(lái)說(shuō),計(jì)算機(jī)都有一個(gè)或多個(gè)串行端口,它們依次為com1、com2、…,這些串口還提供了外部設(shè)備與PC進(jìn)行數(shù)據(jù)傳輸和通信的通道。這些串口在CPU和外設(shè)之間充當(dāng)解釋器的角色。當(dāng)字符數(shù)據(jù)從CPU發(fā)送給外設(shè)時(shí),這些字符數(shù)據(jù)將被轉(zhuǎn)換成串行比特流數(shù)據(jù);當(dāng)接收數(shù)據(jù)時(shí),比特流數(shù)據(jù)被轉(zhuǎn)換為字符數(shù)據(jù)傳遞給C
29、PU,再進(jìn)一步說(shuō),在操作系統(tǒng)方面,Windows用通信驅(qū)動(dòng)程序(COMM.DRV)調(diào)用API函數(shù)發(fā)送和接收數(shù)據(jù),當(dāng)用通信控件或聲明調(diào)用API函數(shù)時(shí),他們由COMM. DRV解釋并傳遞給設(shè)備驅(qū)動(dòng)程序,作為一個(gè)VB程序員,要編寫(xiě)通信程序.只需知道通信控件提供給Windows通信API函數(shù)的接口即可.換句話說(shuō),只需設(shè)定和監(jiān)視通信控件的屬性和事件即可。</p><p> 4.2.3 數(shù)據(jù)的發(fā)送</p>
30、<p> VB發(fā)送數(shù)據(jù)有兩種:一、發(fā)送字符數(shù)據(jù);二、發(fā)送二進(jìn)制數(shù)據(jù)。 </p><p><b> 1.發(fā)送字符數(shù)據(jù) </b></p><p> 在通訊中以單字符方式逐個(gè)發(fā)送數(shù)據(jù)時(shí),每一個(gè)數(shù)據(jù)范圍是:0—128。如發(fā)送58給單片機(jī)則可以這樣表示: </p><p> Mscomm1.Output=Chr(50) ‘發(fā)送數(shù)據(jù)(1
31、6進(jìn)制) </p><p> 在通訊中以多字符方式發(fā)送數(shù)據(jù)時(shí),發(fā)送的是Ascii碼值。如發(fā)送“LED顯</p><p> 示屏”則可以這樣表示: </p><p> Dim data as String ‘定義發(fā)送數(shù)據(jù)變量 </p><p> data=” LED顯示屏” ‘給變量賦值 </p><p> M
32、scomm1.Output=data ‘發(fā)送數(shù)據(jù) </p><p> 2.發(fā)送二進(jìn)制數(shù)據(jù) </p><p> 以發(fā)送字符方式時(shí),發(fā)送的數(shù)據(jù)范圍只能是:0—128,而單片機(jī)經(jīng)常處理的數(shù)據(jù)范圍是0—255,那么怎么樣發(fā)送大于128的數(shù)據(jù)呢?方法是采用二進(jìn)制方式發(fā)送數(shù)據(jù)。首先定義一個(gè)二進(jìn)制類型的數(shù)組,然后把要發(fā)送的數(shù)值賦給二進(jìn)制數(shù)組,再通過(guò)Mscomm發(fā)送。如發(fā)送數(shù)值220的具體過(guò)程如下:
33、</p><p> Dim data(0) as byte ‘定義發(fā)送數(shù)據(jù)數(shù)組 </p><p> Data(0)=220 ‘給數(shù)組賦值 </p><p> Mscomm1.output=data(0) ‘發(fā)送數(shù)據(jù) </p><p> 4.2.4 數(shù)據(jù)的接收 </p><p> 接收數(shù)據(jù)有兩種方式,一、以
34、文本方式接收(InputMode=0);二、以二進(jìn)制</p><p> 方式接收(InputMode=1)。 </p><p> 1.以文本方式接收數(shù)據(jù) </p><p> 在InputMode=0的模式下,是以文本方式接收數(shù)據(jù),在接收數(shù)據(jù)之前,我們</p><p> 必須先定義一個(gè)字符串變量,用以接收數(shù)據(jù)緩沖區(qū)里的數(shù)據(jù),具體過(guò)程如下
35、: </p><p> Dim receive As String * 1 ‘定義接收數(shù)據(jù)變量 </p><p> Select Case MSComm1.CommEvent ‘判斷事件類型 </p><p> Case comEvReceive ‘事件類型為接收數(shù)據(jù) </p><p> receive = MSComm1.Input
36、 ‘接收數(shù)據(jù) </p><p> End Select </p><p> 2.以二進(jìn)制方式接收數(shù)據(jù) </p><p> 在InputMode=1的模式下,是以二進(jìn)制方式接收數(shù)據(jù),在接收數(shù)據(jù)之前,我們必須先義一個(gè)二進(jìn)制類型的數(shù)組,用以接收數(shù)據(jù)緩沖區(qū)里的數(shù)據(jù),過(guò)程如下: </p><p> Dim receive(n) As Byte
37、‘定義接收數(shù)據(jù)變量 </p><p> Select Case MSComm1.CommEvent ‘判斷事件類型 </p><p> Case comEvReceive ‘事件類型為接收數(shù)據(jù) </p><p> Mscomm1.InputMode=1 ‘接收方式為二進(jìn)制方式 </p><p> For k=0 to n </p
38、><p> Receive(k) = MSComm1.Input ‘接收數(shù)據(jù) </p><p><b> Next k </b></p><p> End Select</p><p> 4.3 編程思想</p><p> 要實(shí)現(xiàn)LED漢字顯示屏的動(dòng)態(tài)滾動(dòng)顯示效果,其實(shí)就是以固定的合適周
39、期,顯示一幅幅不同內(nèi)容的屏幕畫(huà)面。所以在軟件設(shè)計(jì)上,只需按照一定的時(shí)間間隔改變存儲(chǔ)于顯示緩沖區(qū)的信息內(nèi)容。比如左移的動(dòng)態(tài)效果,就是讓顯示緩沖區(qū)的點(diǎn)陣數(shù)據(jù)向左移動(dòng)一列,由于顯示緩沖區(qū)的所有數(shù)據(jù)左移一列需要一定的時(shí)間,不可能在兩次中斷間隔時(shí)間內(nèi)實(shí)現(xiàn)這一處理過(guò)程,鑒于此,就需要設(shè)置兩個(gè)顯示緩沖區(qū),一個(gè)用于保存當(dāng)前屏幕正在顯示的信息數(shù)據(jù),另一個(gè)則用來(lái)對(duì)當(dāng)前的信息數(shù)據(jù)進(jìn)行處理。在到達(dá)換屏?xí)r間間隔后,切換當(dāng)前顯示緩沖區(qū)到數(shù)據(jù)已經(jīng)處理的顯示緩沖區(qū),然
40、后再對(duì)另一顯示緩沖區(qū)進(jìn)行數(shù)據(jù)處理,以此循環(huán)下去。要保證動(dòng)態(tài)顯示的正常,符合人們的視覺(jué)習(xí)慣,最根本的問(wèn)題是如何分配刷新顯示屏的定時(shí)時(shí)間與兩個(gè)顯示緩沖區(qū)數(shù)據(jù)顯示、處理的替換。為了二者的處理時(shí)間不相互沖突,本設(shè)計(jì)采用的方法是使顯示緩沖區(qū)的數(shù)據(jù)處理在多次多次定時(shí)中斷程序執(zhí)行之間的時(shí)間間隔內(nèi)進(jìn)行并完成。</p><p> 數(shù)據(jù)處理時(shí)間=(定時(shí)中斷時(shí)間-傳輸數(shù)據(jù)時(shí)間)×中斷次數(shù)</p><p&
41、gt; 這樣,只要合理的設(shè)定中斷次數(shù)就能保證刷新屏幕間隔時(shí)間內(nèi)顯示緩沖區(qū)有足夠的時(shí)間處理數(shù)據(jù)。</p><p> 4.4 字模處理</p><p> 從字節(jié)長(zhǎng)度看,漢字占兩個(gè)字節(jié)(Byte),數(shù)字只占一個(gè)字節(jié),那么:漢字字模為16*16個(gè)點(diǎn)),ASCII碼字符的字模為8*16個(gè)點(diǎn)。這樣字模的長(zhǎng)度不同,處理起來(lái)就會(huì)有困難。為此,本設(shè)計(jì)采用這種字模處理方法:把漢字拆成兩半,這樣就與英
42、文字母和阿拉伯?dāng)?shù)字的字模統(tǒng)一起來(lái)。字模的存儲(chǔ)是按順次存儲(chǔ)在數(shù)據(jù)存儲(chǔ)區(qū)里,如‘蘇’字的字模在數(shù)據(jù)存儲(chǔ)區(qū)里是這樣存放的:</p><p> uchar code tab[32]={ 08H,20H,08H,24H,0FFH,0FEH,08H,20H</p><p> 0AH,20H,02H,10H,3FH,0F8H,02H,10H</p><p> 02H,10H
43、,22H,18H,24H,16H,44H,12H</p><p> 08H,10H,10H,10H,20H,50H,40H,20H }</p><p> 但是僅僅依靠人工方法獲取漢字代碼是會(huì)很繁瑣。所以,我檢索了互聯(lián)網(wǎng),找到了一款功能十分強(qiáng)大的漢字字庫(kù)提取程序,軟件打開(kāi)后,在指定地方輸入漢字,點(diǎn)“生成”,十六進(jìn)制數(shù)據(jù)的漢字代碼即可自動(dòng)生成。甚至可以輸入多個(gè)漢字以及選擇動(dòng)態(tài)顯示方式,截
44、圖如下:</p><p> 4.5 動(dòng)態(tài)效果的實(shí)現(xiàn)</p><p> 本文設(shè)計(jì)的LED點(diǎn)陣顯示屏可以實(shí)現(xiàn)左移、掉下、上升三種顯示方式。其中只有左移方式可以實(shí)現(xiàn)多于一屏內(nèi)容的顯示,其它的顯示方式只能顯示一屏的內(nèi)容。顯示方式設(shè)置由微機(jī)控制,微機(jī)在傳送點(diǎn)陣字模數(shù)據(jù)時(shí),先顯示方式,再傳送點(diǎn)陣數(shù)據(jù)。顯示過(guò)程由單片機(jī)定時(shí)中斷程序控制,每定時(shí)中斷一次點(diǎn)亮一行,定時(shí)中斷時(shí)間為0.8ms,每中斷16
45、次,即可對(duì)整個(gè)顯示屏掃描一次,完成一屏信息的刷新,每秒顯示畫(huà)面數(shù)達(dá)78屏,可保證畫(huà)面無(wú)閃爍感。編程采用的是C言語(yǔ),應(yīng)用C51編程具有以下優(yōu)點(diǎn): </p><p> ① C51管理內(nèi)部寄存器和存儲(chǔ)器的分配,編程時(shí),無(wú)需考慮不同存儲(chǔ)器的</p><p> 尋址和數(shù)據(jù)類型等細(xì)節(jié)問(wèn)題。 </p><p> ?、?程序由若干函數(shù)組成,具有良好的模塊結(jié)構(gòu)。 </p&g
46、t;<p> ③ 有豐富的子程序庫(kù)可直接引用,從而大大減少用戶編程的工作量。 </p><p> ?、?C言語(yǔ)和匯編言語(yǔ)可以交叉使用,匯編言語(yǔ)程序代碼短、運(yùn)行速度快,但復(fù)雜運(yùn)算編耗時(shí)。用匯編言語(yǔ)編寫(xiě)與硬件有關(guān)的部分,用C言語(yǔ)編寫(xiě)與硬件無(wú)關(guān)的運(yùn)算部分程序,充分發(fā)揮兩種言語(yǔ)的長(zhǎng)處,提高開(kāi)發(fā)效率。</p><p> 4.5.1 左移效果</p><p&g
47、t; 在顯示條屏較小的情況下,為了顯示更多的信息內(nèi)容,普遍采用的方法是移位顯示,按照人們的日常習(xí)慣,本設(shè)計(jì)選擇左移的動(dòng)態(tài)效果,它的特點(diǎn)是不僅僅局限于顯示屏幕的大小、顯示效果好,編程簡(jiǎn)單。下面,用16*64的條型顯示屏的左移方式為例,說(shuō)明左移動(dòng)態(tài)效果的實(shí)現(xiàn)方法:</p><p> 屏幕的數(shù)據(jù)大小為128個(gè)字節(jié),所以要先在數(shù)據(jù)存儲(chǔ)區(qū)里開(kāi)辟一個(gè)256個(gè)字節(jié)的顯示緩沖區(qū)(分為兩個(gè)顯存),其中一個(gè)用以保存當(dāng)前需要顯示的
48、信息內(nèi)容,而另一個(gè)用來(lái)處理數(shù)據(jù)。要實(shí)現(xiàn)左移的動(dòng)態(tài)效果,原理很簡(jiǎn)單,其實(shí)就是每隔一段時(shí)間,向顯示緩沖區(qū)里加入一列數(shù)據(jù)。具體做法是:第一個(gè)字節(jié)左移一位,保存于變量A中,第二個(gè)字節(jié)右移7位(一個(gè)字節(jié)是8位),保存于變量B中,A和B邏輯或運(yùn)算,結(jié)果保存于A中,這樣就完成了第一個(gè)字節(jié)的數(shù)據(jù)處理。一行有8個(gè)字節(jié)的數(shù)據(jù)需要處理,所以要設(shè)8此循環(huán),如此循環(huán)8次后,便完成了一行的數(shù)據(jù)處理。同時(shí),每個(gè)字有16行,因此我們需要在8次循環(huán)里再設(shè)計(jì)一個(gè)16次的外
49、循環(huán),至此,整個(gè)屏幕的數(shù)據(jù)就都處理完了。再啟動(dòng)更新信號(hào),交換顯示存儲(chǔ)區(qū),顯示程序就顯示剛才處理好了的內(nèi)容,接著,單片機(jī)再對(duì)另一顯示存儲(chǔ)區(qū)的數(shù)據(jù)進(jìn)行處理,處理完成后再交換顯示。如此這樣,就能實(shí)現(xiàn)左移的動(dòng)態(tài)效果。程序流程圖如下圖所示:</p><p><b> 具體源程序如下:</b></p><p> void rtol(void) </p><
50、p><b> { </b></p><p> uchar a,b,i,k,u,n; </p><p><b> while(1) </b></p><p><b> { </b></p><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p&g
51、t;<p> if(change==1)break; </p><p> //--------- </p><p> for(n=0;n<leng;n++) //一共有l(wèi)ength個(gè)字(8*16) </p><p><b> { </b></p><p> //--------- //判斷內(nèi)
52、容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> for(i=0;i<8;i++) //一邊字有8位,要移8次 </p><p><b> { </b></p><p> //---------
53、 //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> if(choose==1) //處理顯存1區(qū) </p><p><b> { </b></p><p><b> addr2=0
54、; </b></p><p><b> } </b></p><p> else //處理顯存2區(qū) </p><p><b> { </b></p><p> addr2=256; </p><p><b> } </b></
55、p><p> //--------- </p><p> for(k=0;k<16;k++) //一屏要處理16個(gè)字(8*16) </p><p><b> { </b></p><p> for(u=0;u<16;u++) //一個(gè)字要處理16個(gè)字節(jié) </p><p><b
56、> { </b></p><p> num=512+u+k*16+n*16; </p><p> a=*num<<i; </p><p> num=512+u+k*16+16+n*16; </p><p> b=*num>>8-i; </p><p><b>
57、; a|=b; </b></p><p> dispd=addr2+u+k*16; </p><p> *dispd=a; //保存數(shù)據(jù) </p><p><b> } </b></p><p><b> } </b></p><p> while(j
58、h==0); </p><p> jh=0; //關(guān)交換信號(hào) </p><p> choose=~choose; </p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></
59、p><p><b> } </b></p><p> 4.5.2 上升效果編程</p><p> 本系統(tǒng)實(shí)現(xiàn)的上升效果具體是:內(nèi)容從顯示屏底部緩慢地上升,整行字出現(xiàn)后,會(huì)定格一段時(shí)間,讓人們看清楚顯示的內(nèi)容,接著閃爍三下,提醒正在顯示的內(nèi)容即將退出,然后內(nèi)容開(kāi)始上移,直到消失,這樣,就完成了一次完整顯示過(guò)程。</p><
60、;p> 具體實(shí)現(xiàn)的方法是:設(shè)定一個(gè)16次循環(huán),在第一次循環(huán)中,顯存只取顯示內(nèi)容的第一行數(shù)據(jù),放到顯存的末行,即第16行。在第二次循環(huán)中,顯存讀取顯示內(nèi)容的第一和第二行數(shù)據(jù),同時(shí),第一行數(shù)據(jù)放入顯存的第15行,第二行數(shù)據(jù)放入顯存的第16行,如此循環(huán)16次,直到全部顯示內(nèi)容顯示出來(lái)。設(shè)定程序,顯示內(nèi)容閃爍三次。接著退出的方法差不多。區(qū)別僅是每次取的行數(shù)不一樣。程序流程圖如下:</p><p><b>
61、; 具體源程序如下:</b></p><p> void rise(void) </p><p><b> { </b></p><p><b> uchar i; </b></p><p> uint k,g,t,m; </p><p> //---
62、----------- </p><p> deal(); //顯示前把數(shù)據(jù)重新排列 </p><p> //-------------- </p><p><b> while(1) </b></p><p><b> { </b></p><p> //----
63、----- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> for(t=0;t<2;t++) //入、出共兩次 </p><p><b> { </b></p><p> //---
64、------ //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> if(t==0)g=1024; //入的首地址 </p><p> if(t==1)g=1280; //出的首地址 </p><p> //----
65、----------- </p><p> for(i=0;i<=16;i++) //出完有16行 </p><p><b> { </b></p><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p>
66、; //--------- </p><p> if(choose==1) //處理顯存1區(qū) </p><p><b> { </b></p><p><b> addr2=0; </b></p><p><b> } </b></p><p>
67、; else //處理顯存2區(qū) </p><p><b> { </b></p><p> addr2=256; </p><p><b> } </b></p><p> //--------- </p><p> for(k=0;k<256;k++) /
68、/一屏有256個(gè)字節(jié) </p><p><b> { </b></p><p> dispd=addr2+k; </p><p><b> num=g+k; </b></p><p> *dispd=*num; </p><p><b> } </b
69、></p><p> g+=16; //指向上一行數(shù)據(jù) </p><p> while(jh==0); </p><p> jh=0; //關(guān)交換信號(hào) </p><p> choose=~choose; </p><p><b> } </b></p><p&g
70、t; //---------------------- 定一會(huì) </p><p> for(i=0;i<25;i++) </p><p><b> { </b></p><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p>
71、;<p> //--------- </p><p> while(jh==0); </p><p><b> jh=0; </b></p><p><b> } </b></p><p><b> if(t==0) </b></p>&l
72、t;p><b> { </b></p><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //---------------------- 閃3下 </p><p><b> TR0=0; </b>
73、;</p><p><b> p34=1; </b></p><p><b> p35=1; </b></p><p> for(m=0;m<34000;m++); </p><p><b> TR0=1; </b></p><p> /
74、/--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> for(m=0;m<35000;m++); </p><p><b> TR0=0; </b></p><p>&
75、lt;b> p34=1; </b></p><p><b> p35=1; </b></p><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p&g
76、t; for(m=0;m<34000;m++); </p><p><b> TR0=1; </b></p><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p
77、> for(m=0;m<35000;m++); </p><p><b> TR0=0; </b></p><p><b> p34=1; </b></p><p><b> p35=1; </b></p><p> //--------- //判斷內(nèi)容改
78、變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> for(m=0;m<34000;m++); </p><p><b> TR0=1; </b></p><p> //--------- //判斷內(nèi)
79、容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> for(m=0;m<35000;m++); </p><p><b> } </b></p><p><b> } </b>
80、;</p><p> 4.5.3 掉下效果編程</p><p> 掉下的動(dòng)態(tài)效果的實(shí)現(xiàn)與上升的編程思想差不多,也是設(shè)定一個(gè)16次的循環(huán),在第一次的循環(huán)中,只讀取顯示內(nèi)容的最后一行數(shù)據(jù),放到顯存的第一行里。在第二次循環(huán)中,讀取顯示內(nèi)容的第15和第16行數(shù)據(jù),并依次放入顯存的第1和第2行。如此循環(huán)16次,整屏幕的數(shù)據(jù)都顯示出來(lái)。退出同理。不再?gòu)?fù)述。程序流程圖如下:</p>
81、<p><b> 具體源程序如下:</b></p><p> void drop(void) </p><p><b> { </b></p><p><b> uchar i; </b></p><p> uint k,g,t,m; </p>
82、<p> //-------------- </p><p> deal(); //顯示前把數(shù)據(jù)重新排列 </p><p> //-------------- </p><p><b> while(1) </b></p><p><b> { </b></p>
83、<p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> for(t=0;t<2;t++) //入、出共兩次 </p><p><b> { </b></p>
84、<p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> if(t==0)g=1536; //入的首地址 </p><p> if(t==1)g=1280; //出的首地址 </p>
85、<p> //--------------- </p><p> for(i=0;i<=16;i++) //出完有16行 </p><p><b> { </b></p><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; &l
86、t;/p><p> //--------- </p><p> if(choose==1) //處理顯存1區(qū) </p><p><b> { </b></p><p><b> addr2=0; </b></p><p><b> } </b>&l
87、t;/p><p> else //處理顯存2區(qū) </p><p><b> { </b></p><p> addr2=256; </p><p><b> } </b></p><p> //--------- </p><p> for(k
88、=0;k<256;k++) //一屏有256個(gè)字節(jié) </p><p><b> { </b></p><p> dispd=addr2+k; </p><p><b> num=g+k; </b></p><p> *dispd=*num; </p><p>&
89、lt;b> } </b></p><p> g-=16; //指向上一行數(shù)據(jù) </p><p> while(jh==0); </p><p> jh=0; //關(guān)交換信號(hào) </p><p> choose=~choose; </p><p><b> } </b>&
90、lt;/p><p> //---------------------- 定一陣 </p><p> for(i=0;i<25;i++) </p><p><b> { </b></p><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==
91、1)break; </p><p> //--------- </p><p> while(jh==0); </p><p><b> jh=0; </b></p><p><b> } </b></p><p><b> if(t==0) </b
92、></p><p><b> { </b></p><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //---------------------- 閃3下 </p><p><b>
93、 TR0=0; </b></p><p><b> p34=1; </b></p><p><b> p35=1; </b></p><p> for(m=0;m<34000;m++); </p><p><b> TR0=1; </b></p
94、><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> for(m=0;m<35000;m++); </p><p><b> TR0=0; </b><
95、/p><p><b> p34=1; </b></p><p><b> p35=1; </b></p><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- &
96、lt;/p><p> for(m=0;m<34000;m++); </p><p><b> TR0=1; </b></p><p> //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //---------
97、 </p><p> for(m=0;m<35000;m++); </p><p><b> TR0=0; </b></p><p><b> p34=1; </b></p><p><b> p35=1; </b></p><p> /
98、/--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> for(m=0;m<34000;m++); </p><p><b> TR0=1; </b></p><p>
99、 //--------- //判斷內(nèi)容改變沒(méi)有? </p><p> if(change==1)break; </p><p> //--------- </p><p> for(m=0;m<35000;m++); </p><p><b> } </b></p><p><
100、b> } </b></p><p><b> }</b></p><p> 4.6 上位機(jī)串口通信軟件</p><p> 4.6.1 界面設(shè)計(jì)</p><p> 新建一個(gè)窗體From1,添加以下主要控件: </p><p> 1、ProgressBar1 &l
101、t;/p><p> 2、Commad1、Commad2 </p><p><b> 3、Frame1 </b></p><p><b> 4、Combo1</b></p><p><b> 5、Text1</b></p><p><b>
102、 軟件界面如下圖:</b></p><p> 4.6.2 程序編寫(xiě)</p><p> 首先對(duì)8051串口進(jìn)行初始化,與上位機(jī)通訊接收數(shù)據(jù),判斷數(shù)據(jù)是否接收完,如果沒(méi)有繼續(xù)接收,如果接收完則計(jì)算地址偏移量然后從字庫(kù)中取字,最后固定顯示并移動(dòng)。傳輸函數(shù)編程流程圖如下圖所示</p><p><b> 源程序如下:</b>&l
103、t;/p><p> Public Sub port(contton As String, msg As Byte, way As Integer) </p><p> '------------------------- </p><p> Dim counter As Integer '進(jìn)度條 </p&g
104、t;<p> Dim x As Long '保存字的位置 </p><p> Dim num As Integer '計(jì)算字的個(gè)數(shù) </p><p> Dim data As String * 4 '接收數(shù)據(jù) &l
105、t;/p><p> Dim se(0) As Byte </p><p> If contton = "" Then </p><p> MsgBox "沒(méi)有輸入要顯示的內(nèi)容,請(qǐng)輸入!" </p><p><b> Exit Sub </b></p><p&
106、gt;<b> Else </b></p><p> num = Len(contton) </p><p> '-------------------------- 校對(duì)有沒(méi)有字庫(kù)里沒(méi)有的字符? </p><p> For k = 1 To num </p><p> x
107、= Asc(Mid(contton, k, 1)) </p><p> If (x < -24158) Or (x > -23617 And x < -20319) Or (x > -2050 And x < 32) Or (x > </p><p> 126) Then </p><p> If x <> 9
108、Then '判斷是不是Tab鍵? </p><p> none = Mid(contton, k, 1) </p><p> MsgBox "字庫(kù)中沒(méi)有輸入的字' " & none & " '字符的字模.", vbCritical, "Wron
109、g" </p><p><b> Exit Sub </b></p><p><b> End If </b></p><p><b> End If </b></p><p> '--------------------------
110、 計(jì)算中文的個(gè)數(shù) </p><p> If (x >= -20319 And x <= -2050) Or (x >= -24158 And x <= -23617) Or (x = 9) Then </p><p> cal = cal + 1 </p><p><b> End If </b><
111、;/p><p><b> Next k </b></p><p> num = num + cal </p><p> '*********************************************** 進(jìn)度條 </p><p> counter = num * 16 </p>&
112、lt;p> send.ProgressBar1.min = 0 </p><p> send.ProgressBar1.Max = counter </p><p> send.ProgressBar1.Value = 0 </p><p> counter = 0 </p><p> On Error GoTo closed
113、 '處理串口沒(méi)有打開(kāi)的情況 </p><p> '---------------- 發(fā)送校對(duì)符 </p><p> main.MSComm1.Output = Chr(6) </p><p> For tim = 0 To 2000000
114、 '延時(shí) </p><p><b> Next tim </b></p><p> If main.MSComm1.InBufferCount <> 0 Then </p><p> If Asc(main.MSComm1.Input) <> 16 Then </p>
115、<p> main.MSComm1.InBufferCount = 0 '清空接收區(qū) </p><p> MsgBox "傳輸錯(cuò)誤,請(qǐng)檢查各硬件是否正常?", vbOKOnly, "傳輸錯(cuò)誤" </p><p><b> Exit Sub </b></p><
116、;p><b> End If </b></p><p><b> Else </b></p><p> MsgBox "傳輸錯(cuò)誤,請(qǐng)檢查各硬件是否正常?", vbOKOnly, "傳輸錯(cuò)誤" </p><p><b> Exit Sub </b>&
117、lt;/p><p><b> End If </b></p><p> '-------------------------- 發(fā)送啟動(dòng)符5(任定,作為地址信號(hào)) </p><p> main.MSComm1.Output = Chr(5) </p><p> '----------
118、---------------- 延時(shí) </p><p> For tim = 0 To 1000000 </p><p><b> Next tim </b></p><p> '-------------------------- 發(fā)送顯示方式 </p>&
119、lt;p> main.MSComm1.Output = Chr(way) </p><p> '-------------------------- 發(fā)送字符串的長(zhǎng)度 </p><p> If num < 256 Then '0~255 </p><p> se(0) = num </p>
120、<p> main.MSComm1.Output = se </p><p> main.MSComm1.Output = Chr(0) </p><p> Else '256~500 </p><p> se(0) = num - 255 </p><p> main.MSComm1.Output = se &
121、lt;/p><p> main.MSComm1.Output = Chr(1) </p><p><b> End If </b></p><p> Open "c:\HanselLED.fon" For Random As #1 Len = 4 '打開(kāi)字庫(kù) </p><p> '
122、-------------------------- 處理傳輸中出錯(cuò)的情況 </p><p> On Error GoTo wrong </p><p> '-------------------------- 傳輸 </p><p> num = num - cal </p><
123、p> For k = 1 To num </p><p> x = Asc(Mid(contton, k, 1)) </p><p> If x = 9 Then 'Tab鍵占一個(gè)格 </p><p> For a = 0 To 31 </p><p> main.MSComm1.Output = Chr(0) <
124、;/p><p> '*************************************** 進(jìn)度條 </p><p> send.ProgressBar1.Value = counter </p><p> counter = counter + 1 </p><p><b> Next a </b>
125、</p><p> ElseIf -20319 <= x And x <= -2050 Then '中文字符 </p><p> If x = -20319 Then </p><p><b> x = 3169 </b></p><p><b> Else </b>&
126、lt;/p><p> f = (x + 20318) / 255 </p><p> c = Int(f) </p><p> d = (x + 20318) Mod 255 </p><p> x = 32 * (c * 93 + d + 100) + 1 </p><p><b> End If &
127、lt;/b></p><p> 'x = 32 * (x + 20418) + 1 '漢字的位置從第100位開(kāi)始存儲(chǔ) </p><p> '--------------------------- 取字模 </p><p><b> ofe = 0 </b>&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的led顯示屏設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的led電子顯示屏
- 單片機(jī)畢業(yè)論文--基于單片機(jī)的led顯示屏設(shè)計(jì)
- 基于單片機(jī)的led顯示屏設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的led點(diǎn)陣顯示屏設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--單片機(jī)控制的led滾屏顯示屏的設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于單片機(jī)控制的led點(diǎn)陣顯示屏設(shè)計(jì)論文
- led顯示屏單片機(jī)課程設(shè)計(jì)
- 基于單片機(jī)的led點(diǎn)陣電子顯示屏長(zhǎng)師畢業(yè)設(shè)計(jì)
- 基于單片機(jī)led電子顯示屏的設(shè)計(jì)【畢業(yè)論文】
- 基于單片機(jī)的led點(diǎn)陣電子顯示屏設(shè)計(jì)
- 基于單片機(jī)的led顯示屏畢業(yè)論文
- 基于單片機(jī)的led電子顯示屏的設(shè)計(jì)【畢業(yè)論文】
- 基于單片機(jī)的LED點(diǎn)陣顯示屏設(shè)計(jì)定稿.doc
- 基于單片機(jī)的led顯示屏系統(tǒng)設(shè)計(jì)大學(xué)論文
- 基于單片機(jī)的LED點(diǎn)陣顯示屏設(shè)計(jì)初稿.doc
- 畢業(yè)設(shè)計(jì)---基于51單片機(jī)的led點(diǎn)陣顯示屏系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 單片機(jī)控制的led滾屏顯示屏的設(shè)計(jì)
- 單片機(jī)控制led顯示屏系統(tǒng)
- 基于單片機(jī)的led電子顯示屏的設(shè)計(jì) 【開(kāi)題報(bào)告】
評(píng)論
0/150
提交評(píng)論