




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 淮陰工學院畢業設計說明書(論文) 第 37 頁 共 37 頁1 緒論隨著人們生活環境的不斷改善和美化,在許多場合可以看到LED燈。在大型商場車站,地鐵站以及各類辦事窗口等越來越多的場所需要用LED點陣顯示漢字或者圖像。LED行業已成為一個快速發展的新興產業,市場空間巨大,前景廣闊。LED顯示屏是利用發光二極管點陣模型或者像素單元組成平面的顯示屏幕。不但擁有色彩豐富,組態靈活,能夠適應室內外各種環境的特點,還具有發光效率高,使用壽命長的優勢。LED顯示屏經歷了初期的不可更換顯示內容,單色,雙色的圖文顯示到如今的可隨時更換顯示內容,全彩色的視頻顯示,歷經發展,LED顯示屏得到了廣泛的應用和發展。
2、1.1 LED點陣顯示屏概述目前,國內的LED點陣顯示屏大部分是單顯示,其顯示的內容相對較少,顯示花樣較單一。一般在產品出廠時,顯示內容就已經寫入顯示屏控制系統中的EPROM芯片中,當需要更換顯示內容時就非常困難,這樣使該類型的顯示屏使用范圍受到了限制。國內還有另一種LED顯示屏可編程序型LED顯示屏,雖然增加了顯示屏系統的編程能力,顯示內容和顯示花樣都有所增加,但也存在著更換顯示內容不便的缺點。隨著社會經濟的迅速發展,如今的廣告牌都存在著顯示內容豐富,信息量大,信息更換速度快的特點。因此傳統的LED顯示屏控制系統已經越來越不能滿足現代社會的需要。而利用PC機通信技術控制LED顯示屏,則具有顯
3、示內容豐富,信息更換更靈活等優點。LED點陣顯示屏是通過PC機將要顯示的漢字字模提取出來,并發送給單片機,然后顯示在點陣屏上。單片機具有優異的性價比、體積小、可靠性高、控制功能強,廣泛應用在智能儀表、機電一體化、實時過程控制、機器人、家用電器、模糊控制、通信系統等領域。1.2 LED顯示屏控制技術狀況 LED漢字顯示的控制系統主要有輸入接口電路、信號控制、轉換和數字化處理電路及其輸出接口電路等,雖然包括的相關技術比較多,但關鍵技術是串行傳輸與并行傳輸技術、動態掃描和靜態鎖存技術等。1.2.1 串行傳輸與并行傳輸技術LED漢字顯示屏的數據傳輸方式有串行和并行兩種。,目前主要采用的是串行控制技術,
4、即顯示屏每個單元內部的不同驅動電路和各級聯動單元之間,每個時鐘只傳送一位數據,此方式可有效減少顯示單元的數據傳輸驅動元件,從而提高整個系統的可靠性和性價比。1.2.2 動態掃描與靜態鎖存技術 LED漢字顯示屏實現顯示信息的刷新技術有動態掃描和靜態鎖存兩種方式。安裝在室內的顯示屏一般宜采用動態掃描技術,也即是一行放光二極管共用一行驅動寄存器,根據共用一行驅動寄存器的發光二極管像素數目,可以分為1/4,1/16掃描等等。而安裝在室外的顯示屏大多使用靜態鎖存技術,也就是每一個發光一級管都對應一個驅動寄存器,這樣就不需要分時工作,保證了每一個發光一級管的亮度占空比為100%。因為動態掃描法可以有效減少
5、控制器的I/O口,應用廣發,本畢業設計也采用動態掃描。1.2.3 自動檢測與遠程控制控制技術 LED漢字顯示屏的構成復雜,安裝位置,供電、周圍亮度、環境溫度等條件都直接影響著顯示屏的正常工作與否。所以,在LED漢字顯示屏的控制系統中,不但需要對以上條件進行自動檢測控制,還要實現能夠遠程對顯示屏的亮度,色度,垂直位置,顯示內容和工作方式的轉換的控制。2 總體方案論證及設計本畢業設計要求利用單片機設計出LED漢字顯示屏的控制系統,本設計由四個部分構成:LED點陣顯示條屏(LED驅動模塊)、譯碼驅動電路和移位寄存系統(數據存儲模塊)、單片機控制系統(PC機通信模塊)。下面對各個模塊的設計逐一進行論證
6、比較。2.1 LED驅動模塊 方案一:采用靜態鎖存方式,每一個LED發光管的一端接至單片機的一個I/O口,另一端通過電阻連接到電源。此方案可以直接驅動LED,原理簡單,驅動能力很強,LED的亮度也可以通過限流電阻進行適當的調節,非常方便,但此方案過于浪費單片機的I/O口,只適合適用于較小的系統。 方案二:采用動態掃描方式,通過三極管驅動并聯在一起的LED發光管的一端(共陰或者共2端),LED發光管的另一腳連接通用I/O口,來控制LED亮滅。這種方法能同時驅動較多的LED,方式靈活,可以節省單片機的I/O口資源。 比較兩種方案,本設計采用方案二。2.2 數據存儲模塊 方案一:采用靜態RAM存儲需
7、要顯示的內容,盡管靜態存儲器具有存儲內容大,傳輸速度快的優點,但是斷電后,其存儲的數據就會消失,所以不適合用于存儲固定或者長時間不變的數據。 方案二:采用ROM存儲需要顯示的內容,ROM可以長時間的存儲信息,并且掉電后數據不丟失,此種方案適合存儲不變的數據。 方案三:采用串行EEPROM存儲需要顯示的內容。串行EEPROM技術幾乎擁有了所有類型存儲器的優點:不易丟失、可更新、高性價比、低功耗。普遍適合應用于各類工業測控系統。在速度要求不是很高的情況下,串行EEPROM(暫定使用24C256)是比較理想的選擇。 以上方案,第三種方案有明顯的優點,所以選擇方案三。2.3 本設計任務 綜合以上技術選
8、擇的論述和LED的發展趨勢,本設計將以AT89C51單片機為核心,采用串行傳輸、動態掃描技術、制作一款擁有PC機通信功能的,模塊化LED多功能漢字顯示屏。2.4 總體硬件組成框圖3 系統硬件設計為使該模塊化LED顯示屏顯示屏控制系統具有更加方便的實用性和靈活性,需要對系統的各個硬件進行精心設計。其中硬件電路包括LED點陣顯示條屏、譯碼驅動電路、移位寄存系統、單片機控制系統等。3.1 LED點陣顯示條屏的硬件設計LED驅動模塊是LED顯示屏設計的關鍵部分,其驅動電路的設計合理與否直接關系到LED顯示屏的亮度、穩定的重要指標。本設計中LED的驅動采用三極管和74LS154實現的。3.1.1 74L
9、S154的簡單介紹74LS154是一個416譯碼器,主要電特性的典型值如下:tpdPdABCD-outputG1、G2-output23ns19ns170mW當選通端(G1、G2)均為低電平時,可將地址端(ABCD)的二進制編碼在一個對應的輸出端,以低電平譯出。若將 G1 和G2 中的一個作為數據輸入端,由ABCD 對輸出尋址,54/74154 還可作1 線16 線數據分配器真值表如下:輸入輸出G1G2DCBA0123456789101112131415LLLLLLLHHHHHHHHHHHHHHHLLLLLHHLHHHHHHHHHHHHHHLLLLHLHHLHHHHHHHHHHHHHLLLLH
10、HHHHLHHHHHHHHHHHHLLLHLLHHHHLHHHHHHHHHHHLLLHLHHHHHHLHHHHHHHHHHLLLHHLHHHHHHLHHHHHHHHHLLLHHHHHHHHHHLHHHHHHHHLLHLLLHHHHHHHHLHHHHHHHLLHLLHHHHHHHHHHLHHHHHHLLHLHLHHHHHHHHHHLHHHHHLLHLHHHHHHHHHHHHHLHHHHLLHHLLHHHHHHHHHHHHLHHHLLHHLHHHHHHHHHHHHHHLHHLLHHHLHHHHHHHHHHHHHHLHLLHHHHHHHHHHHHHHHHHHHLLHXXXXHHHHHHHHHHHHH
11、HHHHLXXXXHHHHHHHHHHHHHHHHHHXXXXHHHHHHHHHHHHHHHH74LS154的真值表3.1.2 驅動電路的設計 該系統的驅動電路由74LS154與三極管共同組成的,原理圖如下: 如上圖所示,首先采用AT89C51為本系統的單片機型號。其中,AT89C51是一種帶4 kb閃爍可編程可擦除只讀存儲器(Falsh Programmable and Erasabl Read OnlyMemory FPEROM)的低電壓、高性能CMOS型8位微處理器,俗稱單片機。器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集、輸出管腳相兼容。由于將多功能
12、8位CPU和閃爍存儲器組合在單個芯片中,能夠進行1000次寫擦循環,數據保留時間為10年。時鐘電路由AT89C51的18,19腳的時鐘端(XTALl及XTAL2)以及12 MHz晶振X1,電容C2,C3組成,采用片內振蕩方式。復位電路采用簡易的上電復位電路,主要由電阻R1,R2,電容C1,開關K1組成,分別接至AT89C51的RST復位輸入端。LED的行掃描端接到單片機P0口,而列掃描接到三極管的發射極。其中列掃描端(B1B8)用于LED的數據掃描,憑借74LS154的譯碼和三極管的驅動,使得LED能發光。(A1A8)通過P0口提供給LED的顯示數據。考慮到P0口必須設置上拉電阻,本設計采用4
13、.7k排電阻作為單片機的上拉電阻。下圖為AT89C51的引腳圖:3.2 數據存儲電路的設計 本設計由串行的ROM 24C256組成數據存儲電路。其中,24C256是一款1256K位的支持I2C總線數據傳送協議,可以用電擦拭,可編程自定時寫周期的串行CMOS EEPROM。此芯片有兩種寫入方式,一種是字節寫入方式,另一種是頁寫入方式。此芯片允許在一個寫周期內進行對一個字節到一頁的若干個字節的編程寫入。24C256的引腳排列和各個引腳的功能如下圖和下表:引腳名稱功用A0 A1 A2器件地址選擇SDA串行數據/地址SCL串行時鐘WAP寫保護Vcc1.8V到6.0V電源Vss接地數據存儲器24C256
14、的接口設計原理圖如下圖所示: 該存儲電路只由24C256芯片組成,SCL為串行時鐘引腳,用來產生器件所有數據發送或接受的時鐘。SDA是串行數據/地址,這是一個雙向的傳輸端,功能是接收或者發送所有的數據以及傳送地址。LED顯示器的控制系統工作時,單片機89C51依靠SDA引腳與SCL引腳讀取24C256中存儲的內容,并在LED顯示屏上顯示出來。當然也可以通過PC機(上位機)將已經編輯好的數據內容下載到24C256的芯片內。3.3 PC機(上位機)通信模塊的設計 LED顯示屏和電腦的通訊方式采用了標準RS232接口,電路原理圖如下圖所示:通訊方式為10位的異步通訊。RS232接口實際上是一種串行通
15、信標準,是由美國EIA(電子工業聯合會)和BELL 公司一起開發的通訊協議,它對信號線的功能、電氣特性、連接器等都有明確的規定。由于RS-232接口的EIA是用正負電平表示邏輯關系的(-3V-15V為1、+3V+15V為0)。與TTL以高低電平表示邏輯關系不同,因此,為了能夠和計算機接口通信,必須在EIA電平和TTL電平之間進行電平轉換。MAX232芯片可完成TTL-EIA電平轉換,且只用單一+5V電源,因此得到廣泛應用。由于采用的是標準RS232接口,所以傳輸距離不能很遠,當傳輸距離超過15M,就要采用422或485接口,則只要加上一塊RS232轉422/485電路模塊就可以了。3.4 LE
16、D顯示屏的選擇LED顯示屏模塊技術指標參數表如下表所示:規格(mm)5顯示像素/平米17300模塊1R1YG(綠紅)顯示屏像素點數64*16=1024尺寸(mm)480*120面積()0.576最大功耗(瓦/平方米)100(單)/200(雙)掃描速度大于75Hz視角水平視覺160,垂直視覺160環境要求-2060供電要求220VAC10% 50Hz驅動方式1/16掃描使用壽命10萬小時4 系統的軟件設計軟件也是LED漢字顯示屏控制系統的重要組成部分。在系統的軟件設計中,我同樣采用模塊化的設計,將系統的各個部分編寫出子模塊的形式,通過這樣的方式,可以增加系統軟件的可移植性和可讀性。4.1 下位機
17、軟件流程 本系統的下位機(單片機89C51)主要作用是用來實現LED漢字顯示屏上字樣的移位、顯示和數據的讀取等等功能。所以主程序的流程圖如下:4.2 上位機軟件 本系統的上位機軟件主要是編輯LED顯示屏顯示的內容,在設計中采用Visual Basic語言LED顯示屏控制系統的內容下載軟件。4.2.1 Visual Basic 中串口通訊的應用現在大量的智能儀器或數據采集模塊都采用了RS232或485通訊接口,通過相應的通訊協議,將測試、采集的數據傳輸給上位機,以滿足各種形式的數據處理的要。VisualBasic60(以下簡VB)是許多工程技術人員熟悉和常用的應用程序開發軟件,VB以其簡單易學、
18、32位面向對象的程序設計等特點,倍受廣大計算機開發者的青睞,已廣泛地應用于各個領域;如何用VB編寫數據通訊程序,并進行數據處理,意義重大。 用VB開發串口通訊一般有兩種方法:一是采用VB自身的標準控件Mscomm來實現;另一種是利用windows的通訊API函數。4.2.2 通訊基礎知識一般來說,計算機都有一個或多個串行端口,它們依次為com1、com2、,這些串口還提供了外部設備與PC進行數據傳輸和通信的通道。這些串口在CPU和外設之間充當解釋器的角色。當字符數據從CPU發送給外設時,這些字符數據將被轉換成串行比特流數據;當接收數據時,比特流數據被轉換為字符數據傳遞給CPU,再進一步說,在操
19、作系統方面,Windows用通信驅動程序(COMM.DRV)調用API函數發送和接收數據,當用通信控件或聲明調用API函數時,他們由COMM. DRV解釋并傳遞給設備驅動程序,作為一個VB程序員,要編寫通信程序只需知道通信控件提供給Windows通信API函數的接口即可換句話說,只需設定和監視通信控件的屬性和事件即可。4.2.3 數據的發送VB發送數據有兩種:一、發送字符數據;二、發送二進制數據。 1.發送字符數據 在通訊中以單字符方式逐個發送數據時,每一個數據范圍是:0128。如發送58給單片機則可以這樣表示: Mscomm1.Output=Chr(50) 發送數據(16進制) 在通訊中以多
20、字符方式發送數據時,發送的是Ascii碼值。如發送“LED顯示屏”則可以這樣表示: Dim data as String 定義發送數據變量 data=” LED顯示屏” 給變量賦值 Mscomm1.Output=data 發送數據 2.發送二進制數據 以發送字符方式時,發送的數據范圍只能是:0128,而單片機經常處理的數據范圍是0255,那么怎么樣發送大于128的數據呢?方法是采用二進制方式發送數據。首先定義一個二進制類型的數組,然后把要發送的數值賦給二進制數組,再通過Mscomm發送。如發送數值220的具體過程如下: Dim data(0) as byte 定義發送數據數組 Data(0)=
21、220 給數組賦值 Mscomm1.output=data(0) 發送數據 4.2.4 數據的接收 接收數據有兩種方式,一、以文本方式接收(InputMode=0);二、以二進制方式接收(InputMode=1)。 1.以文本方式接收數據 在InputMode=0的模式下,是以文本方式接收數據,在接收數據之前,我們必須先定義一個字符串變量,用以接收數據緩沖區里的數據,具體過程如下: Dim receive As String * 1 定義接收數據變量 Select Case MSComm1.CommEvent 判斷事件類型 Case comEvReceive 事件類型為接收數據 receive
22、 = MSComm1.Input 接收數據 End Select 2.以二進制方式接收數據 在InputMode=1的模式下,是以二進制方式接收數據,在接收數據之前,我們必須先義一個二進制類型的數組,用以接收數據緩沖區里的數據,過程如下: Dim receive(n) As Byte 定義接收數據變量 Select Case MSComm1.CommEvent 判斷事件類型 Case comEvReceive 事件類型為接收數據 Mscomm1.InputMode=1 接收方式為二進制方式 For k=0 to n Receive(k) = MSComm1.Input 接收數據 Next k
23、End Select4.3 編程思想 要實現LED漢字顯示屏的動態滾動顯示效果,其實就是以固定的合適周期,顯示一幅幅不同內容的屏幕畫面。所以在軟件設計上,只需按照一定的時間間隔改變存儲于顯示緩沖區的信息內容。比如左移的動態效果,就是讓顯示緩沖區的點陣數據向左移動一列,由于顯示緩沖區的所有數據左移一列需要一定的時間,不可能在兩次中斷間隔時間內實現這一處理過程,鑒于此,就需要設置兩個顯示緩沖區,一個用于保存當前屏幕正在顯示的信息數據,另一個則用來對當前的信息數據進行處理。在到達換屏時間間隔后,切換當前顯示緩沖區到數據已經處理的顯示緩沖區,然后再對另一顯示緩沖區進行數據處理,以此循環下去。要保證動態
24、顯示的正常,符合人們的視覺習慣,最根本的問題是如何分配刷新顯示屏的定時時間與兩個顯示緩沖區數據顯示、處理的替換。為了二者的處理時間不相互沖突,本設計采用的方法是使顯示緩沖區的數據處理在多次多次定時中斷程序執行之間的時間間隔內進行并完成。 數據處理時間=(定時中斷時間-傳輸數據時間)中斷次數 這樣,只要合理的設定中斷次數就能保證刷新屏幕間隔時間內顯示緩沖區有足夠的時間處理數據。4.4 字模處理 從字節長度看,漢字占兩個字節(Byte),數字只占一個字節,那么:漢字字模為16*16個點),ASCII碼字符的字模為8*16個點。這樣字模的長度不同,處理起來就會有困難。為此,本設計采用這種字模處理方法
25、:把漢字拆成兩半,這樣就與英文字母和阿拉伯數字的字模統一起來。字模的存儲是按順次存儲在數據存儲區里,如蘇字的字模在數據存儲區里是這樣存放的:uchar code tab32= 08H,20H,08H,24H,0FFH,0FEH,08H,20H0AH,20H,02H,10H,3FH,0F8H,02H,10H02H,10H,22H,18H,24H,16H,44H,12H08H,10H,10H,10H,20H,50H,40H,20H 但是僅僅依靠人工方法獲取漢字代碼是會很繁瑣。所以,我檢索了互聯網,找到了一款功能十分強大的漢字字庫提取程序,軟件打開后,在指定地方輸入漢字,點“生成”,十六進制數據的漢
26、字代碼即可自動生成。甚至可以輸入多個漢字以及選擇動態顯示方式,截圖如下:4.5 動態效果的實現本文設計的LED點陣顯示屏可以實現左移、掉下、上升三種顯示方式。其中只有左移方式可以實現多于一屏內容的顯示,其它的顯示方式只能顯示一屏的內容。顯示方式設置由微機控制,微機在傳送點陣字模數據時,先顯示方式,再傳送點陣數據。顯示過程由單片機定時中斷程序控制,每定時中斷一次點亮一行,定時中斷時間為0.8ms,每中斷16次,即可對整個顯示屏掃描一次,完成一屏信息的刷新,每秒顯示畫面數達78屏,可保證畫面無閃爍感。編程采用的是C言語,應用C51編程具有以下優點: C51管理內部寄存器和存儲器的分配,編程時,無需
27、考慮不同存儲器的尋址和數據類型等細節問題。 程序由若干函數組成,具有良好的模塊結構。 有豐富的子程序庫可直接引用,從而大大減少用戶編程的工作量。 C言語和匯編言語可以交叉使用,匯編言語程序代碼短、運行速度快,但復雜運算編耗時。用匯編言語編寫與硬件有關的部分,用C言語編寫與硬件無關的運算部分程序,充分發揮兩種言語的長處,提高開發效率。4.5.1 左移效果 在顯示條屏較小的情況下,為了顯示更多的信息內容,普遍采用的方法是移位顯示,按照人們的日常習慣,本設計選擇左移的動態效果,它的特點是不僅僅局限于顯示屏幕的大小、顯示效果好,編程簡單。下面,用16*64的條型顯示屏的左移方式為例,說明左移動態效果的
28、實現方法: 屏幕的數據大小為128個字節,所以要先在數據存儲區里開辟一個256個字節的顯示緩沖區(分為兩個顯存),其中一個用以保存當前需要顯示的信息內容,而另一個用來處理數據。要實現左移的動態效果,原理很簡單,其實就是每隔一段時間,向顯示緩沖區里加入一列數據。具體做法是:第一個字節左移一位,保存于變量A中,第二個字節右移7位(一個字節是8位),保存于變量B中,A和B邏輯或運算,結果保存于A中,這樣就完成了第一個字節的數據處理。一行有8個字節的數據需要處理,所以要設8此循環,如此循環8次后,便完成了一行的數據處理。同時,每個字有16行,因此我們需要在8次循環里再設計一個16次的外循環,至此,整個
29、屏幕的數據就都處理完了。再啟動更新信號,交換顯示存儲區,顯示程序就顯示剛才處理好了的內容,接著,單片機再對另一顯示存儲區的數據進行處理,處理完成后再交換顯示。如此這樣,就能實現左移的動態效果。程序流程圖如下圖所示:具體源程序如下:void rtol(void) uchar a,b,i,k,u,n; while(1) /- /判斷內容改變沒有? if(change=1)break; /- for(n=0;nleng;n+) /一共有length個字(8*16) /- /判斷內容改變沒有? if(change=1)break; /- for(i=0;i8;i+) /一邊字有8位,要移8次 /- /
30、判斷內容改變沒有? if(change=1)break; /- if(choose=1) /處理顯存1區 addr2=0; else /處理顯存2區 addr2=256; /- for(k=0;k16;k+) /一屏要處理16個字(8*16) for(u=0;u16;u+) /一個字要處理16個字節 num=512+u+k*16+n*16; a=*num8-i; a|=b; dispd=addr2+u+k*16; *dispd=a; /保存數據 while(jh=0); jh=0; /關交換信號 choose=choose; 4.5.2 上升效果編程 本系統實現的上升效果具體是:內容從顯示屏底
31、部緩慢地上升,整行字出現后,會定格一段時間,讓人們看清楚顯示的內容,接著閃爍三下,提醒正在顯示的內容即將退出,然后內容開始上移,直到消失,這樣,就完成了一次完整顯示過程。具體實現的方法是:設定一個16次循環,在第一次循環中,顯存只取顯示內容的第一行數據,放到顯存的末行,即第16行。在第二次循環中,顯存讀取顯示內容的第一和第二行數據,同時,第一行數據放入顯存的第15行,第二行數據放入顯存的第16行,如此循環16次,直到全部顯示內容顯示出來。設定程序,顯示內容閃爍三次。接著退出的方法差不多。區別僅是每次取的行數不一樣。程序流程圖如下:具體源程序如下:void rise(void) uchar i;
32、 uint k,g,t,m; /- deal(); /顯示前把數據重新排列 /- while(1) /- /判斷內容改變沒有? if(change=1)break; /- for(t=0;t2;t+) /入、出共兩次 /- /判斷內容改變沒有? if(change=1)break; /- if(t=0)g=1024; /入的首地址 if(t=1)g=1280; /出的首地址 /- for(i=0;i=16;i+) /出完有16行 /- /判斷內容改變沒有? if(change=1)break; /- if(choose=1) /處理顯存1區 addr2=0; else /處理顯存2區 addr
33、2=256; /- for(k=0;k256;k+) /一屏有256個字節 dispd=addr2+k; num=g+k; *dispd=*num; g+=16; /指向上一行數據 while(jh=0); jh=0; /關交換信號 choose=choose; /- 定一會 for(i=0;i25;i+) /- /判斷內容改變沒有? if(change=1)break; /- while(jh=0); jh=0; if(t=0) /- /判斷內容改變沒有? if(change=1)break; /- 閃3下 TR0=0; p34=1; p35=1; for(m=0;m34000;m+); T
34、R0=1; /- /判斷內容改變沒有? if(change=1)break; /- for(m=0;m35000;m+); TR0=0; p34=1; p35=1; /- /判斷內容改變沒有? if(change=1)break; /- for(m=0;m34000;m+); TR0=1; /- /判斷內容改變沒有? if(change=1)break; /- for(m=0;m35000;m+); TR0=0; p34=1; p35=1; /- /判斷內容改變沒有? if(change=1)break; /- for(m=0;m34000;m+); TR0=1; /- /判斷內容改變沒有?
35、if(change=1)break; /- for(m=0;m35000;m+); 4.5.3 掉下效果編程 掉下的動態效果的實現與上升的編程思想差不多,也是設定一個16次的循環,在第一次的循環中,只讀取顯示內容的最后一行數據,放到顯存的第一行里。在第二次循環中,讀取顯示內容的第15和第16行數據,并依次放入顯存的第1和第2行。如此循環16次,整屏幕的數據都顯示出來。退出同理。不再復述。程序流程圖如下:具體源程序如下:void drop(void) uchar i; uint k,g,t,m; /- deal(); /顯示前把數據重新排列 /- while(1) /- /判斷內容改變沒有? i
36、f(change=1)break; /- for(t=0;t2;t+) /入、出共兩次 /- /判斷內容改變沒有? if(change=1)break; /- if(t=0)g=1536; /入的首地址 if(t=1)g=1280; /出的首地址 /- for(i=0;i=16;i+) /出完有16行 /- /判斷內容改變沒有? if(change=1)break; /- if(choose=1) /處理顯存1區 addr2=0; else /處理顯存2區 addr2=256; /- for(k=0;k256;k+) /一屏有256個字節 dispd=addr2+k; num=g+k; *di
37、spd=*num; g-=16; /指向上一行數據 while(jh=0); jh=0; /關交換信號 choose=choose; /- 定一陣 for(i=0;i25;i+) /- /判斷內容改變沒有? if(change=1)break; /- while(jh=0); jh=0; if(t=0) /- /判斷內容改變沒有? if(change=1)break; /- 閃3下 TR0=0; p34=1; p35=1; for(m=0;m34000;m+); TR0=1; /- /判斷內容改變沒有? if(change=1)break; /- for(m=0;m35000;m+); TR0
38、=0; p34=1; p35=1; /- /判斷內容改變沒有? if(change=1)break; /- for(m=0;m34000;m+); TR0=1; /- /判斷內容改變沒有? if(change=1)break; /- for(m=0;m35000;m+); TR0=0; p34=1; p35=1; /- /判斷內容改變沒有? if(change=1)break; /- for(m=0;m34000;m+); TR0=1; /- /判斷內容改變沒有? if(change=1)break; /- for(m=0;m35000;m+); 4.6 上位機串口通信軟件4.6.1 界面設計
39、新建一個窗體From1,添加以下主要控件: 1、ProgressBar1 2、Commad1、Commad2 3、Frame1 4、Combo15、Text1軟件界面如下圖:4.6.2 程序編寫 首先對8051串口進行初始化,與上位機通訊接收數據,判斷數據是否接收完,如果沒有繼續接收,如果接收完則計算地址偏移量然后從字庫中取字,最后固定顯示并移動。傳輸函數編程流程圖如下圖所示源程序如下:Public Sub port(contton As String, msg As Byte, way As Integer) - Dim counter As Integer 進度條 Dim x As Lon
40、g 保存字的位置 Dim num As Integer 計算字的個數 Dim data As String * 4 接收數據 Dim se(0) As Byte If contton = Then MsgBox 沒有輸入要顯示的內容,請輸入! Exit Sub Else num = Len(contton) - 校對有沒有字庫里沒有的字符? For k = 1 To num x = Asc(Mid(contton, k, 1) If (x -23617 And x -2050 And x 126) Then If x 9 Then 判斷是不是Tab鍵? none = Mid(contton,
41、k, 1) MsgBox 字庫中沒有輸入的字 & none & 字符的字模., vbCritical, Wrong Exit Sub End If End If - 計算中文的個數 If (x = -20319 And x = -24158 And x = -23617) Or (x = 9) Then cal = cal + 1 End If Next k num = num + cal * 進度條 counter = num * 16 send.ProgressBar1.min = 0 send.ProgressBar1.Max = counter send.ProgressBar1.Va
42、lue = 0 counter = 0 On Error GoTo closed 處理串口沒有打開的情況 - 發送校對符 main.MSComm1.Output = Chr(6) For tim = 0 To 2000000 延時 Next tim If main.MSComm1.InBufferCount 0 Then If Asc(main.MSComm1.Input) 16 Then main.MSComm1.InBufferCount = 0 清空接收區 MsgBox 傳輸錯誤,請檢查各硬件是否正常?, vbOKOnly, 傳輸錯誤 Exit Sub End If Else MsgBo
43、x 傳輸錯誤,請檢查各硬件是否正常?, vbOKOnly, 傳輸錯誤 Exit Sub End If - 發送啟動符5(任定,作為地址信號) main.MSComm1.Output = Chr(5) - 延時 For tim = 0 To 1000000 Next tim - 發送顯示方式 main.MSComm1.Output = Chr(way) - 發送字符串的長度 If num 256 Then 0255 se(0) = num main.MSComm1.Output = se main.MSComm1.Output = Chr(0) Else 256500 se(0) = num -
44、 255 main.MSComm1.Output = se main.MSComm1.Output = Chr(1) End If Open c:HanselLED.fon For Random As #1 Len = 4 打開字庫 - 處理傳輸中出錯的情況 On Error GoTo wrong - 傳輸 num = num - cal For k = 1 To num x = Asc(Mid(contton, k, 1) If x = 9 Then Tab鍵占一個格 For a = 0 To 31 main.MSComm1.Output = Chr(0) * 進度條 send.Progre
45、ssBar1.Value = counter counter = counter + 1 Next a ElseIf -20319 = x And x = -2050 Then 中文字符 If x = -20319 Then x = 3169 Else f = (x + 20318) / 255 c = Int(f) d = (x + 20318) Mod 255 x = 32 * (c * 93 + d + 100) + 1 End If x = 32 * (x + 20418) + 1 漢字的位置從第100位開始存儲 - 取字模 ofe = 0 For big = 0 To 1 For a
46、 = 0 To 15 Get #1, x + a + ofe, data b = Val(data) se(0) = b main.MSComm1.Output = se * 進度條 send.ProgressBar1.Value = counter counter = counter + 1 ofe = ofe + 1 Next a ofe = 1 Next big ElseIf -24158 = x And x = -23617 Then 全角字符 If x = -20319 Then x = 219809 Else f = (x + 24157) / 255 c = Int(f) d = (x + 24157) Mod 255 x = 32 * (c * 93 + d + 6870) + 1 全角符號的位置從第6870位開始存儲 End If - 取字模 ofe = 0 For big = 0 To 1 For a = 0 To 15 Get #1, x + a + ofe, data b = Val(data) se(0) = b main.MSComm1.Output = se * 進度條 send.P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力設備在線監測系統的發展趨勢與挑戰考核試卷
- 2025年【起重機械電氣安裝維修】新版試題及答案
- 2024年項目管理考試回顧試題及答案
- 2025年注會學習技巧提升的途徑試題及答案
- 玻璃纖維增強塑料的低溫性能測試考核試卷
- 高端屋頂花園施工方案
- 汽車改裝配件批發考核試卷
- 2025年投資策略與經濟周期的互動關系試題及答案
- 社區服務與社會組織發展考核試卷
- 機場航站樓服務質量評價指標體系考核試卷
- 報關培訓課程內容
- 營業執照使用授權書
- 南寧市永安村發展規劃方案
- 成人癲癇持續狀態護理專家共識2023
- 江蘇省泰州市姜堰區2023-2024學年二年級下學期期中數學試卷
- 國測省測四年級勞動質量檢測試卷
- 新生兒腹瀉病護理查房
- 再回首合唱簡譜
- 二手車交易平臺商業計劃書
- 作文集封面模板A4高清全套
- 家長會示范課件培養孩子養成獨立自主的習慣
評論
0/150
提交評論