基于AVR的VGA显示和激光打印系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于AVR的VGA显示和激光打印系统摘要:用ATMEGA128单片机结合CPLD实现了对VGA显示器和激光打印机的控制,完成了在VGA显示器上实时显示字符和图形的功能,并控制激光打印机实现了屏幕信息的打印输出。本设计克服了单片机系统显示和打印功能薄弱的缺点,为扩大其应用范围奠定了基础,同时也为其他嵌入式系统的信息输出提供了一种解决方案。关键词:VGA控制器;PCL命令语言;激光打印;CPLD随着集成电路制造技术的不断发展,MCU、ARM、DSP等微控制器、微处理器的性能急剧提高,但是输出功能,尤其是显示和打印功能仍然比较薄弱,与PC机相比有较大的差距。输出功能薄弱的缺点,限制了其应用范围的扩大。ATmega128是美国Atmel公司生产RISC结构的高性能MCU芯片,含有ADC、I2C、SPI、PWM等多种资源[1]。本论文以ATMEGA128单片机为例,结合CPLD和高速SRAM,介绍在VGA显示器上显示字符、图形信息和控制激光打印机打印输出屏幕信息的方法。本设计克服了单片机系统信息输出功能薄弱的缺点,为单片机和其他嵌入式系统的信息输出提供了一个解决方案,使得其应用范围更加广阔。系统结构如图1所示。1VGA显示控制器的实现PC机在VGA的显示器(通常包括CRT和液晶显示器)上的信息显示是通过显卡完成的。单片机在VGA显示器上显示信息同样需要类似的模块来辅助,因此我们设计了和显卡功能相似的VGA显示控制器来辅助ATMEGA128单片机在VGA显示器上显示信息。下面介绍640×480分辨率、59.9HZ刷新率的通用VGA显示控制器的设计方法,并说明微控制器、微处理器如何在VGA接口的显示器上显示信息。1.1VGA时序产生模块的设计要实现VGA显示控制器的功能,首先需要了解VGA信号的参数和时序。图2所示为640×480分辨率、59.9HZ刷新率的VGA时序图[2]。根据VGA时序图,本论文研究并实现了VGA显示控制器,所用硬件为Altera公司的EPM7128CPLD和ISSI公司的高速SRAM。EPM7128的作用是通过编程产生VGA显示所需的时序信号,并协助微控制器实现对显存的读写操作。高速SRAM的作用是存储需要显示的数据信息,其读写周期为8ns,满足显示器刷新时对显存进行快速读写的时间要求。设计中用一个bit代表一个象素,640×480分辨率需要37.5K字节的显存。象素时钟频率的选择与VGA监视器的刷新频率和分辨率相关,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所示。图3VGA显示控制器时序仿真图从仿真波形图种可以看到每一显示行的时间为800个象素时钟周期,每场包括525行。行同步脉冲的宽度为96个象素时钟周期,场同步脉冲的宽度为2行。在行同步信号hs的行同步期间及其前肩和后肩,消隐信号blank为低电平,表示消隐期。在场同步信号vs的场同步期间及其前肩和后肩,消隐信号blank同样为低电平,表示消隐期。仿真结果符合VGA标准时序,项目实际应用也证明了此结果的正确性。1.2VGA显示底层函数的编写要在屏幕上显示信息,除VGA显示控制器之外,还需要并在ATMEGA128单片机上设计底层绘图函数并建立字符库。通常编写画线、画圆函数时,确定一个点是否在直线或圆上,需要乘、除法和开方运算,而画线、画圆函数调用最为频繁,因此计算量将大到难以接受的程度,极大降低系统的性能。为了克服上述缺点,在编写底层绘图函数时采用了图形学上的Bresenhamvoidcircle(unsignedintx0,unsignedinty0,unsignedintr,unsignedcharcolor){registerintx,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(d0){d+=deltax;deltax+=2;x++;}else{d+=(deltax+deltay);deltax+=2;deltay+=2;x++;y--;}}}画线算法和中点画圆法[3],通过象素逼近,采用增量计算,使得确定点是否在直线或圆上的复杂运算变为加法运算,非常适合微控制器的特点,极大得提高了绘图速度。我们从Windows系统中提取了12×12和96×96象素的0~9数字字库,16×16象素的常用ASCII字符字库。有了底层绘图函数和字符库,ATMEGA128单片机便可通过VGA显示控制器实现在屏幕任意位置显示图形或者文字信息。右面是用ICCAVR编写的ATMEGA128在VGA显示器上实现中点画圆法的例程及其实现示意图。只需用增量法找到1/8圆上的点,其它点在中心对称位置。2激光打印机的控制激光打印机是目前最常用输出设备之一,和热敏、喷墨打印机相比具有显著的优点,下面介绍用ATMEGA128微控制器直接控制激光打印机打印VGA显示器屏幕内容的方法。要控制打印机必须了解打印机命令语言。打印机语言指的是控制打印机工作的命令,它控制打印机如何组织被打印的文档,打印机按照这些命令来处理打印数据,并最终准确的打印出文字与图像。2.1PCL打印机命令语言PCL打印机命令语言是世界上应用最为广泛的标准打印机命令语言,由惠普公司开发,支持文字、点阵图像和矢量图形的打印。PCL命令由2个以上的字符组成,总是以控制字符ESC开始,用符合EC表示,其ASCII码为27,所以PCL命令又被图4中点画圆法示意图称作ESC序列。当打印机接收到字符EC时,表示开始接收一条控制命令。PCL命令包括“两字符”命令序列和“参数化”命令序列两种ESC序列。“两字符”命令序列的格式如下:ECX,其中符号X代表ASCII码48~126的字符,即ASCII字符表中“0”和“~”之间的字符。符号X指示打印机需要进行的操作,例如命令“ECE”是打印机复位命令,命令“ECg”把纸张的左边距和上边距复位成默认值。“参数化”命令序列格式如下:ECXyz1#z2#z3...#Zn[data],其中EC为起始字符,X是参数化字符,代表ASCII码33~47之间字符,其作用是指明该序列是“参数化”序列;y为组字符,代表ASCII码96~126之间字符,用来指定待执行的操作属于什么组;#是数值域,其范围从-32767到65535;zi是本命令的参数,代表ASCII码从96~126之间字符,该参数用于组合的“参数化”序列,非组合序列则不用,其作用是指定前面的数值域所用的参数;Zn是结束字符,表示“参数化”命令序列结束;[data]是传送到打印机的待打印数据,用8个bit表示,即为0~255之间任意数据。下面两例分别是非组合的“参数化”命令序列和组合的“参数化”命令序:121是非组合序列,不含参数。2是组合序列,由序列EC&l1O和EC&l2A组合而成,其中小写的字符“o”是该序列的参数[4]。各种命令序列的详细说明见参考文献[4]。2.2打印屏幕ATMEGA128单片机的IO口和激光打印机的并口由如下信号连接:Strobe、Busy、GND、D0~D7共11根信号线。其中D0~D7是数据线,单片机通过数据线把控制打印机的PCL命令和待打印数据传送到打印机;Busy信号线指示打印机状态是否繁忙;Strobe信号线是选通控制线,单片机在Strobe信号线上输出一个低电平脉冲即可把D0~D7上的数据写人打印机。在论文的第一部分曾经提到,VGA显示器所显示的内容存储在SRAM显存中,每一个bit代表一个象素,因此打印屏幕就是把显存中的数据打印出来。ATMEGA128单片机首先发送PCL语言的打印机设置命令,对打印进行设置,然后即可传送打印数据。其步骤如下:1、发打印机复位命令;2、发设置纸张大小命令;3、发设置打印的起始位置命令;4、发设置分辨率命令;5、发设置打印机为点阵图形模式命令;5、传送要打印的数据;6、发结束图形模式命令;7、发换页指令,打印当前页。下面是ATMEGA128单片机对HPLASERJET6L激光打印机发送PCL命令,并控制打印机打印输出VGA屏幕信息的例程:voidprint(){unsignedintM;unsignedchari;unsignedcharxdata*p;p=NVRS;out(27);out('E');//打印机复位out(27);pprint(&l26A);//设置纸张为A4out(27);pprint(*p210X);//'设置本页打印的X坐标起始位置out(27);pprint(*p400Y);//'设置本页打印的Y坐标起始位置out(27);pprint(*t100R);//'设置分辨率out(27);pprint(*r1A);//'设置图形模式开始for(M=0;M480;M++)//传送要打印的图形数据{out(27);pprint(*b80W);…………out(27);pprint(*rC);//'图形模式结束out(255);out(12);//'本页结束,执行打印}结论:本文的创新点是用ATMEGA128单片机结合CPLD实现了对VGA显示器和激光打印机的控制,使单片机可以在VGA接口的显示器上显示图形、文字信息,并控制激光打印机把VGA屏幕上的信息打印输出。本设计克服了单片机控制系统的信息显示和打印功能薄弱的缺点,使其在发挥控制功能优势的基础上,还具有了实用的显示和打印功能,为扩大其应用范围奠定了基础。此外,本设计中用到的ATMEGA128的接口为GPIO口和Intel格式的标准总线,因此可以方便得移植到其他类型的芯片中,为其它系统的信息显示和打印提供了参考方案,本设计已经成功移植到了TMS320C6713DSP芯片上[5]。

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功