基于8位单片机C51的嵌入式显示系统设计

发布者:TranquilSmile最新更新时间:2014-02-17 来源: elecfans关键字:8位单片机  C51  显示系统 手机看文章 扫描二维码
随时随地手机看文章

  引言

  嵌入式设备凭借其与使用者之间的亲和力、自然的人机交互界面,得到了迅速的发展,渗透到生活中的各个角落。本文介绍的设计方法是以高性能的8位单片机 C8051F120作为核心处理器,SRAM作为系统的显存,FPGA实现时序转换,构建低温(-10℃)下嵌入式显示系统。通过PC机键盘和触摸屏实现界面操作,最终在液晶显示器上显示国标一/二级汉字、ASCII字符和65 536色的彩色图形和图片,并制作了简单的操作界面。

  1系统工作原理

  显示汉字、英文字符和彩色图形的过程就是将字符和图形信息转换成液晶显示器可以显示的点阵信息。为了显示字符,可以将ASCII码字符点阵字库和按区位码排列的汉字点阵字库存储在单片机外接的Flash ROM中(构成点阵数据区),并且将程序中用到的字符以机内码的形式存储在Flash ROM中(构成文本数据区)。显示时,单片机将汉字机内码从文本数据区读出,转换成Flash ROM中点阵数据区的字库地址,通过该地址读出字符的点阵数据,进一步转换成液晶显示器可显示的数据并送给后续电路处理和显示。这样在操作过程中可以显示包括国标一/二级汉字、大小写英文字符、标点和数字等多种字符。显示彩色图形的时候,由于图片的存储空间要求比较大,系统中没有足够的空间,可以将PC机内bmp格式的彩色图片经过格式转化以后,通过串口送给单片机实时处理并显示。

  液晶显示器工作频率为4.5~6.8 MHz,并且需要复杂的工作时序。考虑到单片机的工作速度和液晶显示器的工作频率,一方面,液晶显示器在工作频率下不断刷新才能工作,需要传送大量的显示数据和控制信息;另一方面,单片机要完成许多处理工作,即使工作在100 MHz,也将成为系统运行速率的瓶颈。为了解决这个问题,再次加入一块SRAM作为显存,加入一块FPGA实现时序转换并控制和刷新液晶显示器。FPGA 分时地读/写SRAM,FPGA在时钟的作用下,一半时间内(时钟信号为高电平时)从SRAM中读出数据,不断刷新液晶显示器;另一半时间内(时钟信号为低电平时),如果单片机有送来要显示的数据时,将此数据写入SRAM中。分时操作的使用,能在不间断地刷新液晶显示器的同时,接收并存储单片机的数据,使两方面的工作互不影响,不仅减轻单片机的工作负担,而且充分发挥了FPGA的性能。

  

  图1系统框图

  选择附有触摸屏的液晶显示器,将触摸屏外接手写识别控制器,就可以增加手写识别功能,可提供友好的人机交互界面。由上述分析可以画出系统框图,如图1所示。

  2系统硬件设计

  在本嵌入式显示系统中,采用了夏普公司型号为LQ0357DH01的液晶显示器,工作温度范围在-10~70℃,最低工作温度相对更低一些。

  显示模块由一个彩色主动点阵式LCD模块和无定形硅TFT构成,因此可称为ADTFT(Advanced TFT)。它由彩色TFTLCD面板、IC驱动、FPC、背光、电阻式触摸屏和背部密封盒组成,但是模块不包括控制电路。显示屏工作频率为4.5~6.8 MHz,分辨率为240×320像素,色彩位深为18位。图形和文本能以262 114种颜色显示在240×320点阵的显示屏上。但是考虑单片机的数据总线宽度为8位,为了简化操作过程,可将色彩深度确定为16位,单片机分两次发送每个像素的颜色数据。这样的简化操作也可以满足显示65 536色彩色图形的要求。

  为了提高整个系统的运行速度,采用型号为C8051F120的高性能8位单片机作为处理器。C8051F120使用Silicon Labs公司的专利CIP51微控制器内核。CIP51与MCS51指令集完全兼容,可以使用标准803x/805x的汇编器和编译器进行软件开发。 C8051F120可稳定工作的最大系统时钟频率为100 MHz,峰值性能达到100 MIPS. Flash采用的是M29W400BB(512K×8位),它是一种可读、可擦除、可重复编程的Flash.FPGA采用Xilinx公司 SpartanII系列产品XC2S100.XC2S100是一款具有10万系统门的FPGA,在逻辑门数上能为系统提供足够的逻辑电路。144引脚封装形式的XC2S100可提供103个I/O端口,为系统器件提供足够的I/O口资源。

  关于SRAM的选择,考虑到液晶显示器的分辨率为240×320像素,每个像素点可显示65 536色(16位),因此显存的大小至少为240×320×2B=150 KB.加入一块512 KB的SRAM CY7C1041BV33作为显存即可。CY7C1041BV33可以工作在字(word)操作模式下,方便显示数据的存取,刷新液晶的过程中可将 SRAM中的每个字与液晶的每个像素对应。

  手写识别采用型号为ePH1200AQ的手写识别微控制器。ePH1200AQ硬件上集成了8位RISC微控制器、触摸屏驱动器、接口UART、4 KB SRAM、32K字编程ROM和512K字数据ROM;软件上则包含手写识别内核、字符集和笔迹收集软件。当微控制器与外部触摸屏相连接的时候,就可以组成手写识别应用产品,比如SMS、移动电话或者手写输入设备。[page]

  3系统软件设计

  系统软件包括单片机和FPGA两个部分。本文主要介绍单片机部分的软件设计。

  

  图2主函数流程

  单片机完成的功能包括循环查询两个串口是否接收到新的数据,当某个串口接收到新的数据时,便采取相应含义的操作。显示字符时,读出Flash ROM中的点阵数据,进行转换和处理后送给FPGA;显示图形时,按照设定的图形轨迹画出点。

  单片机在主程序中循环查询两个串口是否接收到新的数据,当任意一个串口产生中断时,根据串口接收到数据的含义,采取相应的操作。主函数流程如图2所示。

  3.1字符显示原理

  UCDOS软件中的文件HZK16与文件ASC16分别为16×16的国标汉字点阵文件和8×16的ASCII码点阵文件,以二进制格式存储。在文件 HZK16中,按汉字区位码从小到大依次存有国标区位码表中的所有汉字,每个汉字占用32个字节(16×16的汉字点阵),每个区为94个汉字。在文件 ASC16中按ASCII码从小到大依次存有8×16的ASCII码点阵,每个ASCII码占用16个字节。

  在PC机的文本文件中,汉字是以机内码的形式存储的,每个汉字占用两个字节。第一个字节为区码,为了与ASCII码区别,范围从十六进制的0A1H开始(小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位码,范围也是从0A1H开始,对应某区中的第一个位码。这样,将汉字机内码减去0A0A0H就得该汉字的区位码。例如汉字“我”的机内码为十六进制的“CED2”,其中“CE”表示区码,“D2”表示位码。所以“我”的区位码为0CED2H-0A0A0H=2E32H.将区码和位码分别转换为十进制得汉字“我”的区位码为“4650”,即“房”的点阵位于第46区的第50个字的位置,相当于在文件HZK16中的位置为第32×[(46-1)×94+(50-1)]=67136 B以后的32个字节为“我”的显示点阵。

  依次读出每个字节,每读出一个字节,并提取该字节中的每一位,如果某位是“1”,则给该位数据对应的像素点送入两个字节的字体颜色数据,如(0x0000,黑色);如果某位是“0”,则给该位数据对应的像素点送入两个字节的底色数据,如(0xffff,白色)。当发送完32个字节的点阵数据后(总共发送的颜色数据为32B×8dot×2B=512 B)液晶屏上便会显示底色为白色,字体颜色为黑色的汉字。汉字“我”的显示结果如图3所示。

  

  图3汉字“我”的显示结果

  液晶显示器的色彩深度为16位,每个像素可显示65 536色。SRAM工作在字(word)操作模式下,将SRAM中的每个字与液晶显示器的每个像素对应。比如将液晶显示器第一行第一列的点与SRAM的 0x0000地址对应,第一行第二列的点与0x0001地址对应,依次类推。

  3.2通过PC机键盘进行界面操作

  通过PC机键盘进行界面操作时,使用电脑软件将键盘的操作键值通过PC机串口发送给单片机串口0.单片机串口0每中断一次接收到一个字节的数据,接收到的数据可分为3种情况:数值大于0xA0时,说明该字节是某汉字两字节数据中的一个字节;数值为0x20~0x7f时,表示该字节是可打印的ASCII码字符;数值小于0x20时,表示该字节是不可打印的数值,可用这36个数值作为界面操作的控制命令字节。连续接收完两个数值大于0xA0数据时,就可以转换成某个汉字;每接收到一个数值为0x20~0x7f的数据时,就可以转换成某个ASCII码字符;每接收到一个数值小于0x20的数据时,就可以翻译成某个操作命令,进行相应的控制操作。图4为键盘接口操作中断流程。[page]

  

  图4键盘接口操作中断流程

  3.3通过触摸屏进行界面操作

  通过触摸屏进行界面操作时,手写识别微控制器ePH1200AQ将手写的轨迹封包后发送到单片机的串口1.操作过程中的数据主要包括输入汉字时,识别输入的笔画,向单片机发送候选字;画图时,实时发送屏幕触点的坐标;触控时,发送触控点的坐标。ePH1200AQ的通信协议命令格式如表1所列。

  

  表1 ePH1200AQ通信协议命令格式

  表1中的识别型态命令(0x10)的识别型态定义值定义了可以识别的字集,包括汉字一/二级字库、大小写英文字母、数字、符号、预设手势、平假名和片假名。

  ePH1200AQ与单片机串口1通信,发送的是命令封包,需要考虑封包的帧定位,确定封包的包头和包尾。表1中的命令格式中,封包长度最长的命令为“发送候选字阵列”命令(命令代码为0x18),ePH1200AQ发送的候选字个数最多为10个,每个候选字为两个字节的数据,该命令的最大长度为25字节,可创建一个具有25个元素的数组(uart1_RX_buffer[25])作为命令缓存。

  结语

  本文设计了一种以C8051F120作为核心处理器的嵌入式彩色图形显示系统,其突出的优点是实时性强、接口电路简单、可扩展性强。该系统集成度高,携带方便,实用性强,在很多领域都具有应用性,具有一定的研究和应用价值。

关键字:8位单片机  C51  显示系统 引用地址:基于8位单片机C51的嵌入式显示系统设计

上一篇:89S52单片机检测控制温度的监测系统实现
下一篇:基于FPGA和8051单片机IP核的多功能频率计的设计与实现

推荐阅读最新更新时间:2024-03-16 13:35

用PWM控制渐变七彩灯C51程序
一、硬件介绍: (采用5050LED 2W) RGB三色LED控制引脚分别为单片机P1.2 、 P1.1 、 P1.0。LED正极接主电源(24V)正极,负极接驱动3颗三极管的集电极,单片机控制脚分别接3颗NPN三极管,三极管发射极接地,而单片机的供电是来自三端稳压器7805,祥细原理如下: 二、实物图片: 三、软件部分: 1、/*原理: 先亮红灯(保持一会儿)----红绿过度(绿加1、红减1循环240次)------ 绿灯亮起(保持一会儿)----绿兰过度(兰加1、绿减1循环240次) -----兰灯亮起(保持)-----兰白过度(绿加1、红加1循环240次、兰不变) ---白红过度,技术支 持网站 :
[单片机]
用PWM控制渐变七彩灯<font color='red'>C51</font>程序
单片机驱动蜂鸣器C51程序
#include reg51.h #include intrins.h #include absacc.h #define uchar unsigned char #define uint unsigned int sbit k1=P1^4; //按钮1 sbit k2=P1^5; //按钮2 sbit beep=P3^7; //接蜂鸣器 /********************************************************* 本程序出自http://www.51hei.com会员uiesers的辛勤劳动,作用是驱动蜂鸣器发出声音,蜂鸣器接在单片机的p1.5口,由两个按钮控制.p1.4开,p
[单片机]
Proteus C51仿真学习板10——DAC
前面了解ADC了,那么肯定有器件可以还原信号,也就是将数字信号转换为模拟信号DAC(Digital-Analog Converter), 其思想与ADC是完全相反的。 89C51单片机没有内部集成的DAC,因此需要使用DAC转换芯片,常见的有DAC0832、DAC0808等。这里以DAC0832为例,进行说明讲解。 DAC032是一款8位、接口简单、低价格的DAC0832转换器,由倒T型R-2R电阻网络,模拟开关、运算放大器和参考电压Vref构成。虽是早期的ADC芯片,但对于学习也是很有帮助的。 一个8位D/A转换器有8个输入端(其中每个输入端是8位二进制数的一位),有一个模拟输出端。输入可有28=256个不同的二
[单片机]
Proteus <font color='red'>C51</font>仿真学习板10——DAC
单片机解码万能红外遥控器C51程序
使用方法:打开串口调试助手,设置为9600 bps 单片机这边用11.0592MHz的晶振,使用sm0038或者其他型号的红外接收头按下面的电路连接好,其中out直接与单片机的p3.2脚相连.按下遥控器,串口调试助手便会出现解码值. /******************************************************************/ /* 本程序的蓝本从网上搜集,经修改并注释,万能遥控器解码成功 */ /* 晶振:11.0592MHz */ /* 整理与测试:单片机教程网 http://www.51hei.com 胡琴 2012.5.15
[单片机]
单片机解码万能红外遥控器<font color='red'>C51</font>程序
单片机IO口模拟rs232串口通讯C51程序
此程序已经应用在本人的一个项目中非常稳定,编写过程中参考了51hei网站里面的 http://www.51hei.com/mcu/1541.html 这篇文章.部分子程序节选于此. #include reg52.h #include intrins.h #include math.h #include stdio.h sbit BT_SND =P1^5; sbit BT_REC =P1^6; sbit LED =P1^7; bit LED_flage=1; //单片机IO 口模拟232串口通讯程序 //使用两种方式的C程序 占用定时器0 #define MODE_QUICK #define F_TM F0 #defi
[单片机]
Keil C51使用教程---例子:Hello.c(六)
Hello位于\C51\excmples\Hello\目录,其功能是向串口输出“Hello,world”整个程序如下: #pragma DB OE CD #indule #include void main(void) { SCOn=0x50; TMOD=0x20 TH1=0xf3; Tri=1; TI=1; printf(“Hello,world \n”); while(1) { } } 第一节 uVision for Windows的使用步骤 (1) file_new新建一个hello.c文件,输入如上内容或直接用目录下源文件。 (2)
[单片机]
跑马灯实验用汇编语言和C51语言做出的不同效果
当前开发单片机应用系统程序主要应用汇编语言和C51语言,采用汇编语言编写可直接操纵系统的硬件资源,能编写出高效运行的程序代码,程序运行速度快。而采用C51语言编写可改善程序的可读性和可移植性,利于产品的更新换代,大大加快了单片机应用程序的开发速度。下面通过一个简单的实验--跑马灯实验来分析一下这两种语言的差别。用AT89C5l实现的跑马灯实验的原理图如xia 图所示。 跑马灯实验的原理图用汇编语言编写程序来实现,程序如下: ORG 0 000H LJP START//转入主程序 ORG 0040H START:MOV SP,#60H//设置 堆栈指针 OV A,# 0 F EH / /送A 11111110 ROTATE =
[单片机]
跑马灯实验用汇编语言和<font color='red'>C51</font>语言做出的不同效果
小白自学c51笔记之数码管1——D74HC245和D74HC138
小白自学c51之数码管1——D74HC245和D74HC138芯片 问:遇到不知道的芯片该怎么做? 答:查芯片数据手册,重点看芯片作用,宽电压工作范围,管脚说明,真值表。 宽电压:电器对电压的高适应性。在一定范围内不同等级的电压都能适应。 D74HC245: 作用:增加驱动。(电流不够拿它来凑) 特性之一:双向三态输出,即0(低电压),1(高电压),高阻态三态。 高阻态指的是电路的一种输出状态,既不是高电平也不是低电平,分析时可看作开路。 在我的单片机开发板原理图中: DIR为1时如上上张图,即原理图,电流从左向右;DIR为0时,电流从右流向左。详情见下面真值表。 D74HC138: 三通道输入,八通道输出。 数
[单片机]
小白自学<font color='red'>c51</font>笔记之数码管1——D74HC245和D74HC138
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved