<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于軟件開發(fā)的LED顯示控制系統(tǒng)

          基于軟件開發(fā)的LED顯示控制系統(tǒng)

          作者: 時間:2017-10-21 來源:網(wǎng)絡(luò) 收藏

            控制系統(tǒng)設(shè)計是采用單片機(jī)AT89C51作為主控制器,采用LED行列陣顯示及鍵盤同步中斷請求顯示的2種模式,實現(xiàn)串口通信并進(jìn)行2種模式下的切換控制。系統(tǒng)成功地實現(xiàn)對I/O口通道控制以及鍵盤的中斷請求等功能控制。系統(tǒng)仿真環(huán)境的搭建是基于 μVision 3軟件在聯(lián)合開發(fā)平臺中調(diào)試完成的。在調(diào)試的過程中,可以從多個方面直接觀察程序運行情況和電路工作分析,簡化了理論程序和設(shè)計實驗等過程,大大減少了代碼的開發(fā)周期,降低了硬件成本。

          本文引用地址:http://www.ex-cimer.com/article/201710/367152.htm

            1 μVision 3與protues簡介

             μVision 3是美國Keil SOFtware公司出品的C51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),其生成目標(biāo)代碼的效率非常高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。

            是英國Labcenter electonICs公司研發(fā)的電子設(shè)計自動化(EDA)系統(tǒng),主要由ISIS電路設(shè)計與仿真平臺、Peospite模/數(shù)混合仿真器、VSM單片機(jī)/嵌入式系統(tǒng)協(xié)同仿真和ARES PCB設(shè)計構(gòu)成。在編譯調(diào)試方面,支持Keil μVision 3和MPLAB等第三方開發(fā)工具。

            2 系統(tǒng)設(shè)計

            2.1 系統(tǒng)開發(fā)框架

            控制系統(tǒng)設(shè)計由系統(tǒng)原理設(shè)計、系統(tǒng)代碼開發(fā)、硬件電路模擬仿真、軟硬件聯(lián)合調(diào)試、實物移植等組成。其中,代碼開發(fā)仿真模擬通過軟件與Keil μVision 3軟件之間相互聯(lián)合仿真進(jìn)行設(shè)計。系統(tǒng)開發(fā)設(shè)計框架如圖1所示。

            

            2.2 硬件結(jié)構(gòu)設(shè)計

            系統(tǒng)硬件由單片機(jī)AT89C51系統(tǒng)和行列陣模塊、上位機(jī)、串行顯示鍵盤模塊、晶振電路和存儲器模塊等構(gòu)成。系統(tǒng)硬件結(jié)構(gòu)如圖2所示。

            

            硬件模塊主要完成的功能有:顯示屏的驅(qū)動,是通過與上位機(jī)間的串口通信接收文件信息并保存,通過行列驅(qū)動器控制完成LED的驅(qū)動。串行顯示鍵盤,為實現(xiàn)鍵盤輸入與顯示屏輸出實現(xiàn)同步,進(jìn)行串口輸出模式切換,完成對LED的驅(qū)動,但由于系統(tǒng)中并行口的I/O資源不夠,而串行口又沒有其他作用,通過用數(shù)據(jù)鎖存模塊74LS164來擴(kuò)展并行I/O口,節(jié)約單片機(jī)資源。將AT89C51串行通信口輸出的串行數(shù)據(jù)譯碼在其并口線上輸出,將顯示的數(shù)據(jù)直接送串口發(fā)送緩沖器,等待串行中斷即可。

            2.2.1 LED顯示模塊

            顯示部分采用動態(tài)掃描方式,實現(xiàn)漢字、圖像、數(shù)字字符等數(shù)據(jù)信息的控制以及顯示等功能。采用行掃描方式,當(dāng)選通第1行LED點陣時,對應(yīng)列數(shù)據(jù),由于74HC595器件的特殊性,通過將每個器件的串行數(shù)據(jù)輸入引腳14與下一個器件的串行數(shù)據(jù)輸出引腳9級聯(lián),可以把需要顯示的數(shù)據(jù)信息依次存入74HC595器件內(nèi),通過其鎖存器功能將數(shù)據(jù)鎖存,待40列數(shù)據(jù)都存入74HC595器件內(nèi)時,把輸出有效引腳13置為低電平,則40列數(shù)據(jù)一起輸出,達(dá)到一行顯示的效果。依次類推,實現(xiàn)整個顯示屏的顯示功能。

            2.2.2 串行顯示鍵盤

            該模塊用于與人機(jī)交互和顯示,行列式鍵盤即矩陣式鍵盤,由行和列組成,在每個行列的交叉點上放置一個按鍵。包括8只控制LED的位驅(qū)動晶體管,控制數(shù)碼顯示的數(shù)據(jù)由控制燈亮滅信號和控制位顯示的控制信號兩部分組成。

            2.2.3 串口通信

            串口接口通過RS 232實現(xiàn)上位機(jī)與單片機(jī)傳輸信息。當(dāng)模塊進(jìn)入串行傳輸方式,上位機(jī)通過同步時鐘線SCLK和串行數(shù)據(jù)線完成數(shù)據(jù)的傳輸。在AT89C51片選引腳CS為高電平時,主機(jī)時鐘線上的時鐘信號才能被液晶顯示模塊接受,當(dāng)引腳CS為低電平時,顯示模塊內(nèi)部寄存器將被復(fù)位,即終止數(shù)據(jù)傳輸。

            2.3 軟件設(shè)計

            整個系統(tǒng)軟件設(shè)計語言采用C語言,進(jìn)行中斷控制,其中代碼開發(fā)編寫測試則通過Keil μVision 3軟件與Proteus軟件之間完成。

            軟件實現(xiàn)代碼流程如圖3所示。

            

            由于軟件開發(fā)代碼復(fù)雜,現(xiàn)給出鍵盤輸入程序部分代碼如下:

            

            

            3 Proteus與Keil軟件的聯(lián)調(diào)設(shè)置

            系統(tǒng)采用Keil μVision 3與Proteus聯(lián)調(diào)的方式來實現(xiàn)。首先需要安裝Keil驅(qū)動軟件vDMAgdi.exe,然后Keil目錄下的bin中的VDM51. dll拷貝到Proteus下面的bin中,打開Keil UVision 3軟件,創(chuàng)建項目,并單擊option for targetl,在打開對話框,選擇output選項卡,在creat hex file前面打勾,以便產(chǎn)生HEX文件,同時在debug選項卡中選擇proteus vsmsimulator,將Keil生成。HEX文件如圖4所示。

            

            在Proteus軟件中,雙擊AT89C51單片機(jī),在其屬性下面的Program file中加載由Keil μVision 3產(chǎn)生的。HEX文件,然后點擊ok退出,同時在debug菜單下面選擇use remote debug monitor,這樣就完成了Proteus與Keil的聯(lián)調(diào)準(zhǔn)備工作如圖5所示。

            

            4 結(jié)語

            由仿真結(jié)果表明,在該模式開發(fā)環(huán)境下,有利于各個環(huán)節(jié)參數(shù)變量的調(diào)節(jié)設(shè)定,使得系統(tǒng)軟件開發(fā)更加容易實現(xiàn),大大提高了代碼開發(fā)周期和進(jìn)度,簡化了開發(fā)流程。



          關(guān)鍵詞: LED顯示 Keil Proteus

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();