嵌入式实训34显示部分Display
- 格式:doc
- 大小:53.50 KB
- 文档页数:12
嵌入式应用实验报告,实验四LCD显示实验信科10级cumt(共5篇)第一篇:嵌入式应用实验报告,实验四 LCD显示实验信科10级cumt 实验四 LCD显示实验一、LCD显示原理LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。
因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。
光源的提供方式有两种:透射式和反射式。
笔记本电脑的LCD显示屏即为透射式,屏后面有一个光源,因此外界环境可以不需要光源。
而一般微控制器上使用的LCD为反射式,需要外界提供光源,靠反射光来工作。
LCD的驱动控制–总线驱动方式: 一般带有驱动模块的LCD显示屏使用总线驱动方式,这种LCD可以方便地与各种低档单片机进行接口,如8051系列单片机。
由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。
驱动模块具有八位数据总线,外加一些电源接口和控制信号。
而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。
由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。
扫描器控制方式LCD显示屏没有驱动电路,需要与驱动电路配合使用。
这种LCD体积小,但需要另外的驱动芯片。
通常可以使用带有LCD驱动能力的高档MCU驱动,如ARM系列的S3C44B0。
S3C44B0中具有内置的LCD控制器,它具有将显示缓存中的图象数据传输到外部LCD驱动电路的逻辑功能。
S3C44B0中内置的LCD 控制器可支持灰度LCD和彩色LCD。
可以支持单色、4 级灰度和16 级灰度模式的灰度LCD以及256级彩色。
对于不同尺寸的LCD,具有不同数量的垂直和水平象素、数据接口的数据宽度、接口时间及刷新率,而LCD控制器可以进行编程控制相应的寄存器值,以适应不同的LCD显示板。
实验报告课程名称嵌入式系统编程实践实验仪器清华同方辰源嵌入式系统实验箱实验名称实验四:数码管显示实验系别__计算机学院_专业 _班级/学号学生姓名实验日期 2013年10月11日成绩___________________指导教师实验四:数码管显示实验一、实验问题回答(1)如何设置功能3,4中的循环速度?答:利用系统SysTick Handler中断,控制循环速度void SysTick_Handler (void){Event = 1;}(2)若是想实现类似实验(三)通过键盘动态控制循环速度,考虑一下应该如何设计?答:SysTickPeriodSet(SysCtlClockGet() / X)//设置x的大小就可以控制循环的速度。
void Reset_Counter_Speed(int x){SysTickIntDisable();SysTickDisable();SysTickPeriodSet(SysCtlClockGet() / x);// 设置x,控制计数频率,值与频率成正比SysTickEnable();SysTickIntEnable();},达到预期的效果。
二、实验目的和效果(效果即是否达到实验目的,达到的程度如何)学习、了解和掌握数码管工作原理和使用方法实验结果及检查(1)默认在在OLED屏幕上分行显示自己的学号、姓名、项目序号、时间,如“2010011001”、“zhangsan”、“work4”、“2012-11-”(2)首先在屏幕上显示四个功能选单,通过键盘A-F键选择不同功能,选择后屏幕显示相关功能提示,接受键盘输入的数字键0-9并在数码管上显示。
如:开始显示:“please choose the function:”“A: …”“B: …”“C: …”“D: …”按下“A”键后,显示”now you choose function A”(3)按下键盘后,根据不同功能在数码管上显示按键字符。
嵌入式系统设计实验报告1 问题描述在Linux操作系统和ARM嵌入式实验系统环境下,分析linux下的键盘、数码管驱动程序,编写一个应用程序,实现以下功能:在ARM开发板上按下数字键1、2、3、4时,对应启动模拟量开发板上的模拟量输入端AIN0、AIN1、AIN2、AIN3采样,并把模数转换的结果从终端输出和数码管显示。
数码管显示格式:通道号转换的电压值;例如:2灭灭3.251.1设计目标在ARM开发板上按下数字键1、2、3、4时,对应启动模拟量AIN0、AIN1、AIN2、AIN3采样,并把A/D转换的结果从终端输出和LED显示。
显示格式:通道号转换的电压值。
1.2设计思路根据设计目标,该问题可分为六个模块进行设计,分别为驱动程序加载、打开设备、键盘扫描、A/D转换、数码管显示,总体设计方案如图1所示。
图1 总体设计方案(1)驱动程序加载用户的应用程序以设备文件方式访问驱动程序,即Linux把设备当文件,通过文件系统对设备进行访问。
针对这个实验,需要用到ADC0809芯片,LED显示数码管,小键盘。
为此,用lsmod命令加载这三个对应的驱动程序adc0809.c、led.c和keybd.c,再以insmod的方式加入内核。
驱动程序主要是设置一些寄存器的内容来确定端口的引脚输入输出方式以及键盘的扫描部分代码,LED控制显示函数等。
(2)打开各个设备在Linux系统下,各个设备都是通过文件来进行描述的,因此用open函数打开需要用到的LED、键盘、ADC0809芯片。
并且要有对应的出错处理。
(3)键盘扫描驱动程序加载进去以后,运行可执行文件,代码就进入到了按键按下等待的代码中了。
对于用户而言,只是在键盘中按下了某个键,在计算机里,通过驱动得到按下的键值并通过read(fd_kb,&result_kb,1)函数把值赋给变量result_kb中(其中fd_kb为键盘的文件描述符)。
(4)A/D转换启动ADC0809芯片对应的通道进行数据转换,这里主要通过iotcl和read 这两个函数实现,并把转化后的结果赋给result_ad这个变量。
嵌入式Linux系统中图片解码和显示的快速入门教程嵌入式Linux系统在当今智能设备和物联网应用中扮演着越来越重要的角色。
其中,图片解码和显示是许多应用中常见的需求。
本教程将向您介绍嵌入式Linux系统中图片解码和显示的基础知识,并提供一个快速入门指南,帮助您开始开发和调试这一功能。
一、概述在嵌入式Linux系统中,图片解码和显示可以通过多种方式实现,比如使用开源图形库、硬件加速器和专用的图像处理器。
本教程将重点介绍通过开源图形库来实现图片解码和显示的方法。
二、安装依赖软件在开始之前,首先需要确保系统中安装了必要的依赖软件。
常用的软件包括图形库和图像处理库,比如libjpeg、libpng和libcairo。
可以通过系统包管理器来进行安装,具体命令可能会因不同的系统而有所不同。
三、图像解码图像解码是将压缩格式的图像文件转换成图像数据的过程。
在嵌入式Linux系统中,常见的压缩格式包括JPEG和PNG。
下面是一个简单的图像解码的代码示例:```c#include <stdio.h>#include <stdlib.h>#include <jpeglib.h>void decode_jpeg(const char* filename) {struct jpeg_decompress_struct cinfo;struct jpeg_error_mgr jerr;FILE *infile;if ((infile = fopen(filename, "rb")) == NULL) {fprintf(stderr, "Can't open %s\n", filename);exit(1);}cinfo.err = jpeg_std_error(&jerr);jpeg_create_decompress(&cinfo);jpeg_stdio_src(&cinfo, infile);jpeg_read_header(&cinfo, TRUE);jpeg_start_decompress(&cinfo);int row_stride = cinfo.output_width * cinfo.output_components;JSAMPARRAY buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);while (cinfo.output_scanline < cinfo.output_height) {jpeg_read_scanlines(&cinfo, buffer, 1);// Do something with the scanline data}jpeg_finish_decompress(&cinfo);jpeg_destroy_decompress(&cinfo);fclose(infile);}```在这段代码中,我们使用了libjpeg库来实现JPEG图像的解码。
一.硬件平台1、处理器:三星S3C2410,200MHZ2、内存:SDRAM,64M3、外存:NAND FLASH,64M4、LCD&触摸屏:SHARP,640×480,TFT5、串口:RS232,RS485二.处理器结构1、处理器核心MMU,DCACHE,ICACHE,JTAG2、系统总线SDRAM,FLASH,LCD,中断,USB3、外部总线串口,USB,GPIO试验一:bootloader (ads、引导)1、熟悉ADS 1.2开发工具创建、编译、下载、调试工程2、串口通讯串口控制器初始化、收/发数据3、配置主机端的nfs服务器配置主机端的nfs服务器,以连接linux核心4、下载并运行linux核心使用自己的串口程序下载并运行linux核心主要内容:•编写串口接收数据函数•编写串口发送数据函数•打印菜单,等待用户输入•下载并运行linux核心•配置主机的nfs服务器,与linux核心连接其他部分代码从教师用机中拷贝linux核心从教师机中拷贝主要步骤:•修改bootloader:菜单、串口收发、命令行;•使用ads1.2编译bootloader;•使用uarmjtag下载、调试bootloader;•使用axd查看变量、内存,单步跟踪;•配置超级终端,与bootloader通讯;•使用超级终端下载Linux核心映像;•启动Linux核心运行,察看结果;(bootloader调试成功后再继续以下步骤)•主机重起到ubuntu,配置nfs,配置cutecom;•重新下载Linux核心映像,启动核心运行后,察看是否成功加载nfs上的root文件系统。
需要补充的代码:接收串口数据并做相应处理while(1){打印菜单并等待用户输入;switch(ch) //根据用户输入做相应处理{case '1':imgsize=xmodem_receive((char *)KERNEL_BASE, MAX_KERNEL_SIZE);if(imgsize==0) //下载出错;else //下载成功;break;case '3':nand_read((unsigned char *)KERNEL_BASE, 0x00030000, 4*1024*1024);case '2':BootKernel(); //这里是不会返回的,否则出错;break;default:break;}}打印菜单:Uart_puts("Menu:\n\r");Uart_puts("1.Load kernel via Xmodem;\n\r");Uart_puts("2.Boot linux; \n\r");Uart_puts("3.Load kernel from flash and boot; \n\r");Uart_puts("Make your choice.\n\r");do{ch=Uart_getc();}while(ch!='1' && ch!='2' && ch!='3');串口读写:void Uart_putc(char c){while(!SERIAL_WRITE_READY());((UTXH0) = (c));}unsigned char Uart_getc( ){while(!SERIAL_CHAR_READY());return URXH0;}设置Linux核心启动命令行char *linux_cmd="noinitrd init=/init root=/dev/nfs nfsroot=,tcp ip= console=ttySAC0"; nfs服务器设置编辑/etc/export文件:/home/arm_os/filesystem/rootfs 目标板ip(rw,sync)/home/arm_os/filesystem/rootfs 主机ip(rw,sync)启动nfs服务器:/etc/init.d/nfs-kernel-server restart测试nfs服务器:mount 主机ip:/home/arm_os/filesystem/rootfs /mnt•试验二:linux kernel (gcc、make)1、熟悉基本的linux命令文件操作、文件编辑串口工具、程序开发2、配置linux核心make menuconfig3、交叉编译linux核心make zImage主要工作•熟悉基本的linux命令•配置linux核心•交叉编译linux核心•调试自己编译的核心•挂载nfs上的root(根目录)•编写一个小程序在目标板上运行主要步骤:•用root用户登录ubuntu (合理使用权限);•解压缩源码包到/home/下;•察看解压缩后的/home/arm_os目录:Linux核心、编译器、root等;•配置并测试nfs;•配置cutecom:115200,XModem,No line end;•配置核心:make menuconfig;•编译核心:make;•下载并运行核心,加载root文件系统;•重新设置cutecom为LF line end;•熟悉基本的Linux命令;•编写一个小程序在目标板上运行,察看结果。
嵌入式实训34显示部分Display.h——维信科技一.相关结构(维信科技,山西最专业的IT实训):typedef struct{int DrawPointx;int DrawPointy; //绘图所使用的坐标点int PenWidth; //画笔宽度U32 PenMode; //画笔模式COLORREF PenColor; //画笔的颜色int DrawOrgx; //绘图的坐标原点位置int DrawOrgy;int WndOrgx; //绘图的窗口坐标位置int WndOrgy;int DrawRangex; //绘图的区域范围int DrawRangey;structRECT DrawRect; //绘图的有效范围U8 bUpdataBuffer; //是否更新后台缓冲区及显示U32 Fontcolor; //字符颜色}DC,*PDCtypedef struct {int left;int top;int right;int bottom;}structRECT二.相关函数(维信科技,山西最专业的IT实训):initOSDC定义:void initOSDC()功能:初始化系统的绘图设备上下文(DC),为DC的动态分配开辟内存空间CreateDC定义:PDC CreateDC()功能:创建一个绘图设备上下文(DC),返回指向DC的指针DestoryDC定义:void DestoryDC(PDC pdc)功能:删除绘图设备上下文(DC),释放相应的资源参数说明:pdc:指向绘图设备上下文(DC)的指针SetPixel定义:void SetPixel(PDC pdc, int x, int y, COLORREF color)功能:设置指定点的像素颜色到LCD的后台缓冲区,LCD范围以外的点将被忽略参数说明:pdc:指向绘图设备上下文(DC)的指针x,y:指定的像素座标color:指定的像素的颜色,高8位为空,接下来的24位分别对应RGB颜色的8位码。
嵌入式Linux系统下的汉字处理和显示第一篇:嵌入式Linux系统下的汉字处理和显示嵌入式Linux系统下的汉字处理和显示本文阐述在嵌入式Linux环境下通过汉字编码的转换,汉字字体的提取,实现对汉字的处理和显示。
所提出的解决方案,在嵌入式Linux环境下,可以不依赖于MicroWindows、MiniGUI等嵌入式图形界面接口软件实现汉字的处理与显示。
1 汉字编码的处理由于传统的计算机字符内码ASCII码最多只能包含256个字符,只能包含英文字符和其他常用字符,而不能包含其它语言的字符,尤其是汉字。
因此不同的组织机构又制定了包含汉字的字符编码标准。
GB编码是由我国政府颁布的国家标准,经过不断扩充,形成了GB2312、GB13000(GBK)、GB18030标准;BIG-5码是主要由使用繁体字的地区采用的标准;Unicode编码是由Unicode协会为包含汉字在内的各种语种字符制定的统一字符集标准,同时兼容于国际标准ISO 10646,但是不兼容GB编码。
Unicode编码又有UTF8等实现形式,一般Unicode指UCS-2规范。
在嵌入式Linux系统下使用的汉字,其来源大致可以分为: 1.程序字符串常量中的汉字;2.文本文件或其它资源文件。
因为各种源文件编辑器、文本文件编辑器或资源文件来源的不同、网络环境的不同。
因此嵌入式Linux系统下使用的汉字也体现为各种不同的编码格式,需要进行编码格式的转换,才能够对汉字进行正确的处理。
嵌入式Linux系统应用开发所使用的程序源文件和文本文件,一般是来自于Windows操作系统下的编辑工具,或Linux桌面操作系统下的编辑工具。
Windows操作系统下的常用文本编辑器,如Notepad、UltraEdit等,缺省的文件编码保存格式是ASCII码,其中的汉字以GB编码保存。
Linux XWindow下的图形界面文件编辑器gEdit,也以ASCII码作为缺省的文本保存编码,其中的汉字以UTF-8编码保存。
嵌入式实训34显示部分Display.h——维信科技一.相关结构:typedef struct{int DrawPointx;int DrawPointy; //绘图所使用的坐标点int PenWidth; //画笔宽度U32 PenMode; //画笔模式COLORREF PenColor; //画笔的颜色int DrawOrgx; //绘图的坐标原点位置int DrawOrgy;int WndOrgx; //绘图的窗口坐标位置int WndOrgy;int DrawRangex; //绘图的区域范围int DrawRangey;structRECT DrawRect; //绘图的有效范围U8 bUpdataBuffer; //是否更新后台缓冲区及显示U32 Fontcolor; //字符颜色}DC,*PDCtypedef struct {int left;int top;int right;int bottom;}structRECT二.相关函数(维信科技,山西最专业的IT实训):initOSDC定义:void initOSDC()功能:初始化系统的绘图设备上下文(DC),为DC的动态分配开辟内存空间CreateDC定义:PDC CreateDC()功能:创建一个绘图设备上下文(DC),返回指向DC的指针DestoryDC定义:void DestoryDC(PDC pdc)功能:删除绘图设备上下文(DC),释放相应的资源参数说明:pdc:指向绘图设备上下文(DC)的指针SetPixel定义:void SetPixel(PDC pdc, int x, int y, COLORREF color)功能:设置指定点的像素颜色到LCD的后台缓冲区,LCD范围以外的点将被忽略参数说明:pdc:指向绘图设备上下文(DC)的指针x,y:指定的像素座标color:指定的像素的颜色,高8位为空,接下来的24位分别对应RGB颜色的8位码。
(维信科技,山西最专业的IT实训)SetPixelOR定义:void SetPixelOR(PDC pdc, int x, int y, COLORREF color)功能:设置指定点的像素颜色和LCD的后台缓冲区的对应点或运算,LCD 范围以外的点将被忽略参数说明:pdc:指向绘图设备上下文(DC)的指针x,y:指定的像素座标color:指定的像素的颜色,高8位为空,接下来的24位分别对应RGB颜色的8位码。
SetPixelAND定义:void SetPixelAND(PDC pdc, int x, int y, COLORREF color)功能:设置指定点的像素颜色和LCD的后台缓冲区的对应点与运算,LCD 范围以外的点将被忽略x,y:指定的像素座标color:指定的像素的颜色,高8位为空,接下来的24位分别对应RGB颜色的8位码。
SetPixelXOR定义:void SetPixelXOR(PDC pdc, int x, int y, COLORREF color)功能:设置指定点的像素颜色和LCD的后台缓冲区的对应点异或运算,LCD 范围以外的点将被忽略参数说明:pdc:指向绘图设备上下文(DC)的指针x,y:指定的像素座标(维信科技,山西最专业的IT实训)color:指定的像素的颜色,高8位为空,接下来的24位分别对应RGB颜色的8位码。
GetFontHeight定义:int GetFontHeight(U8 fnt)功能:返回指定字体的高度参数说明:fnt:输出字体的大小型号,可以是表A-1数值中的一种:表A-1 字体大小字体的型号数值说明FONTSIZE_SMALL 1 小字体模式,12x12字符FONTSIZE_MIDDLE 2 中字体模式,16x16字符FONTSIZE_BIG 3 大字体模式,24x24字符TextOut定义:void TextOut(PDC pdc, int x, int y, U16 *ch, U8 bunicode, U8 fnt)功能:在LCD屏幕上显示文字x,y:所输出文字左上角的屏幕坐标ch:指向输出文字字符串的指针bunicode:是否为Unicode编码,如果是TRUE,表示ch指向的字符串为Unicode 字符集;如果为FALSE,表示表示ch指向的字符串为GB字符集。
(维信科技,山西最专业的IT实训)fnt:指定字体的大小型号,可以是表A-1数值中的一种或表A-2的数值:表A-2 字的显示方式显示模式数值说明FONT_NORMAL 0 正常显示FONT_TRANSPARENT 4 透明背景FONT_BLACKBK 8 黑底白字TextOutRect定义:void TextOutRect(PDC pdc, structRECT* prect, U16* ch, U8 bunicode, U8 fnt, U32 outmode)功能:在指定矩形的范围内显示文字,超出的部分将被裁减参数说明:pdc:指向绘图设备上下文(DC)的指针prect:所输出文字的矩形范围ch:指向输出文字字符串的指针(维信科技,山西最专业的IT实训)bunicode:是否为Unicode编码,如果是TRUE,表示ch指向的字符串为Unicode 字符集;如果为FALSE,表示表示ch指向的字符串为GB字符集。
fnt:指定字体的大小型号,可以是表A-1数值中的一种或表A-2的数值outmode:指定矩形中文字的对齐方式,可以是表A-3中的数值表A-3 矩形中文字的对齐方式对齐方式数值说明TEXTOUT_LEFT_UP 0 文字从左上角开始TEXTOUT_MID_X 1 水平居中TEXTOUT_MID_Y 2 垂直居中MoveTo定义:void MoveTo(PDC pdc, int x, int y)功能:把绘图点移动到指定的坐标参数说明:pdc:指向绘图设备上下文(DC)的指针x,y:移动画笔到绘图点的屏幕坐标LineTo定义:void LineTo(PDC pdc, int x, int y)功能:在屏幕上画线。
从当前画笔的位置画直线到指定的坐标位置,并使画笔停留在当前指定的位置参数说明:pdc:指向绘图设备上下文(DC)的指针x,y:直线绘图目的点的屏幕坐标DrawRectFrame定义:void DrawRectFrame(PDC pdc, int left,int top ,int right, int bottom)功能:在屏幕上绘制指定大小的矩形方框。
参数说明:pdc:指向绘图设备上下文(DC)的指针left:绘制矩形的左边框位置right:绘制矩形的右边框位置top:绘制矩形的上边框位置bottom:绘制矩形的下边框位置DrawRectFrame2定义:void DrawRectFrame2(PDC pdc, structRECT *rect)功能:在屏幕上绘制指定大小的矩形方框。
参数说明:pdc:指向绘图设备上下文(DC)的指针rect:绘制矩形的位置及大小FillRect定义:void FillRect(PDC pdc, int left,int top ,int right, int bottom,U32 DrawMode , COLORREF color)功能:在屏幕上填充指定大小的矩形。
参数说明:pdc:指向绘图设备上下文(DC)的指针left:绘制矩形的左边框位置(维信科技,山西最专业的IT实训)right:绘制矩形的右边框位置top:绘制矩形的上边框位置bottom:绘制矩形的下边框位置DrawMode:矩形的的填充模式和颜色,它的数值可以是表A-4中的一种和表A-5中的或运算的结果color:填充的颜色值,高8位为空,接下来的24位分别对应RGB颜色的8位码。
表A-4 绘图模式绘图模式数值说明GRAPH_MODE_NORMAL 0x00 普通绘图模式GRAPH_MODE_OR 0x10 或绘图模式GRAPH_MODE_AND 0x20 与绘图模式GRAPH_MODE_XOR 0x30 异或绘图模式表A-5 前景颜色图形显示模式数值说明COLOR_BLACK 1 黑色前景色COLOR_WHITE 0 白色前景色FillRect2定义:void FillRect2(PDC pdc, structRECT *rect,U32 DrawMode , COLORREF color )功能:在屏幕上填充指定大小的矩形。
参数说明:pdc:指向绘图设备上下文(DC)的指针rect:绘制矩形的位置及大小(维信科技,山西最专业的IT实训)DrawMode:矩形的的填充模式和颜色,它的数值可以是表A-4中的一种和表A-5中的或运算的结果。
color:填充的颜色值,高8位为空,接下来的24位分别对应RGB颜色的8位码。
ClearScreen定义:void ClearScreen()功能:清除整个屏幕的绘图缓冲区,即:清空LCDBuffer2SetPenWidth定义:U8 SetPenWidth(PDC pdc, U8 width)功能:设置画笔的宽度,并返回以前的画笔宽度参数说明:pdc:指向绘图设备上下文(DC)的指针width:画笔的宽度,默认值是1,即一个像素点宽SetPenMode定义:void SetPenMode(PDC pdc, U32 mode)功能:设置画笔画图的模式参数说明:pdc:指向绘图设备上下文(DC)的指针mode:绘图的更新模式,可以是表A-4数值中的一种Circle定义:void Circle(PDC pdc, int x0, int y0, int r)功能:绘制指定圆心和半径的圆参数说明:pdc:指向绘图设备上下文(DC)的指针x0,y0:圆心坐标r:圆的半径ArcTo定义:void ArcTo(PDC pdc, int x1,int y1, U8 arctype, int R)功能:绘制圆弧,从画笔的当前位置绘制指定圆心的圆弧到给定的位置参数说明:pdc:指向绘图设备上下文(DC)的指针x1,y1:绘制圆弧的目的位置arctype:圆弧的方向可以是表A-6参数中的一种:R:圆弧的半径表A-6 圆弧的方向园弧绘制模式数值说明GRAPH_ARC_BACKWARD 0 逆时针画圆GRAPH_ARC_FORWARD 1 顺时针画圆SetLCDUpdata定义:U8 SetLCDUpdata(PDC pdc, U8 isUpdata)功能:设定绘图的时候是否及时的更新LCD的显示,返回以前的更新模式参数说明:pdc:指向绘图设备上下文(DC)的指针isUpdata:是否更新LCD的显示,可以为TRUE或者FALSE。