基于AVR的VGA显示和激光打印系统_第1页
基于AVR的VGA显示和激光打印系统_第2页
基于AVR的VGA显示和激光打印系统_第3页
基于AVR的VGA显示和激光打印系统_第4页
基于AVR的VGA显示和激光打印系统_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于AVR的VGA显示和激光打印系统摘要:用ATMEGA128单片机结合CPLD实现了对VGA显示器和激光打印机的控制,完成了在VGA显示器上实时显示字符和图形的功能,并控制激光打印机实现了屏幕信息的打印输出。本设计克服了单片机系统显示和打印功能薄弱的缺点,为扩大其应用范围奠定了基础,同时也为其他嵌入式系统的信息输出提供了一种解决方案。 关键词:VGA控制器;PCL命令语言;激光打印;CPLD        随着集成电路制造技术的不断发展,MCU、ARM、DSP等微控制器、微处理器的性能急剧提高,但是输出功能,尤其是显示和打印功能仍然

2、比较薄弱,与PC机相比有较大的差距。输出功能薄弱的缺点,限制了其应用范围的扩大。ATmega128是美国Atmel公司生产RISC 结构的高性能MCU芯片,含有ADC、I2C、SPI、PWM等多种资源 1。本论文以ATMEGA128单片机为例,结合CPLD和高速SRAM,介绍在VGA显示器上显示字符、图形信息和控制激光打印机打印输出屏幕信息的方法。本设计克服了单片机系统信息输出功能薄弱的缺点, 为单片机和其他嵌入式系统的信息输出提供了一个解决方案,使得其应用范围更加广阔。系统结构如图1所示。 1  VGA显示控制器的实现    PC机在VGA的显示器(通

3、常包括CRT和液晶显示器)上的信息显示是通过显卡完成的。单片机在VGA显示器上显示信息同样需要类似的模块来辅助,因此我们设计了和显卡功能相似的VGA显示控制器来辅助ATMEGA128单片机在VGA显示器上显示信息。下面介绍640×480分辨率、59.9HZ刷新率的通用VGA显示控制器的设计方法,并说明微控制器、微处理器如何在VGA接口的显示器上显示信息。1.1 VGA时序产生模块的设计    要实现VGA显示控制器的功能,首先需要了解VGA信号的参数和时序。图2所示为640×480分辨率、59.9HZ刷新率的VGA时序图2。根据VGA时序图,本

4、论文研究并实现了VGA显示控制器,所用硬件为Altera公司的EPM7128 CPLD和ISSI公司的高速SRAM。EPM7128的作用是通过编程产生VGA显示所需的时序信号,并协助微控制器实现对显存的读写操作。高速SRAM的作用是存储需要显示的数据信息,其读写周期为8ns,满足显示器刷新时对显存进行快速读写的时间要求。设计中用一个bit代表一个象素,640×480分辨率需要37.5K字节的显存。象素时钟频率的选择与VGA监视器的刷新频率和分辨率相关,59.9HZ刷新率时,象素时钟频率为25.175MHZ,其计算公式为:时钟频率(行象素数行消隐点数)×(一场行数消隐行数)&

5、#215;刷新率。    根据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的计数值在行同步期间、行消隐前肩和行消隐后肩,

6、把消隐信号blank置为低电平;根据v_cnt的计数值在每一场的场同步期间、场消隐前肩和场消隐后肩,把消隐信号blank置为低电平;其余时间消隐信号blank为高电平,表示此时为有效显示期。并行输入串行输出模块在有效显示期间从sram显存中并行读入数据,串行输出的显示器的红、绿、蓝信号线上。对该程序编译成功后用MaxplussII软件进行波形仿真,以验证设计的合适与否。最后设计完成的时序波形仿真如图3所示。图 3 VGA显示控制器时序仿真图      从仿真波形图种可以看到每一显示行的时间为800个象素时钟周期,每场包括525行。行同步脉冲的宽

7、度为96个象素时钟周期,场同步脉冲的宽度为2行。在行同步信号hs的行同步期间及其前肩和后肩,消隐信号blank为低电平,表示消隐期。在场同步信号vs的场同步期间及其前肩和后肩,消隐信号blank同样为低电平,表示消隐期。仿真结果符合VGA标准时序,项目实际应用也证明了此结果的正确性。1.2 VGA显示底层函数的编写    要在屏幕上显示信息,除VGA显示控制器之外,还需要并在ATMEGA128单片机上设计底层绘图函数并建立字符库。通常编写画线、画圆函数时,确定一个点是否在直线或圆上,需要乘、除法和开方运算,而画线、画圆函数调用最为频繁,因此计算量将大到难以接受的程

8、度,极大降低系统的性能。为了克服上述缺点,在编写底层绘图函数时采用了图形学上的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)    &#

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

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

11、;            drawpixel(x0+y,y0+x,color);                             drawpixel(x0-y,y0+x,color);  &#

12、160;           drawpixel(x0-y,y0-x,color);              drawpixel(x0+y,y0-x,color);              if(d<0)  &

13、#160;                  d+=deltax;      deltax+=2;                     x+;   

14、;                         else                       d+=(deltax+deltay); &#

15、160;                   deltax+=2;deltay+=2;                     x+;y-;      

16、0;                            画线算法和中点画圆法3,通过象素逼近,采用增量计算,使得确定点是否在直线或圆上的复杂运算变为加法运算,非常适合微控制器的特点,极大得提高了绘图速度。我们从Windows系统中提取了12×12和96×96象素的09数字字库,16×16象素的常用ASCII字符字库。有了底层绘图函数和字符库,A

17、TMEGA128单片机便可通过VGA显示控制器实现在屏幕任意位置显示图形或者文字信息。右面是用ICCAVR编写的ATMEGA128在VGA显示器上实现中点画圆法的例程及其实现示意图。只需用增量法找到1/8圆上的点,其它点在中心对称位置。 2  激光打印机的控制    激光打印机是目前最常用输出设备之一,和热敏、喷墨打印机相比具有显著的优点,下面介绍用ATMEGA128微控制器直接控制激光打印机打印VGA显示器屏幕内容的方法。要控制打印机必须了解打印机命令语言。打印机语言指的是控制打印机工作的命令,它控制打印机如何组织被打印的文档,打印机按照这些命令来处理

18、打印数据,并最终准确的打印出文字与图像。2.1   PCL打印机命令语言    PCL打印机命令语言是世界上应用最为广泛的标准打印机命令语言,由惠普公司开发,支持文字、点阵图像和矢量图形的打印。PCL命令由2个以上的字符组成,总是以控制字符ESC开始,用符合EC 表示,其ASCII码为27,所以PCL命令又被 图 4 中点画圆法示意图称作ESC序列。当打印机接收到字符EC时,表示开始接收一条控制命令。PCL命令包括“两字符”命令序列和“参数化”命令序列两种ESC序列。     “两字符”命令序列的格式如下:EC X

19、,其中符号X代表ASCII码48126的字符,即ASCII字符表中“0” 和“”之间的字符。符号X指示打印机需要进行的操作,例如命令“EC E”是打印机复位命令,命令“EC g”把纸张的左边距和上边距复位成默认值。“参数化”命令序列格式如下:EC X y z1 # z2 # z3 . # Zndata ,其中EC为起始字符,X是参数化字符,代表ASCII码3347之间字符,其作用是指明该序列是“参数化”序列;y为组字符,代表ASCII码96126之间字符,用来指定待执行的操作属于什么组;#是数值域,其范围从-32767到65535;z i是本命令的参数,代表ASCII码从96126之间字符,该

20、参数用于组合的“参数化”序列,非组合序列则不用,其作用是指定前面的数值域所用的参数;Zn是结束字符,表示“参数化”命令序列结束;data 是传送到打印机的待打印数据,用8个bit表示,即为0255之间任意数据。下面两例分别是非组合的“参数化”命令序列和组合的“参数化”命令序:1       2      1是非组合序列,不含参数。2是组合序列,由序列EC &l1O 和 EC&l2A组合而成,其中小写的字符“o”是该序列的参数4。各种命令序列的详细说明见参考文献4。2.2 打印屏幕

21、    ATMEGA128单片机的IO口和激光打印机的并口由如下信号连接: Strobe、Busy、GND、D0D7共11根信号线。其中D0D7是数据线,单片机通过数据线把控制打印机的PCL命令和待打印数据传送到打印机;Busy信号线指示打印机状态是否繁忙;Strobe 信号线是选通控制线,单片机在Strobe 信号线上输出一个低电平脉冲即可把D0D7上的数据写人打印机。在论文的第一部分曾经提到,VGA显示器所显示的内容存储在SRAM显存中,每一个bit代表一个象素,因此打印屏幕就是把显存中的数据打印出来。ATMEGA128单片机首先发送PCL语言的打印机设置命令

22、,对打印进行设置,然后即可传送打印数据。其步骤如下:1、发打印机复位命令;2、发设置纸张大小命令;3、发设置打印的起始位置命令;4、发设置分辨率命令;5、发设置打印机为点阵图形模式命令;5、传送要打印的数据;6、发结束图形模式命令;7、发换页指令,打印当前页。下面是ATMEGA128单片机对HP LASERJET6L激光打印机发送PCL命令,并控制打印机打印输出VGA屏幕信息的例程:void print()unsigned int M; unsigned char i;   unsigned char xdata *p;p=NVRS;out(27);out('E');/打印机复位out(27); pprint("&l26A");/ 设置纸张为A4out(27); pprint("*p210

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论