嵌入式实训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编码保存。
项目(实训)指导书系别:计算机系专业:软件工程专科专业课程:嵌入式系统开发制订人:朱贤刚审核人:罗洛阳制订时间:2014年8月目录项目一数码管显示实验 (3)项目二实时时钟实验 (7)项目三Linux应用程序编写实验 (11)项目四Linux驱动程序编写实验 (17)项目五Ramdisk文件系统创建 (22)项目六嵌入式web服务器移植及建立 (28)项目一数码管显示实验一、项目(实训)名称数码管显示实验。
二、项目(实训)学时数2学时。
三、项目(实训)目标实训目标:1. 了解数码管的显示原理;2. 掌握JXARM9-2440中数码管显示编程方法。
最终成果:1、能在ADT IDE集成开发环境中编写数码管显示程序,在数码管上循环显示0-F字符;2、能在数码管上显示HELLO。
获得的知识:1. 掌握数码管的显示原理;2. 掌握JXARM9-2440中数码管显示编程方法。
四、项目(实训)中的具体任务1、能在ADT IDE集成开发环境中编写数码管显示程序,在数码管上循环显示0-F字符;2、能在数码管上显示HELLO。
五、教师知识和能力要求知识要求:1. 了解C语言的基本知识;2. 了解ADT IDE中编写和调试程序的方法。
能力要求:1、能在ADT IDE集成开发环境中编写数码管显示程序,在数码管上循环显示0-F字符;2、能在数码管上显示HELLO。
六、学生知识和能力准备1. 了解C语言的基本知识;2. 了解ADT IDE中编写和调试程序的方法。
七、工具与设备1. 硬件:JXARM9-2410教学实验箱、PC机;2. 软件:PC机操作系统Windows 98(2000、XP) +ADT 1000开发环境。
八、辅助教学资料刘铁刚、杨磊等,《ARM9嵌入式技术及Linux系统实验指导书》,武汉创维特信息技术有限公司九、实施步骤与技术要点1.制作LED字符与码段对应表,以数组形式表示,如下面代码所示,seg7table[0]-seg7table[15]的值分别代表显示字符0-F时,各码段的输入数据。
北航ARM9嵌⼊式系统实验实验三uCOS-II实验实验三 uCOS-II实验⼀、实验⽬的在内核移植了uCOS-II 的处理器上创建任务。
⼆、实验内容1)运⾏实验⼗,在超级终端上观察四个任务的切换。
2)任务1~3,每个控制“红”、“绿”、“蓝”⼀种颜⾊的显⽰,适当增加OSTimeDly()的时间,且优先级⾼的任务延时时间加长,以便看清三种颜⾊。
3)引⼊⼀个全局变量BOOLEAN ac_key,解决完整刷屏问题。
4)任务4管理键盘和超级终端,当键盘有输⼊时在超级终端上显⽰相应的字符。
三、预备知识1)掌握在EWARM 集成开发环境中编写和调试程序的基本过程。
2)了解ARM920T 处理器的结构。
3)了解uCOS-II 系统结构。
四、实验设备及⼯具1)2410s教学实验箱2)ARM ADS1.2集成开发环境3)⽤于ARM920T的JTAG仿真器4)串⼝连接线五、实验原理及说明所谓移植,指的是⼀个操作系统可以在某个微处理器或者微控制器上运⾏。
虽然uCOS-II的⼤部分源代码是⽤C语⾔写成的,仍需要⽤C语⾔和汇编语⾔完成⼀些与处理器相关的代码。
⽐如:uCOS-II在读写处理器、寄存器时只能通过汇编语⾔来实现。
因为uCOS-II 在设计的时候就已经充分考虑了可移植性,所以,uCOS-II的移植还是⽐较容易的。
要使uCOS-II可以正常⼯作,处理器必须满⾜以下要求:(1)处理器的C编译器能产⽣可重⼊代码可重⼊的代码指的是⼀段代码(如⼀个函数)可以被多个任务同时调⽤,⽽不必担⼼会破坏数据。
也就是说,可重⼊型函数在任何时候都可以被中断执⾏,过⼀段时间以后⼜可以继续运⾏,⽽不会因为在函数中断的时候被其他的任务重新调⽤,影响函数中的数据。
(2)在程序中可以打开或者关闭中断在uCOS-II中,可以通过OS_ENTER_CRITICAL()或者OS_EXIT_CRITICAL()宏来控制系统关闭或者打开中断。
这需要处理器的⽀持,在ARM920T的处理器上,可以设置相应的寄存器来关闭或者打开系统的所有中断。
【设计题目】矩阵LED字符显示控制系统设计【设计目的】1.掌握无操作系统下的硬件软件设计原理和方法;2.进一步熟悉ARM 处理器的基本结构、指令集、存储系统以及基本接口编程;3.熟悉嵌入式系统各部件的硬件初始化过程以及基本IO控制方法。
4.掌握矩阵LED 的应用原理【设计内容】1.利用sys_init初始化程序,利用串口实现PC和开发板的数据通信;2.编写S3C2410X 处理器的点阵屏驱动程序;3.编写S3C2410X 处理器的点阵屏应用程序。
4. 当程序运行等待要求从串口输入学生姓名的字符串在矩阵LED上显示出来。
【实验环境】硬件:Embest EduKit-IV 平台,ULINK2 仿真器套件,PC 机;软件:μVision IDE for ARM 集成开发环境,Windows XP。
【相关知识综述】背景知识、原理算法等一、硬件部分1.点阵屏的结构电路图1点阵屏的结构电路图上QL1-QL16为行驱动信号,每个信号控制一行, LR1~LR16 是点阵屏的列驱动信号,每一个信号控制一列。
当行信号为高电平而列信号为低电平,对应的LED 就会亮。
2,S3C2410与点阵屏的连接LL1 LL8LL7LL9图2 S3C2410ARM处理器与两片CD4094连接得到16位行选信号图以上电路可以通过S3C2410GPIO口把CPU的并行数据(16位两个字节的数据)打入到两个CD4094芯片中并锁存起来变成LL1-LL16的行选信号。
各信号的作用如下表1;3.点阵屏的保护电路图3 点阵屏的保护电路图为了保护LED 屏加了对应的电阻实现行限流作用,即LL1-LL16变为RQ1-RQ164.LED 的驱动加入行驱动电路的目的是实现LED 灯的驱动。
这样由RQ1-RQ16变为行驱动信号QL1-QL16。
Q11-QL16为图1中的行驱动信号。
图4 行驱动电路【设计思路】采用的数据结构、主要的函数说明、程序流程设计图等主要的函数说明:led_init(); :LED显示矩阵初始化static void refresh_l_display_array(u8 bits, u8 *str) :显示字符void led_logo_disp(void) :显示logostruct fonts_struct {unsigned char ascii_width;unsigned char ascii_height;unsigned char * ascii_code;unsigned char ascii_beg;unsigned char ascii_end;};【源程序清单】/******************************************************************************************** ** File:main.c* Author: embest* Desc:c main entry* History:*********************************************************************************************//*------------------------------------------------------------------------------------------*/ /* include files*//*------------------------------------------------------------------------------------------*/ #include "2410lib.h"#include "sys_init.h"#include "fonts.h"#include "led16x16.h"/******************************************************************************************** ** name: main* func: c code entry* para: none* ret: none* modify:* comment:********************************************************************************************* /int main(void){char c;sys_init(); // Initial systemwhile(1){uart_printf("\n Please Look At The 16X16 LEDS And Choose Key\n"); uart_printf("1、向左移动\n");uart_printf("2、向左闪烁移动\n");uart_printf("3、向右移动\n");uart_printf("4、向右闪烁移动\n");c=uart_getch();uart_printf("%c",c);led_init(); // Initial led diplayif(c=='1'){l_char_out(0,"^_^学号");left_out(0,"abcdef");}else if(c=='2'){l_flash_char_out(0,"^_^学号");left_out_flash(0,"abcdef");}else if(c=='3'){r_char_out(0,"^_^学号");right_out(0,"abcdef");}else if(c=='4'){r_flash_char_out(0,"^_^学号");right_out_flash(0,"abcdef");}}}/******************************************************************************************** ** File: Dotled.c* Author: embest* Desc: DotLed_Test* History:********************************************************************************************* //*------------------------------------------------------------------------------------------*/ /* include files*//*------------------------------------------------------------------------------------------*/ #include <stdio.h>#include "2410lib.h"#include "fonts.h"#include "led16x16.h"/*------------------------------------------------------------------------------------------*/ /* function declare*//*------------------------------------------------------------------------------------------*/ extern void led_char_disp(void);/*------------------------------------------------------------------------------------------*/ /* global variables*//*------------------------------------------------------------------------------------------*/ u8 l_display_array[2*16];u8 assic_buffer[3*16];/*======================================================= =====================================l_display_array:+-----+-----+| | || D | E || | |+-----+-----+A buffer data andB buffer data -->D buffer dataB buffer data andC buffer data -->E buffer dataassic_buffer:+-----+-----+-----+| | | || A | B | C |<---- update the C buffer and move the B buffer data to the A buffer | | | | and move the C buffer data to the B buffer data+-----+-----+-----+======================================================== ====================================*//******************************************************************************************** ** name: led_update* func: refresh the led display* para: none* ret: none* modify:* comment:********************************************************************************************* /static void led_update(void){int j = 20;while(j--){led_char_disp();}}/******************************************************************************************** ** name: l_display_scroll* func: shift the display* para: bits:the position str:point the buffer* ret: none* modify:* comment:********************************************************************************************* /static void refresh_l_display_array(u8 bits, u8 *str){u32 i;u32 remaining_bits = 8-bits;for(i=0;i<16;i++){l_display_array[2*i] = (*str<<bits) |(*(str+16)>>remaining_bits);l_display_array[2*(i+1)-1] = (*(str+16)<<bits) |(*(str+32)>>remaining_bits);str++;}}static void refresh_flash_display_array(u8 bits, u8 *str){u32 i;for(i=0;i<16;i++){l_display_array[2*i] = 0;l_display_array[2*(i+1)-1] =0;str++;}}/******************************************************************************************** ** name: l_display_scroll* func: scroll the display* para: str:point the buffer* ret: none* modify:* comment:********************************************************************************************* /static void l_display_scroll ( u8 *str ){int i;for(i=0;i<8;i++){refresh_l_display_array(i, str);led_update();}}static void l_flash_display_scroll ( u8 *str ){int i;for(i=0;i<8;i++){refresh_l_display_array(i, str);led_update();refresh_flash_display_array(i, str);led_update();}}static void r_display_scroll ( u8 *str ){int i;for(i=8;i>0;i--){refresh_l_display_array(i, str);led_update();}}static void r_flash_display_scroll ( u8 *str ) {int i;for(i=8;i>0;i--){refresh_l_display_array(i, str);led_update();refresh_flash_display_array(i, str);led_update();}}/******************************************************************************************** ** name: copy_data* func: copy data* para: dst:point the dest data src:points the source data* ret: none* modify:* comment:********************************************************************************************* /static void copy_data(u8 *dst, u8 *src, u32 size){while(size--)*(dst++) = *(src++);}/******************************************************************************************** ** name: refresh_assic_buffer* func: refresh buffer* para: str:points the new char* ret: none* modify:* comment:********************************************************************************************* /static void l_refresh_assic_buffer(u8 *str){copy_data(&assic_buffer[0], &assic_buffer[16],16);copy_data(&assic_buffer[16], &assic_buffer[32],16);copy_data(&assic_buffer[32], str,16);l_display_scroll(assic_buffer);}static void l_flash_refresh_assic_buffer(u8 *str){copy_data(&assic_buffer[0], &assic_buffer[16],16);copy_data(&assic_buffer[16], &assic_buffer[32],16);copy_data(&assic_buffer[32], str,16);l_flash_display_scroll(assic_buffer);}static void r_refresh_assic_buffer(u8 *str){copy_data(&assic_buffer[32], &assic_buffer[16],16);copy_data(&assic_buffer[16], &assic_buffer[0],16);copy_data(&assic_buffer[0], str,16);r_display_scroll(assic_buffer);}static void r_flash_refresh_assic_buffer(u8 *str){copy_data(&assic_buffer[32], &assic_buffer[16],16);copy_data(&assic_buffer[16], &assic_buffer[0],16);copy_data(&assic_buffer[0], str,16);r_flash_display_scroll(assic_buffer);}/******************************************************************************************** ** name: char_out* func: display the chars* para: font:0 str:points of the chars* ret: none* modify:* comment:********************************************************************************************* /void l_char_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = fonts[font].ascii_code + ( glyph - fonts[font].ascii_beg) *fonts[font].ascii_height;l_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}void l_flash_char_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = fonts[font].ascii_code + ( glyph - fonts[font].ascii_beg) * fonts[font].ascii_height;l_flash_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}void r_char_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = fonts[font].ascii_code + ( glyph - fonts[font].ascii_beg) * fonts[font].ascii_height;r_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}void r_flash_char_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = fonts[font].ascii_code + ( glyph - fonts[font].ascii_beg) * fonts[font].ascii_height;r_flash_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}void left_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = leftcode[font].ascii_code + ( glyph - leftcode[font].ascii_beg) * leftcode[font].ascii_height;l_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}void left_out_flash(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = leftcode[font].ascii_code + ( glyph - leftcode[font].ascii_beg) * leftcode[font].ascii_height;l_flash_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}void right_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = rightcode[font].ascii_code + ( glyph - rightcode[font].ascii_beg) * rightcode[font].ascii_height;r_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}void right_out_flash(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = rightcode[font].ascii_code + ( glyph - rightcode[font].ascii_beg) * rightcode[font].ascii_height;r_flash_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}/******************************************************************************************** ** name: led_init* func: initial the led display* para: none* ret: none* modify:* comment:********************************************************************************************* /void led_init(void){rGPBCON = rGPBCON & 0xfff0ff | 0x500; // GPB4,GPB5=01:Output rGPCCON = rGPCCON & 0xffff3ffc | 0x4001; // GPC0,GPC7=01:Output rGPDCON = rGPDCON & 0xffcfffff | 0x100000; // GPD10=01:OutputrGPGCON = rGPGCON & 0xfffcffff | 0x10000; // GPG8=01:Output}/******************************************************************************************** ** File: fonts.c* Author: embest* Desc: DotLed_Test* History:********************************************************************************************* //*------------------------------------------------------------------------------------------*/ /* include files*//*------------------------------------------------------------------------------------------*/ #include "fonts.h"// ------------------ ASCII字模的数据表------------------------ //unsigned char nAsciiDot[] = // ASCII{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18, // -!-0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00, // -"-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0xFE,0x6C,0x6C, // -#-0x6C,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00,0x18,0x18,0x7C,0xC6,0xC2,0xC0,0x7C,0x06, // -$-0x86,0xC6,0x7C,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC2,0xC6,0x0C,0x18, // -%- 0x30,0x60,0xC6,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x6C,0x6C,0x38,0x76,0xDC, // -&- 0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00, // -'- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x30,0x30,0x30,0x30, // -(- 0x30,0x30,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x18,0x0C,0x0C,0x0C,0x0C, // -)- 0x0C,0x0C,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x3C,0xFF, // -*- 0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E, // -+- 0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -,- 0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE, // --- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -.- 0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x0C,0x18, // -/- 0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xCE,0xD6,0xD6, // -0- 0xE6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18, // -1- 0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x06,0x0C,0x18,0x30, // -2- 0x60,0xC0,0xC6,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x06,0x06,0x3C,0x06, // -3- 0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC,0xFE, // -4- 0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC,0x0E, // -5- 0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x60,0xC0,0xC0,0xFC,0xC6, // -6- 0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xC6,0x06,0x06,0x0C,0x18, // -7- 0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,0xC6, // -8- 0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7E,0x06, // -9- 0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00, // -:-0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00, // -;- 0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60, // -<- 0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00, // -=- 0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06, // ->- 0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0x0C,0x18,0x18, // -?- 0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xDE,0xDE, // -@- 0xDE,0xDC,0xC0,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE, // -A- 0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x66, // -B- 0x66,0x66,0x66,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xC0, // -C- 0xC0,0xC2,0x66,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x6C,0x66,0x66,0x66,0x66, // -D- 0x66,0x66,0x6C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68, // -E- 0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68, // -F- 0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xDE, // -G- 0xC6,0xC6,0x66,0x3A,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xC6, // -H- 0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18, // -I- 0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x0C,0x0C,0x0C,0x0C,0x0C, // -J- 0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0xE6,0x66,0x6C,0x6C,0x78,0x78, // -K- 0x6C,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x60,0x60,0x60,0x60,0x60, // -L- 0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xEE,0xFE,0xFE,0xD6,0xC6, // -M- 0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xE6,0xF6,0xFE,0xDE,0xCE, // -N- 0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0xC6, // -O- 0xC6,0xC6,0x6C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x60, // -P-0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6, // -Q- 0xC6,0xD6,0xDE,0x7C,0x0C,0x0E,0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x6C, // -R- 0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0x60,0x38,0x0C, // -S- 0x06,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x7E,0x5A,0x18,0x18,0x18, // -T- 0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6, // -U- 0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6, // -V- 0xC6,0x6C,0x38,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6, // -W- 0xD6,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0x6C,0x6C,0x38,0x38, // -X- 0x6C,0x6C,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18, // -Y- 0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xC6,0x86,0x0C,0x18,0x30, // -Z- 0x60,0xC2,0xC6,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30, // -[- 0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38, // -\- 0x1C,0x0E,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C, // -]- 0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00,0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00, // -^- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -_- 0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00, // -`- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x0C,0x7C, // -a- 0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x60,0x60,0x78,0x6C,0x66, // -b- 0x66,0x66,0x66,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC0, // -c- 0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x0C,0x0C,0x3C,0x6C,0xCC, // -d- 0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xFE, // -e- 0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x6C,0x64,0x60,0xF0,0x60, // -f-0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC, // -g- 0xCC,0xCC,0xCC,0x7C,0x0C,0xCC,0x78,0x00,0x00,0x00,0xE0,0x60,0x60,0x6C,0x76,0x66, // -h- 0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18, // -i- 0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06, // -j- 0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0xE0,0x60,0x60,0x66,0x6C,0x78, // -k- 0x78,0x6C,0x66,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18, // -l- 0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0xFE,0xD6, // -m- 0xD6,0xD6,0xD6,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66, // -n- 0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6, // -o- 0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66, // -p- 0x66,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC, // -q- 0xCC,0xCC,0xCC,0x7C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x76,0x62, // -r- 0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x60, // -s- 0x38,0x0C,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x30,0xFC,0x30,0x30, // -t- 0x30,0x30,0x36,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC, // -u- 0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66, // -v- 0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6, // -w- 0xD6,0xD6,0xFE,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x6C,0x38, // -x- 0x38,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6, // -y- 0xC6,0xC6,0xC6,0x7E,0x06,0x0C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xCC,0x18, // -z- 0x30,0x60,0xC6,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18, // -{- 0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18, // -|-0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18, // -}-0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xDC,0x00,0x00,0x00,0x00, // -~- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};unsigned char left[] = // ASCII,左移{字模软件提取即可};unsigned char right[] ={字模软件提取即可};struct fonts_struct fonts[FONT_COUNT] = {{8,16,nAsciiDot,' ','~'},};struct fonts_struct leftcode[FONT_COUNT] = {{8,16,left,'a','~'},};struct fonts_struct rightcode[FONT_COUNT] = {{8,16,right,'a','~'},};/******************************************************************************************** ** File: Dotled.c* Author: embest* Desc: DotLed_Test* History:********************************************************************************************* //*------------------------------------------------------------------------------------------*/ /* include files*//*------------------------------------------------------------------------------------------*/ #include "2410lib.h"#include "ziku.h"#include "fonts.h"#include "led16x16.h"/*------------------------------------------------------------------------------------------*/ /* constant define*//*------------------------------------------------------------------------------------------*/ #define En_Dataout rGPBDAT |= 0x20#define DisEn_Dataout rGPBDAT &= 0xFFDF#define CLK_H rGPDDAT |= 0x400#define CLK_L rGPDDAT &= 0xFBFF#define Rdata_H rGPCDAT |= 0x1#define Rdata_L rGPCDAT &= 0xFFFE#define Ldata_H rGPCDAT |= 0x1#define Ldata_L rGPCDAT &= 0xFFFE#define Lstr_H rGPBDAT |= 0x10#define Lstr_L rGPBDAT &= 0xFFEF#define Rstr_H rGPGDAT |= 0x100#define Rstr_L rGPGDAT &= 0xFEFF/*------------------------------------------------------------------------------------------*/ /* global variables*//*------------------------------------------------------------------------------------------*/ INT8T cT emp;INT8T cEnChange0,cEnChange1;UINT8T dispram[32];/******************************************************************************************** ** name: write_L4094* func: write list data* para: none* ret: none* modify:* comment:********************************************************************************************* /void write_L4094(UINT16T data){UINT8T i;Lstr_H;for(i=0;i<16;i++){CLK_L;if(data & 0x01==1)Ldata_H;elseLdata_L;data = data >> 1;CLK_H;}Lstr_L;}/******************************************************************************************** ** name: write_R4094* func: write row data* para: none* ret: none* modify:* comment:********************************************************************************************* /void write_R4094(UINT8T data){UINT8T i;Rstr_H;for(i = 0; i < 8; i++){CLK_L;if(data & 0x01==1)Rdata_H;elseRdata_L;data = data >> 1;CLK_H;}Rstr_L;}/******************************************************************************************** ** name: led_char_disp* func: led char display* para: none* ret: none* modify:* comment:********************************************************************************************* /void led_char_disp(void){UINT8T i=0;UINT8T j=2,k=0;UINT16T x;for(i = 0; i < 32; i++)dispram[i] = ~l_display_array[i];i=0;while(i < 16){Rstr_L; // Enable RSTRLstr_L; // Enable LSTRDisEn_Dataout; // lock the datado { // Write the row data j--;write_R4094(dispram[i * 2 + j]);}while(j);x=~(0x8000 >> i); // Write one list datawrite_L4094(x);En_Dataout; // Output the datafor(k = 0;k < 250; k++);i++;j = 2;}}【设计总结】通过这次嵌入式课程设计,我对嵌入式有了更深一层的理解。
嵌入式实验报告学院专业班级学号姓名指导教师(2010年6月)计算机学院软件工程专业班_____组学号姓名协作者教师评定实验一:ARM 调试环境和ADS的使用一、实验目的:了解ARM系统的基本开发环境和手段,建立调试系统和ADS编译系统使用方法和技巧。
二、实验内容和要求●设备连接方法●启动服务器软件●调试系统的配置●学习编辑编译程序●学习调试方法三、实验主要仪器设备和材料嵌入式系统实验箱,微机,四、实验方法、步骤及结构测试1.设备连接:上电时注意观察指示灯状态,ProbeICE-ARM 上设有三个指示灯,分别是:CFG(配置)、Busy(工作中)、PWR(电源)。
在ProbeICE-ARM 在供电正确、内部电路工作正常时,三个指示应是:CFG:闪烁,表明配置正确Busy:灭,表明仿真器处于空闲态。
仿真器工作时(比如程序下载)闪烁PWR:常亮,表明供电正确注意:务必在断电情况下连接ProbeICE-ARM 和目标板。
带电插拔可能会对仿真器造成永久损害!请使用仿真器配套的专用直流电源,其他电源可能导致意想不到的问题出现!2.启动服务器软件使用ProbeICE-ARM 仿真器之前须安装服务器(Server)和调试环境(ADS1.2 或SDT251)。
ProbeICE-ARM 使用与Multi-ICE 2.2 兼容的服务器软件ProbeICE-Server。
请按以下步骤启动和使用ProbeICE-Server:启动:从Windows 开始菜单中选择ProbeICE-Server 启动,或从服务程序安装目录中直接启动。
配置:从主菜单File →Auto-configure。
如果连接和配置正常,会有相应的ARM 内核提示信息,出现如图所示的画面,表明服务器已经识别目标板ARM 内核并作好准备为它服务了。
现在您可以启动调试软件开始调试了。
如果没有成功,就在File菜单中重新装载配置文件2410.CFG3.启动ADS调试开发环境运行软件ARM Developer Suit v1.2----CodeWarrior ARMDeveloper Suit4.新建项目:激活File菜单的New项,输入项目名称,选择项目存盘路径。
嵌入式实习报告嵌入式实习报告(精选5篇)在生活中,报告的用途越来越大,我们在写报告的时候要注意逻辑的合理性。
相信许多人会觉得报告很难写吧,以下是店铺精心整理的嵌入式实习报告(精选5篇),希望对大家有所帮助。
嵌入式实习报告篇1一、实习时间20xx年4月12日-20xx年4月26日二、指导教师姓名陈xx三、实习地点长沙市牛耳服务外包实训基地四、实习目的与内容对于嵌入式项目进行学习培训,掌握嵌入式的主要项目及相关技术五、实习收获与体会一转眼半个月的实习生活过去了,现在我已经回到学校,回想起半个月的实习生活,自己学到了很多,懂得了很多。
真的说不出是什么感觉,伴着时间,就像是在和自己的影子赛跑,不可能从真实的两面去看清它,只是经意不经意的感受着有种东西在过去,也许更适合的只有那句话:时不待我,怎可驻足。
原以为实习对于我来说会是很长,但实际却不同。
想象收获的东西,真的很多,看看我的工作笔记,一篇又一篇,记别人的事情比自己的还多,也许实习,并不像我想象中的那样轻松惬意,而是充满了挑战和艰辛。
我给自己敲响了警钟:“不要半途而废,做事情切忌三分热度。
”我信心十足的回答到:“我一定会坚持到底!”天下英雄皆我辈,一入江湖立马催。
” 从学校到社会的大环境的转变,身边接触的人也完全换了角色,老师变成老板,同学变成同事,相处之道完全不同。
在这巨大的转变中,我们可能彷徨,迷茫,无法马上适应新的环境,但在同学、同事的帮助和自己摸索的情况下,我还是完成了这次实习。
但我发现,以我们的经验,不学到一定的深度和广度是难以在实际工作中应付自如的。
因此反映出学习的还不够,缺点疏漏。
需在加以刻苦钻研及学习,不断开拓视野,增强自己的实践操作技能,我们也许看不惯企业之间残酷的竞争,无法忍受同事之间漠不关心的眼神和言语。
很多时候觉得自己没有受到领导重用,所干的只是一些无关重要的杂活,自己的提议或工作不能得到老板的肯定。
做不出成绩时,会有来自各方面的压力,老板的眼色同事的嘲讽。
嵌入式实训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。