嵌入式图形显示.

Slides:



Advertisements
Similar presentations
国家税务总局关于修改企业所得税年度纳税申报表( A 类, 2014 年版) 部分申报表的公告(国家税务总局公告 2016 年第 3 号) 一、对《企业基础信息表》( A )及填报说明修改如下: (一) “107 从事国家非限制和禁止行业 ” 修改为 “107 从事国家限制或禁止行业 ”
Advertisements

2014 年 12 月 企业所得税年度纳税申报表 (A 类, 2014 版 ) 辅导材料(二) A 企业基础信息 A 主表.
第四單元 通電的玩具 張老師的網頁.
专题培训 企业所得税汇算清缴 (2015年度).
FD班座谈会 -结合学校目标 找准自己位置-
景观水池渗漏的研究 年级专业:12级土木工程 指导教师: ××× 教 学 点: ××××教学点 新疆工程学院继续教育学院 20 年 月 日
第二节 时间和位移.
工程定额与计价方法 教材名称:工程建设定额原理与实务
建设工程施工管理 模拟卷 一、单项选择题 1.下列选项中,除( )以外都属于施工机械使用费。 A.购置费 B.安拆费及场外运费 C.折旧费 D.修理费.
阳光工程引导性培训 宁夏自治区盐池县农广校
《毛泽东思想和中国特色社会主义体系概论》 第一章马克思主义中国化两大理论成果
2010年春季开学学校食堂食品安全知识培训 徐汇区食品药品监督所
进出口食品检验监管 基础讲课内容 我国进出口食品安全管理体系介绍 法律法规 进口食品的检验检疫 出口食品的检验检疫.
四資二甲 第三週作業 物件導向程式設計.
授课班级 安全技术管理0605班 第 5 次 课 授课时间 2008年3月10日 星期一 授课地点 科技楼401多媒体教室 课题内容:
作业 试用C语言编程,实现对1024字节大小的环形缓冲区进行读写管理,要求: (1)定义对缓冲区访问所需数据结构;
2015版《中国地震动参数区划图》 对我市城乡建设的影响
總務處營繕組簡報 1.業務職掌 2.九十四年度工作績效 3.工程一覽 4.歷年工作成果 5.未來展望 6.困難及建議.
2014年企业所得税汇算清缴相关税收政策 新华区地方税务局 卿继红
法國大革命                                                                            
第十章 季节施工 ——冬期施工准备.
危险废物环境管理情况 河南省固体废物管理中心  韩晓晗 2007年6月6日.
Adobe Illustrator Speaker:林昱志.
食品添加剂生产许可审查通则起草说明.
概述 检索图书的检索工具 检索期刊的检索工具 检索特种文献的检索工具
客户端入门十二小时 FOOLFLY DEMO DESIGN 讲师:林伟.
第二章 C# 基础知识.
计算概论 第二十一讲 文件操作 北京大学信息学院.
液晶显示 技术 wateryear.
第3章 C 語言的基本知識.
第10章 文件操作.
SWITCH&7-SEG元件控制 嵌入式作業系統實作 11/17.
第9章 自訂資料型態 – 結構 9-1 結構資料型態 9-2 結構陣列 9-3 指標與結構 9-4 動態記憶體配置 9-5 聯合資料型態
第10章 文件操作.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
一、LCD显示器的基本原理 二、汉字显示原理 三、SED1330液晶显示控制器 四、HD44780液晶显示控制器 8.3 LCD显示器接口
数字图像处理(2) 图像文件格式 东北林业大学信息学院 任洪娥
2 数字图像基础 赵国庆 博士 北京师范大学教育技术学院
多媒體概論報告-BMP 組員名稱: 盧彥良-資料蒐集 周誠哲-資料蒐集
作業系統實習課(四) -檔案管理- 實驗室:720A 助教:鄧執中.
计算机组装、维修及 实训教程 第6章 显示器 2019年1月15日星期二.
THE C PROGRAMMING LANGUAGE
Linux 文件操作——系统调用和标准 IO 库
6.6 Huffman树及其应用 王 玲.
第5章 文件.
影像處理的基本知識 影像數位化 數位影像的基本概念.
C语言概述 第一章.
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
Chapter 7 掌控記憶體.
NAT技术讲座 主讲:周旭 大唐电信科技股份有限公司光通信分公司 数据通信部.
本节内容 字节对齐.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
Object-Oriented Programming in C++ 第二章 类和对象
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 类型、对象、运算符和表达式.
第2章 数据类型与表达式 学习目的与要求: 掌握C 语言的基本数据类型及使用方法 掌握C程序中常用的运算符和表达式 了解数据类型的转换.
第二章 基本数据类型 ——数据的表示.
9.1.2不等式的性质 周村实验中学 许伟伟.
#include <iostream.h>
本节内容 指针类型.
实验二:添加Linux系统调用及熟悉常见系统调用
1.4WIN32中的宽字符.
§4 连续型随机变量.
Java语言程序设计 清华大学出版社 第6章 java图形与图像处理.
第2章 Java语言基础.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
6.1.1 平方根.
第二章 一元一次不等式和一元一次不等式组 回顾与复习(一).
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Presentation transcript:

嵌入式图形显示

一、液晶显示器 嵌入式系统中多数采用液晶显示器(LCD,Liquid Crystal Display),LCD是一种低成本、低功率的器件,既可显示文字,又可显示图像。

二、显示控制器 控制器 GPU 接口 嵌入式处理器 MCU MPU DSP

三、帧缓图形显示 VRAM显存 VRAM显存 VRAM是一种内存,可以使用系统内存,也可以是独立显卡(GPU)的专用内存。

四、显示参数 1)分辨率:显示器支持的像素多少,一般采用屏幕的宽x高表示,如:800x600,1600x1200, 480x320。 2)“像素”(Pixel) 是由 Picture(图像) 和 Element(元素)这两个单词的字母所组成的,是用来计算数码影像的一种单位,是计算机屏幕上所能显示的最小单位。 3)颜色深度:显示一个像素点的位数; 4)颜色:单色、伪彩色、彩色、真彩色 真彩色:16/24/32 RGB ARGB RGB565 RGB888 ARGB8888

四、显示参数 像素颜色是由红(Red)、绿(Green)、蓝(Blue)三种颜色组成,即所谓RGB。 对于16位深颜色来说,采用565格式表示颜色,其中Red占高5、Grenn占中间6位、Blue占低5位。每个像素占VRAM中的2个字节。 对于24位深颜色,RGB分别占用8位,每个像素占用VRAM中的3个字节。

显示一个点 显存 f800

显示一个字符 A 显存

五、点阵字符 对于LCD显示的字符,大都采用点阵方式进行显示,字符点阵有5*7、8*16、12*24,而汉字是有两个字节组成,一般有16*16、24*24点阵。

五、点阵字符 ASCII字符集 7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。 ASCII扩展字符集比ASCII字符集扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号。

五、点阵字符 GB2312 字符集 1.名称的由来 GB2312又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集·基本集》,由原中国国家标准总局发布,1981年5月1日实施。 2.特点 GB2312是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。在中国大陆和新加坡获广泛使用。

五、点阵字符 3.包含内容 GB2312收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。其中包括6763个汉字,其中一级汉字3755个,二级汉字3008个;包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

五、点阵字符 4、汉字表示 (1) 分区表示: GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。 各区包含的字符如下:01-09区为特殊符号;16-55区为一级汉字,按拼音排序;56-87区为二级汉字,按部首/笔画排序;10-15区及88-94区则未有编码。

五、点阵字符 (2) 双字节表示 两个字节中前面的字节为第一字节,后面的字节为第二字节。习惯上称第一字节为“高字节” ,而称第二字节为“低字节”。 “高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。

五、点阵字符 5.编码举例 以GB2312字符集的第一个汉字“啊”字为例,它的区号16,位号01,则区位码是1601,在大多数计算机程序中,高字节和低字节分别加0xA0得到程序的汉字处理编码0xB0A1。计算公式是:0xB0=0xA0+16, 0xA1=0xA0+1。

五、点阵字符 2.汉字内码   汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示。英文字符的机内代码是七位的ASCII码,当用一个字节表示时,最高位为“0”。为了与英文字符能相互区别,汉字机内代码中两个字节的最高位均规定为“1”。   注意:有些系统中字节的最高位用于奇偶校验位,这种情况下用三个字节表示汉字内码。

