LCD动态图片显示
- 格式:doc
- 大小:417.00 KB
- 文档页数:14
动态显示(dynamic display)One, about LCD1602:Before writing the LCD1602 program, understand some of the very important information in the manual. If the information is not clear enough, the program may experience more or less problems.1. pin:1602 a total of 16 pins, but the main pin programming used only three, respectively: RS (data terminal, R/W (selected) to read and write E (select end), enable signal); programming focuses on the three pin expansion initialization, write command, write data.The following three specific description of the pin:RS is the register selection, the high level selects the data register, and the low level selects the instruction register.R/W read and write select, high level read operation, low-level write operation.The E terminal is the enable terminal, and the latter is connected with the timing.In addition, the D0~D7 are 8 bit bidirectional data lines.2. operation sequence:Read and write timing: 1602 in the timing diagram. Timingdiagrams are important. Programming is setting up registers according to the sequence diagram to allow the LCD to work.Two write timing:When we want to write the instruction word and set the working mode of LCD1602: we need to set the RS to low level, RW to low level, then send the data to the data port D0~D7, and finally a high pulse of E pin writes the data.When we want to write data words, on the 1602 to achieve the display: RS needs to be set to high, RW to low, and then send data to the data port D0~D7, and finally the E pin, a high pulse to write data.The difference between writing instructions and writing data is simply that the level of the RS is different. The following is the timing diagram of the LCD1602:RS R/W operation instructions00 write instruction code D0~D701 read and output the D0~D7 status word10 write data D0~D711 read data from D0~D7Note: about E=H pulse - at the start, initialize E to 0, and then set E to 1, and then clear 0.When you read the status word, note that the D7 bit, D7=1, prohibits read-write operations; D7=0 allows read and write operations;Therefore, the read and write test must be carried out before each read and write operation of the controller. (after the read busy subroutine), before executing each instruction, make sure that the busy sign of the module is low, indicating that it is not busy, otherwise the command is invalid.Do{P0=0xff;RS=0;RW=1;EN=1;}while (P0&0x80);3. instruction set: LCD_1602 initialization instructions:0x38 settings, 16*2 display, 5*7 dot matrix, 8 bit data interface0x01 screen, the cursor is reset to the address location 00H0x0F displays, displays the cursor, and blinks the cursor0x08 only displays0x0e displays, displays the cursor, and the cursor does notblink0x0c open display without cursor display0x06 address plus 1, when the data is written, the cursor moves rightThe 0x02 address counter AC=0; (at this time the address is 0x80) the cursor goes to the origin, but the DDRAM interrupt remains unchangedThe 0x18 cursor moves left together with the displayTwo 、 LCD1602 programming flow:The LCD1602 can be written after the above information is understood. Here we divide the program into the following steps:1. defines the LCD1602 pins, including RS, R/W, and E. Here the definition refers to these pins are connected to the microcontroller which I/O port.Examples are as follows:Sbit EN=P2^2;Sbit RW=P2^1;Sbit RS=P2^0;2. display initialization, in this step to initialize and set the display mode and other operations, including the following steps:Set display modedelayedClear display cacheSet display modeThe recommended initialization process is as follows:Delayed 15msWrite instruction 38HDelayed 5msWrite instruction 38HDelayed 5msWrite instruction 38HDelayed 5msNote: the 38H instruction described above can be omitted. 1~2 steps are omittedWrite instruction 38HWrite instruction 08H to close the displayWrite instructions for 01H display screenWrite instruction 06H cursor movement settingsWrite instruction 0cH displays open and cursor settings3. sets the display address (where the characters are displayed).4. write data to display characters.Three, LCD1602 subroutine modules and the main program written:According to the flow of the program written above, an example of each subroutine module and the main program is given.1. header files, macro definitions, definitions, pins, etc.:#include<reg52.h>#include <string.h>#define uchar unsigned char#define uint unsigned intSbit EN=P2^2;Sbit RW=P2^1;Sbit RS=P2^0;2.LCD1602 basic initialization subroutine:Void, LCD1602 (){EN=0;RS=1;RW=1;P0=0xff; / / where P0 is connected with LCD D0~D7 I/O }3. read busy subroutine:Void, read_busy (){P0=0xff;RS=0;EN=1;While (P0&0x80); //P0 and 10000000 phases and D7 bits, if not 0, stop hereEN=0;/ / if 0 jump into the next step; this statement is the role of detection of D7If the busy wait} / / read out, not busy busy reading and writing instruction execution subroutine4. write instructions and write data subroutines:Void lcd_write (uchar, I, bit, J){Read_busy ();P0=i; / / i=0, i=1, and write data write instructions;RS=j;RW=0;EN=1;}5. time delay subroutine:Void delayms (uint C) / / other functions are to provide initialization subroutine delay in 1xc MS{Uint, a, b;For (a=0; a<c; a++)For (b=0; b<120; b++);}6.LCD1602 initialization subroutine:Void (init) / / fully in accordance with the requirements of the initialization process, omitted a step write command 38H{Delay (15);Write (0x38,0);Delay (5);Write (0x38,0);Write (0x08,0);Write (0x01,0);Write (0x06,0);Write (0x0c, 0);}7. main program:In addition to the main program in the initialization procedure is written by themselves according to the display subroutine, you need not write function can display subroutine of various types, not detail here, as the following example shows a character string display and display subroutine.Void, main (){LCD1602 ();Init ();Lcd_write (0xc1,0); / / display a characterLcd_write (0x41,1); / / display a characterWhile (1);}Task 1: the program that displays the letter "A" at the first character of the second line of the LCD module:Task 2: dynamic display of a string of characters#include "reg51.h""#include "Intrins.h""#include "string.h""#define uchar unsigned charSbit rs = P2^0; / / determine the connection of hardwareSbit RW = P2^1;Sbit e = P2^2;Void, LCD_write ();Void, busy_wait ();Void delayms (uchar MS);"Uchar str[] = {" abc//defghijklm "}; Void, main (){Uchar i=0;P0 = 0x01;LCD_write ();P0 = 0x38;LCD_write ();P0 = 0x0f;LCD_write ();P0 = 0x06;LCD_write ();Do{For (I = 0; i<strlen (STR); i++) {P0 = 0xc0+i;LCD_write ();P0 = str[i];Rs = 1;RW = 0;E = 0;Busy_wait ();E = 1;Delayms (200); / / delayP0 = 0x01; / / screenLCD_write ();}}while (1);Return;}Write control command function * / / * Void, LCD_write () {Rs = 0;RW = 0;E = 0;Busy_wait ();E = 1;Return;}To determine whether the LCD / * * / busy subroutine Void, busy_wait () {Do{P0 = 0xff;Rs = 0;RW = 1;E = 0;_nop_ ();E = 1;} while ((P0&0x80) = = 0);/ / E = 0;Return;}Void Delayms (uchar MS){Uchar i;While (ms--) for (i=0; i<120; i++);}Task 3 (omitted): display two lines of characters on the LCD, the first behavior is "", second "GO:0", and the value in the second line will be added./ * LCD1602.h*/ header file#ifndef LCD_CHAR_1602_2011_4_9#define LCD_CHAR_1602_2011_4_9#include "REG51.H""#include <intrins.h>*********************************************************//PortDefinitionsSbit LcdRs = P2^0;Sbit LcdRw = P2^1;Sbit LcdEn = P2^2;SFR DBPort = 0x80; //P0=0x80, P1=0x90, P2=0xA0, P3=0xB0. data ports*********************************************************** ****Internal / / wait functionUnsigned char LCD_Wait (void){LcdRs=0;LcdRw=1;_nop_ ();LcdEn=1;_nop_ ();而(dbport & 0x80);lcden = 0;返回dbport;}*********************************************************** */ /向液晶写入命令或数据#定义lcd_command 0 / /命令#定义lcd_data 1 / /数据#定义lcd_clear_screen 0x01 /清屏#定义lcd_homing 0x02 /光标返回原点无效lcd_write(点式、无符号字符输入){lcden = 0;lcdrs =风格;lcdrw = 0;_nop_();dbport =输入;_nop_();/ /注意顺序lcden = 1;//注意顺序_nop_();lcden = 0;_nop_();lcd_wait();}*********************************************************** */ /设置显示模式#定义lcd_show寄存器/显示开#定义lcd_hide 0x00 /显示关#定义lcd_cursor 0x02 /显示光标#定义lcd_no_cursor 0x00 /无光标#定义lcd_flash 0x01 /光标闪动#定义lcd_no_flash 0x00 /光标不闪动无效lcd_setdisplay(无符号字符显示模式){lcd_write(lcd_command,0x08 |显示模式);}*********************************************************** */ /设置输入模式#定义lcd_ac_up 0x02#定义lcd_ac_down 0x00 /默认#定义lcd_move 0x01 /画面可平移#定义lcd_no_move 0x00 /默认无效lcd_setinput(unsigned char InputMode){lcd_write(lcd_command,0x04 | InputMode);}*****************************************************/ /初始化液晶无效lcd_initial(){lcden = 0;lcd_write(lcd_command,0X38);/ / 8位数据端口,2行显示,5×7点阵lcd_write(lcd_command,0X38);lcd_setdisplay(lcd_show | lcd_no_cursor);/ /开启显示,无光标lcd_write(lcd_command,lcd_clear_screen);/ /清屏lcd_setinput(lcd_ac_up | lcd_no_move);/ /交流递增,画面不动}/ / ******************************************************无效gotoxy(unsigned char unsigned char X,Y){如果(y=0)lcd_write(lcd_command,0x80 | X);如果(y=1)lcd_write(lcd_command,0x80 |(x-0x40));}空白打印(无符号字符){当(*)!=“0”){lcd_write(lcd_data,* STR);STR;}}/ /********************************************************* # endif/ * * / C源文件LCD1602。
目录第1章本设计的研究背景及目的要求 (1)1.1 单片机的介绍 (1)1.2 单片机液晶显示系统设计课题背景 (1)1.3开发单片机液晶显示系统的意义 (2)第2章设计的基本原理和方案 (3)2.1 AT89C52单片机介绍 (3)2.2 液晶显示原理 (4)2.3 设计方案 (5)第3章程序设计 (6)3.1单片机与LCD接口电路 (6)3.2 主程序流程图 (7)第4章调试结果及分析 (8)4.1系统调试 (8)4.2分析与体会 (9)参考文献 (10)附录 (11)第1章本设计的研究背景及目的要求1.1 单片机的介绍自单片机出现至今,单片机技术已走过了近20年的发展路程。
纵观20年来单片机发展里程可以看出,单片机技术的发展以微处理器(MPU,Microprocessor Unit)技术及超大规模集成电路技术的发展为先导,以广泛的应用领域拉动,表现出比微处理器更具个性的发展趋势。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
作为嵌入式系统控制核心的单片机具有其体积小、功能全、性价比高等诸多优点。
51 系列单片机是国内目前应用最广泛的单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51 系列单片机的发展又进入了一个新的阶段。
在今后很长一段时间内51 系列单片机仍将占据嵌入式系统产品的中低端市场。
一般说来,单片机开发的产品可以稳定可靠地工作10年、20年;另外,与微处理器相比,单片机的长寿命表现在它不会像386、486、586等MPU一样,随着半导体技术的飞速发展,更新换代的速度越来越快,很短的时间内就被淘汰出局。
传统的单片机如68HC05、8051等年龄已有十几年的历史,但产量仍是上升的,这是因为它们在其对相应应用领域的适应性强,并且与之兼容的I/O功能模块的扩展接口技术也层出不穷。
长期以来,单片机技术的发展是以8位机为主的。
在lcd上显⽰bmp图像【转载】要实现在lcd上实时显⽰usb摄像头采集的图像,前⾯已经能够采集到图像了,并保存为jpg⽂件,现在要在lcd上显⽰这个图⽚,有⼏种⽅法:⼀种是移植好minigui,然后使⽤minigui提供的函数FillBoxWithBitmap显⽰图像;⼀种是直接将图像数据写⼊framebuffer中,不管使⽤哪种前提是要把jpg⽂件解压得到RGB24数据流。
最后决定使⽤framebuffer,这样可以了解⼀些底层的东西。
这⾥先介绍如何在framebuffer上绘图,⾸先有两个结构体struct fb_fix_screeninfo 和struct fb_var_screeninfo,应⽤程序通过这两个结构体可以获取framebuffer设备相关参数。
定义两个变量struct fb_fix_screeninfo finfo;struct fb_var_screeninfo vinfo;int fb = open("/dev/fb0", O_RDWR);ioctl ( fb, FBIOGET_FSCREENINFO, &finfo)//获取与Framebuffer有关的固定的信息ioctl( fb, FBIOGET_VSCREENINFO, &vinfo)//获取与Framebuffer有关的可变信息应⽤程序中通常要⽤到struct fb_var_screeninfo的下⾯这⼏个字段:xres、yres、bits_per_pixel,分别表⽰x轴的分辨率、y轴的分辨率以及每像素的颜⾊深度(每个像素占⽤的⽐特数)。
与Framebuffer设备有关的IO通常都是通过mmap()系统调⽤来完成的。
系统调⽤mmap()⽤来实现内存映射IO。
所谓内存映射IO,是指将⼀个磁盘⽂件的内容与内存中的⼀个空间相映射。
当从这个映射内存空间中取数据时,就相当于从⽂件中读取相应的字节,⽽当向此映射内存空间写⼊数据时,就相当于向磁盘⽂件中写⼊数据。
动态显示的原理
动态显示(Dynamic Display)是指将图像或视频通过连续更新来创建动画或视频效果的技术。
其原理主要基于以下几个方面:
1. 快速更新:动态显示技术要求显示设备能够以足够快的速度更新图像或视频。
通常采用的是液晶显示、LED显示或电子墨水显示等技术,这些技术能够在短时间内刷新显示内容。
2. 帧率控制:动态显示需要按照一定的帧率(Frame Rate)来更新显示内容。
帧率指的是每秒显示的帧数,常见的帧率有25、30、60帧等。
较高的帧率能够呈现更加流畅的画面,但也需要更高的计算和显示能力。
3. 双缓冲技术:为了消除显示更新时的闪烁或撕裂现象,动态显示通常采用双缓冲技术。
它指的是在显示内容更新之前,先将新的图像或视频帧缓存到一个缓冲区中,然后再将其直接刷新到屏幕上,从而实现平滑的过渡。
4. 数据传输和处理:为了实现动态显示,图像或视频的数据需要通过传输线路传输到显示设备,并经过处理才能呈现在屏幕上。
传输线路可以是电缆、无线信号或互联网等,而处理可以包括解码、图像处理、色彩校准等过程。
综上所述,动态显示的原理主要包括快速更新、帧率控制、双缓冲技术和数据传输与处理。
通过这些原理的组合使用,可以实现连续的图像或视频显示效果。
第13章GIF图片显示本期主要讲emWin支持的GIF图片的显示,官方支持的主要有两种显示方法,一种是从外部存储器读取数据到内部存储器,然后来显示图片,这种的显示速度要快些,另一种方法是直接从外部存储器读取数据并显示,这种办法的好处就是不要大的RAM需求,每次读取一些数据显示一次,坏处就是显示速度比较的慢。
这里将2MB的外部SRAM做为emWin的动态内存。
13. 1 GIF图片支持13. 2 绘制已经加载到存储器的GIF图片13. 3 绘制无须加载到存储器的GIF图片13. 4 实验总结13.1G I F图片支持20世纪80年代,CompuServe Information Service开发出了GIF文件格式(图形交换格式)。
它设计用于跨数据网络传输图像。
GIF标准支持隔行扫描、透明、应用定义数据、动画以及原始文本渲染。
emWin将忽略原始文本或应用特定数据等不受支持的数据。
GIF文件使用LZW (Lempel-Zif-Welch)文件压缩方法来压缩图像数据。
这种压缩方法运行起来不会丢失数据。
输出图像与输入图像完全相同。
图形库首先对图形信息进行解码。
如果必须绘制图像,解码流程将花费相当长的时间。
如果在窗口管 理器经常调用的callback例程中使用GIF文件,则解码流程可能花费相当长的时间。
通过使用存储设备可缩短计算时间。
最好的方法是先将图像绘制到存储设备中。
在这种情况下,将只进行一次解压缩。
emWin的GIF解压缩例程大约需要16千字节动态分配的RAM进行解压缩。
绘制图像后,将释放用于解压缩的RAM。
13.1.1GIF格式图标转换某些情况下,将GIF文件作为C文件添加到项目中非常有用。
对此,可完全按照前面介绍的“JPEG 文件支持”下的相同方式来执行。
下面举一个例子方便大家理解。
比如我们要转换下面的GIF图片●打开软件加载上面的图片●加载后点击Convert即可,点击后没有任何现象,直接去图片所在的文件夹找即可实际运行代码如下(图片数据就不贴出来了,看本期教程配套的例子)GUI_GIF_INFO InfoGif1;GUI_GIF_IMAGE_INFO InfoGif2;void MainTask(void){int i = 0;GUI_Init();GUI_GIF_GetInfo(_ac4, sizeof(_ac4), &InfoGif1); (1)while(1){if(i < InfoGif1.NumImages){GUI_GIF_GetImageInfo(_ac4, sizeof(_ac4), &InfoGif2, i);(2)GUI_GIF_DrawSub(_ac4, (3)sizeof(_ac4),(LCD_GetXSize() - InfoGif1.xSize)/2,(LCD_GetYSize() - InfoGif1.ySize)/2,i++);/* 这个函数要注意,主要是设置每个GIF子图像的时间间隔的。
lcd动态显示原理LCD动态显示原理LCD(液晶显示器)是一种常见的平面显示设备,它的原理是通过液晶分子的定向排列来控制光的传播和阻挡,从而实现图像和文字的显示。
在LCD动态显示中,液晶分子的定向排列可以通过外界电场的作用来改变,从而使显示内容发生变化。
一、液晶分子的结构和性质液晶分子是一种特殊的化合物,具有有机分子的特性。
它们通常由长而扁平的分子构成,分子内部有一定的自由度,可以在一定程度上改变分子的排列方式。
液晶分子的排列方式可以分为各向同性和各向异性两种。
在各向同性的状态下,液晶分子的排列是无序的,光无法通过液晶层,显示器呈现黑色。
而在各向异性的状态下,液晶分子的排列是有序的,光可以通过液晶层,显示器呈现亮色。
二、液晶显示器的结构液晶显示器通常由液晶层、偏振片、玻璃基板和电极等组成。
液晶层是液晶显示器的核心部件,它由两片平行的玻璃基板组成,中间夹有液晶材料。
玻璃基板上分布有导电电极,通过外界电场的作用,可以改变液晶分子的排列方式。
偏振片是液晶显示器的重要组成部分,它可以将光的振动方向进行过滤和调整。
液晶显示器通常使用两个偏振片,一个位于液晶层的上方,另一个位于液晶层的下方。
这两个偏振片的振动方向一般垂直于彼此,通过调整它们之间的相对方向,可以控制光的透过或阻挡。
三、液晶分子的定向排列液晶分子的定向排列是通过外界电场的作用来实现的。
当外界电场施加在液晶层上时,液晶分子会受到电场力的作用,发生定向排列的变化。
具体来说,当电场施加在液晶层上时,液晶分子会沿着电场方向发生定向排列,使得液晶层变得各向异性。
液晶分子的定向排列可以通过控制外界电场的强度和方向来实现。
当外界电场的强度足够大时,液晶分子会完全沿着电场方向定向排列,光可以通过液晶层,显示器呈现亮色。
当外界电场的强度减小或者改变方向时,液晶分子的定向排列会发生变化,光无法通过液晶层,显示器呈现黑色。
四、液晶显示的原理液晶显示的原理是基于液晶分子的定向排列和光的传播特性。
学习笔记:LCD12864的屏幕卷动显示首先,先来介绍下与卷动显示相关的存储器:DDRAM(Data Display Ram)。
DDRAM(Data Display Ram):数据显示RAM,往里面写啥,屏幕就会显示啥,与GDRAM不同的是,这里存储的是字符的编码。
也就是显示字符用的RAM。
字符的显示是先到CGROM (存储了中文字库)或HCGROM(存储了ASCII码)找到对应编码的字模,再显示到屏幕上。
笔者使用的这块12864内部有4行×32字节的DDRAM空间。
但是任一时刻,屏幕只能显示2行×32字节的空间,那么剩余的这些空间呢?它们可以用于缓存,在实现卷屏显示时这些空间就派上用场了。
DDRAM结构如下所示:80H、81H、82H、83H、84H、85H、86H、87H、88H、89H、8AH、8BH、8CH、8DH、8EH、8FH 90H、91H、92H、93H、94H、95H、96H、97H、98H、99H、9AH、9BH、9CH、9DH、9EH、9FH A0H、A1H、A2H、A3H、A4H、A5H、A6H、A7H、A8H、A9H、AAH、ABH、ACH、ADH、AEH、AFH B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H、B8H、B9H、BAH、BBH、BCH、BDH、BEH、BFH 地址与屏幕显示对应关系如下:第一行:80H、81H、82H、83H、84H、85H、86H、87H第二行:90H、91H、92H、93H、94H、95H、96H、97H第三行:88H、89H、8AH、8BH、8CH、8DH、8EH、8FH第四行:98H、99H、9AH、9BH、9CH、9DH、9EH、9FH说明:红色部分的数据归上半屏显示,黑色部分的数据归下半屏显示。
一般屏幕的显示用的是上面两行的空间,也就是80H~8FH,90H~9FH,也就是说屏幕显示的内容是存储在80H~8FH,90H~9FH。
目录第1章概述 (2)1.1本课题研究的背景及意义 (2)1.2本课题研究主要内容 (2)第2章硬件设计 (4)2.1 各部分元件介绍 (4)2.2 硬件原理图 (4)2.3 硬件连接 (6)2.4 本章小结 (6)第3章软件设计 (7)3.1程序的设计流程 (7)3.2 DM Tool字模提取工具 (7)3.3 SPLC501液晶显示模组函数及显示位置移动 (8)3.4 SPLC501液晶显示模组显示图片 (9)3.5 本章小结 (10)第4章结论与体会 (11)参考文献 (12)附录 (13)第1章概述1.1本课题研究的背景及意义本课题设计的LCD图片显示主要指的是单片机以及单片机驱动的点阵式液晶显示屏所组成的一个显示系统。
LCD与阴极射线管、LED或等离子显示器相比是一种低功耗的平面显示器件。
在在车内广告、智能广告、可视电话、仪表盘、空调、洗衣机和其他低功耗电子厂品中得到了广泛应用。
液晶的物理特性是:当通电时导通,排列变的有秩序,使光线容易通过;不通电时排列混乱,组织光线通过。
让液晶如闸门般的阻隔或让光线穿透。
从技术上简单地说,液晶面板包含了两篇相当精致的无钠玻璃素材,中间夹着一层液晶。
当光束通过这层液晶时,液晶本身会排排站立或扭转呈不规则状,因而组个或是光束顺利通过。
大多数液晶都属于有机复合物,有长棒状的分子构成。
在自然状态下,这些棒状分子的长轴大致平行。
将液晶倒入一个经精良加工的开槽平面,液晶分子会顺着槽排列,所以假如那些槽非常平常,则各分子也是完全平行。
液晶显示器的显像原理,是将液晶置于两片导电玻璃之间,靠两个电极间电场的驱动,引起液晶分子扭曲向列的电场效应,以控制光源透射或遮蔽功能,在电源开关之间产生明暗而将影像显示出来,若加上彩色滤光片,则可显示彩色影像。
,在两片玻璃基板上装有配向膜,所以液晶会沿者沟槽配向,由于玻璃基板配向膜沟槽偏离90度,所以液晶分子成为扭转型,挡玻璃基板没有夹加入射电场时,光线透过偏光板跟着液晶做90度扭转,通过下方偏光板,液晶面板显示面板显示白色;挡玻璃基板加入电场时,液晶分子产生配列变化,光线通过液晶分子空隙维持原方向,被下方偏光板遮蔽,光线被吸收无法透出,液晶面板显示黑色。
液晶显示器便是根据压电有无,使面板达到显示效果。
一直以来,追求更完美的视觉享受都是我们桌面显示设备的目标,回顾近年的显示技术发展历程,我们不难发现它都是围绕着同样一个主题-“追求更佳的人类肉眼视觉舒适性”!09年LED背光的液晶产品得到了消费者强烈的关注。
在外观上还是功耗上,它比传统的CCFL背光都有不小的优势,相信随着技术的越来越成熟,LED背光的液晶产品必然会在市场上取得很大的成功,市场的潜力也非常巨大的,而且对于大多数人来说外观还是选择显示器的首要因素,超薄时尚节能也是未来的主流。
1.2本课题研究主要内容通过利用DM Tool字模提取工具提取图片字模,使用SPCE061A核心及周边电路模块和LCD显示模组模块,来实现液晶显示器动态图片,从而让我们看到图片的动态变化,提高视觉效果。
利用C语言编写主程序和中断服务程序,调用驱动程序。
在液晶显示器上动态显示已经提供的图片,这里显示凌阳科技的标识(sunplus的所有9张图片)。
从第一张图象依次显示到第九张图象之后,再从第九张图象依次显示第一张图象,每张图象显示刷新时间为0.2s,也就是说图像显示的顺序是:图1-1 图像顺序0.2s的刷新时间要求利用IRQ4_1KHz中断实现。
把每一个图象显示称为一帧图象显示,则根据实验要求,在显示一个完整的凌阳标识的旋转时需要显示18帧图象,则表示图像帧的顺序是:图1-2 图像帧的顺序第2章硬件设计2.1 各部分元件介绍SPCE061A是继μ’nSP™(Microcontroller and Signal Processor)系列产品SPCE500A等之后凌阳科技推出的又一款16位结构的微控制器。
与SPCE500A不同的是,在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,SPCE061A里只内嵌32K字的闪存(FLASH)。
较高的处理速度使μ’nSP™能够非常容易地、快速地处理复杂的数字信号。
因此,与SPCE500A相比,以μ’nSP™为核心的SPCE061A微控制器是适用于数字语音识别应用领域产品的一种最经济的选择。
SPCE061A的开发是通过在线调试器PROBE实现的。
它既是一个编程器(即程序烧写器),又是一个实时在线调试器。
用它可以替代在单片机应用项目的开发过程中常用的软件工具——硬件在线实时仿真器和程序烧写器。
它利用了SPCE061A片内置的在线仿真电路ICE(In- Circuit Emulator)接口和凌阳公司的在线串行编程技术。
PROBE工作于凌阳IDE集成开发环境软件包下,其5芯的仿真头直接连接到目标电路板上SPCE061A相应管脚,直接在目标电路板上的CPU---SPCE061A调试、运行用户编制的程序。
PROBE的另一头是标准25针打印机接口,直接连接到计算机打印口与上位机通讯,在计算机IDE集成开发环境软件包下,完成在线调试功能LCD模组,是指将玻璃和LCD驱动器集成到一起的LCD显示产品。
lcd模块能提供用户一个标准的LCD显示驱动接口(有4位、8位、VGA等不同类型),用户按照接口要求进行操作来控制LCD正确显示。
液晶显示器,或称LCD(Liquid Crystal Display),为平面超薄的显示设备,它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。
液晶显示器功耗很低,因此倍受工程师青睐,适用于使用电池的电子设备。
它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。
2.2 硬件原理图从图中可以看出SPCE061A的结构比较简单,在芯片内部集成了ICE仿真电路接口、FLASH程序存储器、SRAM数据存储器、通用I/O端口、定时器计数器、中断控制、CPU时钟、模/数转换器A/D、数/模转换器DAC输出、通用异步串行输入输出接口、和低电压监测低电压复位等若干部分。
其中各部分之间存在着直接或间接的联系。
SPCE061A共提供两个16位通用的并行I/O口,IOA0-IOA15,IOB0-IOB15。
这两个口的每一位都可以通过编程单独定义为输入或输出口,其中A口的IOA0-IOA7具有触键唤醒的功能,可以应用于低功耗的场所,SPLC501A内置8580位显示RAM。
RAM中的一位数据控制液晶屏上的一个象素点的亮、暗状态:“1”亮“0”暗。
具有65行驱动输出和132列驱动输出(注:模组中的液晶显示面板仅为64行、128列)。
SPLC501液晶显示模组的显示器上的显示点与驱动控制芯片中的显示缓存RAM是一一对应的;SPLC501A芯片中共有65(8 Page ×8 bit+1)×132位的显示RAM 区。
而显示器的显示点阵大小为64×128点,所以实际上在SPLC501液晶显示模组中有用的显示RAM区为64×128位;按byte为单位划分,共分为8个Page,每个Page为8行,而每一行有128位(即128列)。
SPCE061A核心及周边电路图如图2-1所示。
图2-1 SPCE061A核心及周边电路原理图实际上就是通过对某点所对应的显示RAM区中的某一位进行置1操作;所以就要确定该点所处的行地址、列地址。
SPLC501液晶显示模组的行地址实际上就是Page的信息,每一个Page应有8行;而列地址则表示该点的横坐标,在屏上为从左到右排列,Page中的一个Byte对应的是一列(8行,即8个点),共128列。
从而点亮LCD屏上的某一个点时,可以根据这样的关系在程序中控制LCD显示屏的显示,LCD显示模组模块如图2-2所示。
图2-2 LCD显示模组模块结构图图2-3 电源2.3 硬件连接硬件连接图如图2-4所示,分别用实验箱跳线连接IOB4与AO,IOB5与RWP,IOB6与EP,IOB9与/CS,IOA8~IOA15与D0~D7;VR、C86和PS都与V3短接,把SPLC501液晶显示模组的时序选择为6800时序。
即用跳线把实验箱JP6的所有引针全部短接。
硬件连接图如图2-4所示。
图2-4 硬件连接图2.4 本章小结SPCE061A是凌阳科技推出的又一款16位结构的微控制器。
在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,而且具有较高的处理速度。
LCD模组,是指将玻璃和LCD驱动器集成到一起的LCD显示产品,是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。
通过SPCE061A核心及周边电路模块和LCD显示模组模块进行接口的连接,利用所提供的图片来实现液晶显示器动态图片,从第一张图象依次显示到第九张图象之后,再从第九张图象依次显示第一张图象,每张图象显示刷新时间为0.2s,来实现动态图片的显示。
第3章软件设计3.1程序的设计流程主程序流程图如图3-1,初始化LCD,设置为取反并覆盖的显示模式,显示图片sp1;进入显示循环,显示图片sp1,延时0.2s;显示sp2,延时0.2s,依次显示到sp8,延时0.2s;显示sp8,延时0.2s,显示sp7,延时0.2s,依次显示到sp0,延时0.2s。
每帧图象都显示在(48,10)位置上。
图3-1 主程序流程图中断服务流程图如图3-2,在中断服务程序里,只需要让中断计数器加1即可,那么在主程序里,只要计数器等于200,说明0.2s的定时已到,可以进行图像的刷新。
图3-2 中断服务程序流程图3.2 DM Tool字模提取工具DM Tool是针对unSP系列16位单片机的字模数据提取工具;用户可以利用此工具提取汉字字模、BMP位图字模,还可以很方便地提取ASCII码字模;用户还可以利用此工具对所要取的汉子、位图等进行编辑;生成字模数据用以Word数据为基本单元,并以数组的形式保存。
字模数据导出时,可以导出一个.c文件和一个.h的头文件,用户可以直接把这两个文件加载到用户的工程中,供汉字显示‘位图显示使用。
DM Tool主要有字符导入编辑、单色BMP 图像的导入和编辑、图像和字符的字模数据生成以及字模数据文件导出等主要功能。
图3-3为打开后的DM Tool工具的主窗口。
图3-3 DM Tool打开后界面使用过程如下:首先,在开始菜单中,运行DM Tool工具;其次,点击菜单栏上的[File]中的[New],新建工程(*.prj文件);然后,输入字符或导入图像编辑图像;最后,点击[File]中的[Save],以保存改动后的工程。
3.3 SPLC501液晶显示模组函数及显示位置移动SPLC501液晶显示模组汉字显示API函数介绍:SPLC501液晶显示模组动态图片显示相关的API函数:void LCD501_Init(unsigned int InitialData) //初始化液晶显示void LCD501_ClrScreen(unsigned int Mode) //点亮屏幕或清屏void LCD501_SetPaintMode(unsigned ModeCode) //设置图形显示模式unsigned int LCD501_GetPaintMode(void) //获取图形显示模式void LCD501_Bitmap(unsigned int x,unsigned int y,unsigned int *word)//显示汉字或者位图的字模数据SPLC501液晶显示模组显示位置移动图片当想要让图片在屏幕上移动时,事实上就是让图片在屏幕上的位置改变,比如:图片在(0,30)位置上显示,如果想让图片向右移动50个像素点,只要让图片在(50,30)位置上显示即可。