|
||||||
| | 首页 | 文章中心 | 下载中心 | 本站商品 | 学习资料 | | ||||||
| 广告载入中... | ||||||
| 您现在的位置: 电子爱好者 >> 文章中心 >> 实用电路 >> 正文 |
|
|||||
| 基于AVR的VGA显示和激光打印系统 | |||||
| 作者:时永乐 王培勇 文章来源:微计算机信息 点击数: 更新时间:2007-4-5 | |||||
| 摘要:用ATMEGA128单片机结合CPLD实现了对VGA显示器和激光打印机的控制,完成了在VGA显示器上实时显示字符和图形的功能,并控制激光打印机实现了屏幕信息的打印输出。本设计克服了单片机系统显示和打印功能薄弱的缺点,为扩大其应用范围奠定了基础,同时也为其他嵌入式系统的信息输出提供了一种解决方案。 随着集成电路制造技术的不断发展,MCU、ARM、DSP等微控制器、微处理器的性能急剧提高,但是输出功能,尤其是显示和打印功能仍然比较薄 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字节的显存。象素时钟频率的选择与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所示。
图 3 VGA显示控制器时序仿真图
1.2 VGA显示底层函数的编写 要在屏幕上显示信息,除VGA显示控制器之外,还需要并在ATMEGA128单片机上设计底层绘图函数并建立字符库。通常编写画线、画圆函数时,确定一个点是否在直线或圆上,需要乘、除法和开方运算,而画线、画圆函数调用最为频繁,因此计算量将大到难以接受的程度,极大降低系统的性能。为了克服上述缺点,在编写底层绘图函数时采用了图形学上的Bresenham
2 激光打印机是目前最常用输出设备之一,和热敏、喷墨打印机相比具有显著的优点,下面介绍用ATMEGA128微控制器直接控制激光打印机打印VGA显示器屏幕内容的方法。要控制打印机必须了解打印机命令语言。打印机语言指的是控制打印机工作的命令,它控制打印机如何组织被打印的文档,打印机按照这些命令来处理打印数据,并最终准确的打印出文字与图像。 2.1 PCL打印机命令语言 PCL打印机命令语言是世界上应用最为广泛的标准打印机命令语言,由惠普公司开发,支持文字、点阵图像和矢量图形的打印。PCL命令由2个以上的字符组成,总是以控制字符ESC开始,用符合EC 表示,其ASCII码为27,所以PCL命令又被
“两字符”命令序列的格式如下:EC X,其中符号X代表ASCII码48~126的字符,即ASCII字符表中“0” 和“~”之间的字符。符号X指示打印机需要进行的操作,例如命令“EC E”是打印机复位命令,命令“EC g”把纸张的左边距和上边距复位成默认值。“参数化”命令序列格式如下:EC X y z1 # z2 # z3 ... # Zn[data] ,其中EC为起始字符,X是参数化字符,代表ASCII码33~47之间字符,其作用是指明该序列是“参数化”序列;y为组字符,代表ASCII码96~126之间字符,用来指定待执行的操作属于什么组;#是数值域,其范围从-32767到65535;z i是本命令的参数,代表ASCII码从96~126之间字符,该参数用于组合的“参数化”序列,非组合序列则不用,其作用是指定前面的数值域所用的参数;Zn是结束字符,表示“参数化”命令序列结束;[data] 是传送到打印机的待打印数据,用8个bit表示,即为0~255之间任意数据。下面两例分别是非组合的“参数化”命令序列和组合的“参数化”命令序: 1 1是非组合序列,不含参数。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单片机对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");// 设置纸张为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"); ………… out(27); pprint("*rC"); // '图形模式结束 out(255); out(12);//'本页结束,执行打印 } 结论: 本文的创新点是用ATMEGA128单片机结合CPLD实现了对VGA显示器和激光打印机的控制,使单片机可以在VGA接口的显示器上显示图形、文字信息,并控制激光打印机把VGA屏幕上的信息打印输出。本设计克服了单片机控制系统的信息显示和打印功能薄弱的缺点,使其在发挥控制功能优势的基础上,还具有了实用的显示和打印功能,为扩大其应用范围奠定了基础。此外,本设计中用到的ATMEGA128的接口为GPIO口和Intel格式的标准总线,因此可以方便得移植到其他类型的芯片中,为其它系统的信息显示和打印提供了参考方案,本设计已经成功移植到了TMS320C6713 DSP芯片上[5]。 参考文献 |
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| |
| | 设为首页 | 站点地图|<产品开发服务|光盘刻录服务| 广告合作 | 访问记录 |汇款方法 | 关于VIP会员 | | |
![]() |
|