五、点阵字符 3.汉字字模码    字模码是用点阵表示的汉字字形代码,它是汉字的输出形式。 根据汉字输出的要求不同,点阵的多少也不同。字模点阵的信息量很大,所占存储空间也很大。因此字模点阵只能用来构成汉字库,而不能用于机内存储。字库中存储了每个汉字的点阵代码。当显示输出或打印输出时才检索字库,输出字模点阵,得到字形。 

五、点阵字符

六、点阵字库 Asc16.h Hzk16.h

七、显示程序开发 屏幕大小:4.3吋 分辨率: 480x272 颜色深度:16位 颜色表示:RGB565

1)显示设备初始化 显示作为一种输出设备,在linux系统采用设备文件的方式进行管理,显示设备文件名称为:/dev/fb0 打开设备 dev_fb = open("/dev/fb0", O_RDWR);

1)显示设备初始化 获取设备的参数 struct fb_var_screeninfo vinfo; ioctl ( dev_fp, FBIOGET_VSCREENINFO, &vinfo ) 在头文件 include/linux/fb.h中定义数据结构: struct fb_var_screeninfo { __u32 xres; /* visible resolution */ __u32 yres; __u32 xres_virtual; /* virtual resolution */ __u32 yres_virtual; __u32 xoffset; /* offset from virtual to visible */ __u32 yoffset; /* resolution */ __u32 bits_per_pixel; /* guess what */

1)显示设备初始化 获取设备VRAM地址 mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。 void *mmap(void *start, size_t length, int prot, int flags,int fd, off_t offset); start:映射区的开始地址,设置为0时表示由系统决定映射区的起始地址。 length:映射区的长度。 prot:期望的内存保护标志,不能与文件的打开模式冲突。 flags:指定映射对象的类型,映射选项和映射页是否可以共享。 fd:有效的文件描述词。一般是由open()函数返回。 offset:被映射对象内容的起点。

1)显示设备初始化 Width = vinfo.xres; Height = vinfo.yres; fb_bpp = vinfo.bits_per_pixel; fb_size = width*height*fb_bpp/8; fb_addr = (short *)mmap( 0, fb_size, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fb, 0);

2)画一个点 void put_pixel(int x, int y, short color) { short * vram = fb_addr + y*width + x; *vram = color; } width fb_addr 例子: put_pixel(100, 30, 0xf800); height (100,30)

3)画一条水平线 void draw_h_line(int x, int y, int w, short color) { short *vram = fb_addr + y*width + x; while (w--) *vram++ = color; } 例子: draw_h_line (100,30,100,0xffff);

4)画一条垂直线 void draw_v_line(int x, int y, int h, short color) { short *vram = fb_addr + y*width + x; while (h--) *vram = color; vram += width; } 例子: draw_v_line (100,30,60,0xf800);

5)清屏? void clear_screen(short color) { }

思考题 1)画直线? 2)画矩形? 3)矩形填充? 4)画圆? 5)椭圆? 6)多边形填充?

思考题 1)显示点阵字符? 2)显示点阵汉字?

画一个字符 void draw_char8x16(int x, int y, int fc , int bc , char ch){ unsigned short * vram , *addr; unsigned char *dot; int i, j; vram = ((unsigned short *)fb_addr) + y * width + x; dot = &asc16[ch * 16]; for (j=0; j<16; j++) { addr = vram; for (i=0; i<8; i++) { if (dot[j]&(0x80>>i)) *addr ++= (unsigned short)fc; else *addr ++= (unsigned short)bc; } vram += width;

显示一个汉字 (1)汉字在计算机以两个字节表示,即汉字内码,起始内码为0xa1a1; (3)每个区共有94个字,即0xff – 0xa1 = 0x5e = 94; (4)对于16×16点阵的汉字共有32个字节表示。 (5)汉字在库中的位置偏移量。     unsigned char chinease[3]=“你"; i=chinease[0]-0xa0; /* 获得区码 */ j=chinease[1]-0xa0;  /* 获得位码 */     off = ( (i-1)*94+(j-1) ) * 32;

显示一个汉字 void draw_hz16(int x, int y, int fc , int bc , unsigned short hzcode) vram= ((unsigned short *)fb_addr) + y * width + x; pDot = (unsigned char*)Hzk16 + off; for(i=0; i<16; i++) { addr=vram+15; for(k=0; k<16; k++) { if( pDot[i*2+(1-k/8)] & (1<<(k%8)) ) *addr = (unsigned short)fc; else *addr = (unsigned short)bc; addr--; } vram += width;