免费色播,亚洲国产欧美国产第一区二区三区,毛片看,日本精品在线观看视频,国产成人精品一区二区免费视频,日本黄色免费网站,一级毛片免费

基于AVR的VGA顯示和激光打印系統

來源:網絡

點擊:1088

A+ A-

所屬頻道:新聞中心

關鍵詞: 基于AVR的VGA顯示和激光打印系統

      用ATMEGA128單片機結合CPLD實現了對VGA顯示器和激光打印機的控制,完成了在VGA顯示器上實時顯示字符和圖形的功能,并控制激光打印機實現了屏幕信息的打印輸出。本設計克服了單片機系統顯示和打印功能薄弱的缺點,為擴大其應用范圍奠定了基礎,同時也為其他嵌入式系統的信息輸出提供了一種解決方案。

      隨著集成電路制造技術的不斷發(fā)展,MCU、ARM、DSP等微控制器、微處理器的性能急劇提高,但是輸出功能,尤其是顯示和打印功能仍然比較薄弱,與PC機相比有較大的差距。輸出功能薄弱的缺點,限制了其應用范圍的擴大。ATmega128是美國Atmel公司生產RISC 結構的高性能MCU芯片,含有ADC、I2C、SPI、PWM等多種資源 [1]。本論文以ATMEGA128單片機為例,結合CPLD和高速SRAM,介紹在VGA顯示器上顯示字符、圖形信息和控制激光打印機打印輸出屏幕信息的方法。本設計克服了單片機系統信息輸出功能薄弱的缺點, 為單片機和其他嵌入式系統的信息輸出提供了一個解決方案,使得其應用范圍更加廣闊。系統結構如圖1所示。

      1  VGA顯示控制器的實現

      PC機在VGA的顯示器(通常包括CRT和液晶顯示器)上的信息顯示是通過顯卡完成的。單片機在VGA顯示器上顯示信息同樣需要類似的模塊來輔助,因此我們設計了和顯卡功能相似的VGA顯示控制器來輔助ATMEGA128單片機在VGA顯示器上顯示信息。下面介紹640×480分辨率、59.9HZ刷新率的通用VGA顯示控制器的設計方法,并說明微控制器、微處理器如何在VGA接口的顯示器上顯示信息。

      1.1 VGA時序產生模塊的設計

      要實現VGA顯示控制器的功能,首先需要了解VGA信號的參數和時序。圖2所示為640×480分辨率、59.9HZ刷新率的VGA時序圖[2]。根據VGA時序圖,本論文研究并實現了VGA顯示控制器,所用硬件為Altera公司的EPM7128 CPLD和ISSI公司的高速SRAM。EPM7128的作用是通過編程產生VGA顯示所需的時序信號,并協助微控制器實現對顯存的讀寫操作。高速SRAM的作用是存儲需要顯示的數據信息,其讀寫周期為8ns,滿足顯示器刷新時對顯存進行快速讀寫的時間要求。設計中用一個bit代表一個象素,640×480分辨率需要37.5K字節(jié)的顯存。象素時鐘頻率的選擇與VGA監(jiān)視器的刷新頻率和分辨率相關,59.9HZ刷新率時,象素時鐘頻率為25.175MHZ,其計算公式為:時鐘頻率=(行象素數+行消隱點數)×(一場行數+消隱行數)×刷新率。

      用ATMEGA128單片機結合CPLD實現了對VGA顯示器和激光打印機的控制,完成了在VGA顯示器上實時顯示字符和圖形的功能,并控制激光打印機實現了屏幕信息的打印輸出。本設計克服了單片機系統顯示和打印功能薄弱的缺點,為擴大其應用范圍奠定了基礎,同時也為其他嵌入式系統的信息輸出提供了一種解決方案。

      隨著集成電路制造技術的不斷發(fā)展,MCU、ARM、DSP等微控制器、微處理器的性能急劇提高,但是輸出功能,尤其是顯示和打印功能仍然比較薄弱,與PC機相比有較大的差距。輸出功能薄弱的缺點,限制了其應用范圍的擴大。ATmega128是美國Atmel公司生產RISC 結構的高性能MCU芯片,含有ADC、I2C、SPI、PWM等多種資源 [1]。本論文以ATMEGA128單片機為例,結合CPLD和高速SRAM,介紹在VGA顯示器上顯示字符、圖形信息和控制激光打印機打印輸出屏幕信息的方法。本設計克服了單片機系統信息輸出功能薄弱的缺點, 為單片機和其他嵌入式系統的信息輸出提供了一個解決方案,使得其應用范圍更加廣闊。系統結構如圖1所示。

      1  VGA顯示控制器的實現

      PC機在VGA的顯示器(通常包括CRT和液晶顯示器)上的信息顯示是通過顯卡完成的。單片機在VGA顯示器上顯示信息同樣需要類似的模塊來輔助,因此我們設計了和顯卡功能相似的VGA顯示控制器來輔助ATMEGA128單片機在VGA顯示器上顯示信息。下面介紹640×480分辨率、59.9HZ刷新率的通用VGA顯示控制器的設計方法,并說明微控制器、微處理器如何在VGA接口的顯示器上顯示信息。

      1.1 VGA時序產生模塊的設計

      要實現VGA顯示控制器的功能,首先需要了解VGA信號的參數和時序。圖2所示為640×480分辨率、59.9HZ刷新率的VGA時序圖[2]。根據VGA時序圖,本論文研究并實現了VGA顯示控制器,所用硬件為Altera公司的EPM7128 CPLD和ISSI公司的高速SRAM。EPM7128的作用是通過編程產生VGA顯示所需的時序信號,并協助微控制器實現對顯存的讀寫操作。高速SRAM的作用是存儲需要顯示的數據信息,其讀寫周期為8ns,滿足顯示器刷新時對顯存進行快速讀寫的時間要求。設計中用一個bit代表一個象素,640×480分辨率需要37.5K字節(jié)的顯存。象素時鐘頻率的選擇與VGA監(jiān)視器的刷新頻率和分辨率相關,59.9HZ刷新率時,象素時鐘頻率為25.175MHZ,其計算公式為:時鐘頻率=(行象素數+行消隱點數)×(一場行數+消隱行數)×刷新率。

      根據VGA信號的要求,用VHDL語言對EPM7128芯片編程實現VGA時序產生模塊。VGA時序產生模塊包括:每行的象素數目計數器h_cnt、每場的行數目計數器v_cnt、行同步信號hs產生模塊、場同步信號vs產生模塊、消隱信號blank產生模塊和并行輸入串行輸出模塊等。其中, h_cnt的最大計數值是799, v_cnt的最計數值是是524。行同步信號產生模塊根據h_cnt的計數值來產生行同步信號hs;場同步信號產生模塊根據v_cnt的計數值來產生場同步信號vs。消隱信號產生模塊根據h_cnt的計數值在行同步期間、行消隱前肩和行消隱后肩,把消隱信號blank置為低電平;根據v_cnt的計數值在每一場的場同步期間、場消隱前肩和場消隱后肩,把消隱信號blank置為低電平;其余時間消隱信號blank為高電平,表示此時為有效顯示期。并行輸入串行輸出模塊在有效顯示期間從sram顯存中并行讀入數據,串行輸出的顯示器的紅、綠、藍信號線上。對該程序編譯成功后用MaxplussII軟件進行波形仿真,以驗證設計的合理與否。最后設計完成的時序波形仿真如圖3所示。

     


    圖 3 VGA顯示控制器時序仿真圖

      從仿真波形圖種可以看到每一顯示行的時間為800個象素時鐘周期,每場包括525行。行同步脈沖的寬度為96個象素時鐘周期,場同步脈沖的寬度為2行。在行同步信號hs的行同步期間及其前肩和后肩,消隱信號blank為低電平,表示消隱期。在場同步信號vs的場同步期間及其前肩和后肩,消隱信號blank同樣為低電平,表示消隱期。仿真結果符合VGA標準時序,項目實際應用也證明了此結果的正確性。

      1.2 VGA顯示底層函數的編寫

      要在屏幕上顯示信息,除VGA顯示控制器之外,還需要并在ATMEGA128單片機上設計底層繪圖函數并建立字符庫。通常編寫畫線、畫圓函數時,確定一個點是否在直線或圓上,需要乘、除法和開方運算,而畫線、畫圓函數調用最為頻繁,因此計算量將大到難以接受的程度,極大降低系統的性能。為了克服上述缺點,在編寫底層繪圖函數時采用了圖形學上的Bresenham

    void circle(unsigned int x0,unsigned int y0,unsigned int r,unsigned char color)

    {    

    register int x,y,deltax,deltay,d;

    x=0;y=r;deltax=3;deltay=2-r-r;d=1-r;

           while(x<=y)

           {     drawpixel(x0+x,y0+y,color);

                  drawpixel(x0-x,y0+y,color);               

                  drawpixel(x0-x,y0-y,color);

                  drawpixel(x0+x,y0-y,color);                     

                  drawpixel(x0+y,y0+x,color);              

                  drawpixel(x0-y,y0+x,color);

                  drawpixel(x0-y,y0-x,color);

                  drawpixel(x0+y,y0-x,color);

                  if(d<0){

                         d+=deltax;      deltax+=2;

                         x++;

                  }

                  else  {

                         d+=(deltax+deltay);

                         deltax+=2;deltay+=2;

                         x++;y--;

                  }

           }         

    }
     
      畫線算法和中點畫圓法[3],通過象素逼近,采用增量計算,使得確定點是否在直線或圓上的復雜運算變?yōu)榧臃ㄟ\算,非常適合微控制器的特點,極大得提高了繪圖速度。我們從Windows系統中提取了12&times;12和96&times;96象素的0~9數字字庫,16&times;16象素的常用ASCII字符字庫。有了底層繪圖函數和字符庫,ATMEGA128單片機便可通過VGA顯示控制器實現在屏幕任意位置顯示圖形或者文字信息。右面是用ICCAVR編寫的ATMEGA128在VGA顯示器上實現中點畫圓法的例程及其實現示意圖。只需用增量法找到1/8圓上的點,其它點在中心對稱位置。

      2  激光打印機的控制

      激光打印機是目前最常用輸出設備之一,和熱敏、噴墨打印機相比具有顯著的優(yōu)點,下面介紹用ATMEGA128微控制器直接控制激光打印機打印VGA顯示器屏幕內容的方法。要控制打印機必須了解打印機命令語言。打印機語言指的是控制打印機工作的命令,它控制打印機如何組織被打印的文檔,打印機按照這些命令來處理打印數據,并最終準確的打印出文字與圖像。

      2.1   PCL打印機命令語言

      PCL打印機命令語言是世界上應用最為廣泛的標準打印機命令語言,由惠普公司開發(fā),支持文字、點陣圖像和矢量圖形的打印。PCL命令由2個以上的字符組成,總是以控制字符ESC開始,用符合EC 表示,其ASCII碼為27,所以PCL命令又被稱作ESC序列。當打印機接收到字符EC時,表示開始接收一條控制命令。PCL命令包括&ldquo;兩字符&rdquo;命令序列和&ldquo;參數化&rdquo;命令序列兩種ESC序列。

      &ldquo;兩字符&rdquo;命令序列的格式如下:EC X,其中符號X代表ASCII碼48~126的字符,即ASCII字符表中&ldquo;0&rdquo; 和&ldquo;~&rdquo;之間的字符。符號X指示打印機需要進行的操作,例如命令&ldquo;EC E&rdquo;是打印機復位命令,命令&ldquo;EC g&rdquo;把紙張的左邊距和上邊距復位成默認值。&ldquo;參數化&rdquo;命令序列格式如下:EC X y z1 # z2 # z3 ... # Zn[data] ,其中EC為起始字符,X是參數化字符,代表ASCII碼33~47之間字符,其作用是指明該序列是&ldquo;參數化&rdquo;序列;y為組字符,代表ASCII碼96~126之間字符,用來指定待執(zhí)行的操作屬于什么組;#是數值域,其范圍從-32767到65535;z i是本命令的參數,代表ASCII碼從96~126之間字符,該參數用于組合的&ldquo;參數化&rdquo;序列,非組合序列則不用,其作用是指定前面的數值域所用的參數;Zn是結束字符,表示&ldquo;參數化&rdquo;命令序列結束;[data] 是傳送到打印機的待打印數據,用8個bit表示,即為0~255之間任意數據。下面兩例分別是非組合的&ldquo;參數化&rdquo;命令序列和組合的&ldquo;參數化&rdquo;命令序:1       2 

      1是非組合序列,不含參數。2是組合序列,由序列EC &l1O 和 EC&l2A組合而成,其中小寫的字符&ldquo;o&rdquo;是該序列的參數[4]。各種命令序列的詳細說明見參考文獻[4]。

      2.2 打印屏幕

      ATMEGA128單片機的IO口和激光打印機的并口由如下信號連接: Strobe、Busy、GND、D0~D7共11根信號線。其中D0~D7是數據線,單片機通過數據線把控制打印機的PCL命令和待打印數據傳送到打印機;Busy信號線指示打印機狀態(tài)是否繁忙;Strobe 信號線是選通控制線,單片機在Strobe 信號線上輸出一個低電平脈沖即可把D0~D7上的數據寫人打印機。在論文的第一部分曾經提到,VGA顯示器所顯示的內容存儲在SRAM顯存中,每一個bit代表一個象素,因此打印屏幕就是把顯存中的數據打印出來。ATMEGA128單片機首先發(fā)送PCL語言的打印機設置命令,對打印進行設置,然后即可傳送打印數據。其步驟如下:1、發(fā)打印機復位命令;2、發(fā)設置紙張大小命令;3、發(fā)設置打印的起始位置命令;4、發(fā)設置分辨率命令;5、發(fā)設置打印機為點陣圖形模式命令;5、傳送要打印的數據;6、發(fā)結束圖形模式命令;7、發(fā)換頁指令,打印當前頁。下面是ATMEGA128單片機對HP LASERJET6L激光打印機發(fā)送PCL命令,并控制打印機打印輸出VGA屏幕信息的例程:

    void print()

    {unsigned int M; unsigned char i;  

    unsigned char xdata *p;p=NVRS;

    out(27);out('E');//打印機復位

    out(27); pprint("&l26A");// 設置紙張為A4

    out(27); pprint("*p210X");// '設置本頁打印的X坐標起始位置

    out(27); pprint("*p400Y");// '設置本頁打印的Y坐標起始位置

    out(27); pprint("*t100R");// '設置分辨率

    out(27); pprint("*r1A");// '設置圖形模式開始

    for(M=0;M<480;M++)  //傳送要打印的圖形數據

    {   out(27); pprint("*b80W");

            &hellip;&hellip;&hellip;&hellip;

        out(27); pprint("*rC");  // '圖形模式結束

        out(255); out(12);//'本頁結束,執(zhí)行打印

    }

      結論:

      本文的創(chuàng)新點是用ATMEGA128單片機結合CPLD實現了對VGA顯示器和激光打印機的控制,使單片機可以在VGA接口的顯示器上顯示圖形、文字信息,并控制激光打印機把VGA屏幕上的信息打印輸出。本設計克服了單片機控制系統的信息顯示和打印功能薄弱的缺點,使其在發(fā)揮控制功能優(yōu)勢的基礎上,還具有了實用的顯示和打印功能,為擴大其應用范圍奠定了基礎。此外,本設計中用到的ATMEGA128的接口為GPIO口和Intel格式的標準總線,因此可以方便得移植到其他類型的芯片中,為其它系統的信息顯示和打印提供了參考方案,本設計已經成功移植到了TMS320C6713 DSP芯片上[5]。

    參考文獻
    [1]   Atmel. 8-bit AVR Microcontroller with 128K Bytes In-System Programmable Flash2001
    [2]   曹允. 基于FPGA的VGA時序彩條信號實現方   法及其應用. 電子技術應用.Vol.28 No.7 2002
    [3]   孫家廣等. 計算機圖形學. 清華大學出版社,   2002
    [4]   惠普公司. PCL5 Printer Language Technical Reference Manual First Edition. 1992
    [5]   何明星等. Max7000系列可編程器件在DSP系統設計中應用 微計算機信息2003年19卷6期25-26頁

     

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。