《2022年嵌入式实验 .pdf》由会员分享,可在线阅读,更多相关《2022年嵌入式实验 .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本科实验报告嵌入式系统LCD显示实验学院电信学院专业信息工程 班学生姓名赵爽班级序号57 号学号200530215274 指导教师高学提交日期2008 年 5 月 12 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 一、实验目的1.深入了解 CodeWarrior 集成开发环境2.掌握 ADS 实验调试方法和 BanyanU 仿真器使用3.了解 LCD 控制器的基本原理4.了解 LCD 控制器的配置方法5.掌握字符和图像的显
2、示方法和编程实现过程二、实验内容1.配置 GPIO 寄存器,将与 LCD 连接的引脚定义为所需的功能引脚2.将帧描述符定义在SDRAM 里,在 DMAC 被初始化后,供MAC 提取3.配置 LCD 控制器的各寄存器4.建立 LCD 屏幕上的每一象素与FRAME BUFFER 对应位置的映射关系。将字符位图转换成字符矩阵数据,并且写入到FRAME BUFFER 里5.根据提供的参考代码,分析和完成LCD 显示实验程序代码6.程序在 ADS 的设置和编译,将 ELF 文件转化 BIN 格式的文件7.通过 Banyan-UE 下载 BIN 格式的目标程序到目标板8.观察程序运行情况9.然后自己编写程
3、序,实现某些显示效果三、实验原理1. 实验开发板简介实验开发板由 XSBase270-ModuleXSBase270-EDR组成的系统。XSBase270-Module:采用 PXA270 处理器的开发平台,可独立使用,简称模块板。XSBase270-EDR : 需与 XSBase270-Module 配套使用的接口扩展板, 通过 2 个 120Pin 的接插件与XSBase270-Module 板连接并一起工作,不可独立使用。系统大致方框图如下:2. Frame Buffer 在系统中定义一段存储空间(Frame Buffer) ,显示屏的每个像素值都一一对应到该存储空间,通过改变存储空间的
4、内容,可以达到改变显示内容。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - Frame Buffer 大小的确定跟显示屏的性能有关。根据显示屏的性能,分为单色跟彩色。单色用1 位来表示(单色并不等于黑与白两种颜色, 而只是说只能以两种颜色来表示,通常取允许范围内颜色对比度最大的两种颜色),彩色又分为2 位色(4 种颜色) ,4 位色(16 种颜色) ,8 位色( 256 种颜色) ,16 位色( 65536 种颜色) ,24 为
5、色(16777216 种颜色)这些色调代表整个屏幕所有象素的颜色取值范围,如:采用8 位色/象素的显示模式,显示屏上能够出现的颜色种类最多只能有28种。究竟应该采取什么显示模式,首先必须根据显示屏的性能,然后再由显示的需要来决定。这些因素会影响 Frame buffer 空间的大小,因为Frame buffer 空间的计算大小是以屏幕的大小和显示模式来决定的,另外还有另一影响因素,就是显示屏的单/双屏幕模式。如下图显示:单屏幕模式代表屏幕的显示范围是整个屏幕,这种显示模式只需一个Fame Buffer 来存储整个屏幕的显示内容, 并且只需一个通道来将Fame Buffer 内容传输到显示屏上(
6、 FrameBuffer 的内容可能需要被处理后再传输到显示屏)。双屏幕模式则将整个屏幕划分成两部分,上半部和下半部, 它有别于将两个独立的显示屏组织成一个显示屏, 单看上半部或下半部, 它们的显示方式是与单屏幕的方式一致,并且上半部与下半部都是同时扫描,工作方式是独立的, 同时这两部分都各自有Frame Buffer,且他们的地址无需连续(这里指的是下半部的Frame Buffer 的首地址无需紧跟在上半部Frame Buffer 的地址末端), 并且同时具有独立的两个通道将Frame Buffer 的数据传输到显示屏。单色模式,屏幕上每一个像素点在Frame Buffer 中仅需要 1 位
7、,而彩色模式则分为 2/4/8/16/24 位等。在本实验平台用的LCD 显示屏为 TFT640*480,我们采用 16BPP单屏显示配置。像素颜色是通过 RGB 值表示的,例如16bpp从高到低依次为RGB(5:6:5)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 实验中 640 x480的屏幕, 16bpp,Frame Buffer 大小为 640 x480 x2 614400 3. LCD 控制器LCD 控制器:位于显示
8、屏与Frame Buffer 之间,负责数据处理与传送、控制。包括: LCD DMAC 、Input FIFO、Output FIFO、内部调色板、抖动引擎、寄存器组。1.LCD DMAC :负责从 Frame Buffer 中取数据到 Input FIFO,自动完成,无需程序控制。2.Input FIFO :16x16bits 大小。3.Ouput FIFO :64x24bits 大小。4.内部调色板: 256 个单元,每单元 25 位;当像素大小大于8bpp,调色板无效。LCDC 内 部 的 DMAC需要 初始 化, 初始 化信 息通过帧 描 述符 (Frame Descriptors)提
9、供。帧描述符寄存器的初始化,不是通过直接向寄存器写入完成的。初始化过程:用户开辟一个 4x32bits 的空间,分别对应帧描述符的4 个寄存器,并写入适当的值,将该空间的首地址传给LCDC(寄存器 FDADR) 硬件自动完成读取相应数据到寄存器。由于本实验使用的是TFT 显示屏,故无需初始化内部调色板,只需一个帧描述符来描述Frame Buffer 空间便可以了。根据以上讲解,在内存地址 0 xA030_0000 开始的地方开辟一个帧描述符。如下所示:0 xA030_0000 = 0 xA030_0000 0 xA030_0004 = 0 xA050_000 0 xA030_0008 = 0
10、x0 0 xA030_000C = 0 x0009_6000 4. HZ16 字库文件汉字为 16X16 点阵:每个汉字的点阵大小: 16x16,共占用 32Byte 其中每一行占用 2 个 Byte,从高到低每位依次对应该行的16 个象素点。排列顺序为第一行、第二行、 .第十六行。HZ16: 包括 GB2312-80 定义的所有字符,分为1-87 区, (对于汉字,包括国标 1、2 级字库 6763 个汉字,分为 1687 区,并按顺序在该字库文件中存储排列。每区 94 个字符(如果某区字符不足94,则相应存储位置填空)名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
11、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 四、程序说明程序是一个简短的boot 并控制 LCD 显示移动文字,文字以一定角度碰撞显示屏边缘后以相应的角度反弹,如此重复运行。程序主要包含文件如下:因为相关设置已经完成之后,需要在led上显示的东西只用存在Frame Buffer中即可,所以程序只用设置字库的调用以及寄存器等ledc 的初始化设置即可。汉字显示时,按照汉字库每个区的每个字挨个搜索(使用循环)使其显示,之后设置显示器呈各种颜色时需显示的文字即可五、程序源代码、注释主要 C 程序或函数
12、如下:extern void print_3232(char *,int, int); /extern void print_0808(char *,int, int); /extern void print_0813(char *,int, int); extern void print_song231(char *, int, int); extern void disable_lcd(void); extern void enable_lcd(void); extern void lighton1(void); extern void lighton2(void); extern voi
13、d lightoff1(void); extern void lightoff2(void); extern void typename(void); extern void print_3232(char *,int, int); extern void screen_clean(int); / 用户开辟一个 4x32bits的空间,分别对应帧描述符的4 个寄存器,并写入适当的值 , 将该空间的首地址传给LCDC( 寄存器 FDADR), 硬件自动完成读取相应数据到寄存器extern char word_1324 ; extern char word_2324 ; extern char w
14、ord_3324 ; extern char word_4324 ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - extern char word_5324 ; extern char word_6324 ; extern char word_7324 ; /extern char character8_8; /extern char character8_13; extern char song2312_1612; ext
15、ern void print_RECT(int pixel_x,int pixel_y); extern void ChineseOut(short x, short y, char *buf, unsigned short color); extern void DisplayFont(short x ,short y, char * buf, unsigned short color); / 汉字为 16X16点阵:每个汉字的点阵大小:16x16,共占用 32Byte,其中每一行占用2 个 Byte,从高到低每位依次对应该行的16 个象素点。一次排列为116行。HZ16字库分为 1-87
16、区,按顺序在该字库文件中存储排列。每区94 个字符(不足时填空)void udelay(int multi) long int delay_1,delay_2; multi*=5; for (delay_2=0;delay_2multi;delay_2+) for(delay_1=0;delay_1100000;delay_1+); / 汉字内码:每个汉字对应2 个字节,分为区编码和区内编码,直接将汉字定义为 int格式( 2 个字节)delay_20 = 0对应区编码, delay_10 = 0对应区内编码 delay_20+对应下一个区的汉字, delay_10+ 对应同一个区的下一个汉字
17、void dummyOs() /显示(主程序) char chstr = 赵爽; /定义字符串chstr ,使其在显示屏呈白色时显示chstr 中的内容while(1) int i; /white screen_clean(0 xFFFFFFFF); /print_3232(word_10,200,200); /print_RECT(300,200); for (i =20; i =150; i+); /汉字从右到左移动; ChineseOut(i,300,chstr,0 x8888); /调用汉字输出程序 ,并确定汉字输出位名师资料总结 - - -精品资料欢迎下载 - - - - - - -
18、 - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - 置 udelay(2); /输出保持 screen_clean(0 xFFFFFFFF); a=a+20; udelay(25); lighton1(); lightoff2(); /black screen_clean(0 x0); for (i =20; i =150; i+); ChineseOut(i,300,chstr,0 x8888); udelay(2); screen_clean(0 x0); a=a+20; udelay(25);
19、 lighton1(); lightoff2(); /blue screen_clean(0 x1F001F); for (i =20; i =150; i+); ChineseOut(i,300,chstr,0 x8888); udelay(2); screen_clean(0 x1F001F); a=a+20; udelay(25); lighton1(); lightoff2(); /red screen_clean(0 xF800F800); for (i =20; i =150; i+); ChineseOut(i,300,chstr,0 x8888); 名师资料总结 - - -精品
20、资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - udelay(2); screen_clean(0 x F800F800); a=a+20; udelay(25); lighton2(); lightoff1(); /green screen_clean(0 x07E007E0); for (i =20; i =150; i+); ChineseOut(i,300,chstr,0 x8888); udelay(2); screen_clean(0 x07E
21、007E0); a=a+20; udelay(25); lighton1(); lightoff2(); /gray screen_clean(0 x12345678); for (i =20; i =150; i+); ChineseOut(i,300,chstr,0 x8888); udelay(2); screen_clean(0 x12345678); a=a+20; udelay(25); lighton2(); lightoff1(); 六、心得体会此次实验是第二次上机实践操作, 跟第一次相比对于各方面的操作都显得更加熟练了。 在实验开始的时候, 我先完场了第一次实验没有做完的部分
22、,但是还是按时完成了第二吃实验。通过亲自对嵌入式系统程序进行编写、编译、连接、调试、烧写等,清楚直名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 接地感受了嵌入式系统的编程及其仿真过程,了解了软件的开发环境、LCD 控制器的基本原理和LCD 控制器的配置方法,并且基本掌握了字符和图像的显示方法和编程实现过程。由于是第二组做的实验, 所以遇到的问题也不是很多, 大多数都在同学的提示下解决了。其中比较严重的就是make的时候总是出错, 不能顺利的生成镜像。同时我对实验也进行了简单的修改。结合第一个实验的特点, 我加入了字符串的移动,这样就会有动态的效果。 而且也对实验中的另一个部分也就是图像的绘制有了大概的了解。 其实就是在每个像素点的赋予相应的色彩值,然后组合成相应的图案。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -