资源简介
实现了bmp格式图像的显示。主要包括16bit 565图像的解码和显示。前翻、后翻触摸屏事件的实现。 需求设计
(1) 在ARM9平台上,实现液晶屏显示16位(R5 G6 B5)BMP彩色图像;
(2) 实现触摸屏的功能,利用触摸屏可以实现BMP图像“上一张”和“下一张”的轮换显示;
(3) BMP文件的解码函数的实现;
(4) 触摸屏功能的实现;
详细设计:
BMP文件的构成
(1) BMP文件可以看成4大块的内容:
(2) 位图文件头(bitmap-file header);
(3) 位图信息头(bitmapinformation-header);
(4) 色彩表(color table);
(5) 位图的字节阵列(即位图数据流);
(6) 如图1所示。
代码片段和文件信息
#include
#include
#include
#include
#include “msg.h“
#include “utils.h“
#include “key.h“
#include “keyboard.h“
#include “touch.h“
#include “seatimer.h“
#include “utils.h“
#include “graph.h“
#include “mainwindow.h“
#include “button.h“
#include “editbox.h“
#include “cvcfg.h“
#ifdef USING_CAL_DEMO
//以下是关于计算器几何形状的宏定义
#define NBTN 15 //按钮个数
#define H_TEXTBOX 40//30 //结果显示框的高度
#define W_TEXTBOX 200//148 //结果显示框的宽度
#define G_DIGIT_BUTTON 6//按键之间的空隙
#define W_DIGIT_BUTTON ((W_TEXTBOX - 2*G_DIGIT_BUTTON)/3)//按键的宽度
#define H_DIGIT_BUTTON H_PUSHBUTTON //按键的高度
#define DW_DIGIT_BUTTON ( W_DIGIT_BUTTON + G_DIGIT_BUTTON ) //按键加空隙的总长度
#define DH_DIGIT_BUTTON (H_DIGIT_BUTTON + G_DIGIT_BUTTON) //按键加空隙的总高度
//以下是按键编号1~9为数字按键1~9
#define ZERO 10 //0
#define PLUS 11 //加号
#define MINUS 12 //减号
#define EQUAL 13 //等于号
#define BACKSPACE 14 //退格键
#define CLEAR 15 //清除键
//以下是两个加数的区分号
#define ADDEND1 0
#define ADDEND2 1
//为了简化计算器输入、计算、结果处理等过程,OPSTATE枚举了计算器当前所处的状态
typedef enum _OPSTATE{
O_ADDEND1_BEGIN = 0 //开始输入第一个加数
O_ADDEND1_GETTING =1 //正在接收第一个加数的其他位
O_ADDEND2_BEGIN = 2 //开始输入第二个加数
O_ADDEND2_GETTING = 3 //正在接收第二个加数的其他位
O_CALCULATE= 4 //计算结果
}OPSTATE;//请大家想想每个状态是如何转换的?每个状态下对输入按键应如何响应?
//为了标记每个状态下的特征,DATASTATE枚举了可能的情况
enum DATASTATE
{
D_DIGIT_ONLY=0 //只能接收数字,在输入加数时先输入了符号,则接下来只能接收数字
D_NOMORE_ZERO=1 //输入的零无效,在开始输入一个数字时对个0只能当作一个0,例如000就是0
D_NOMORE_BS = 2 //退格删除时所有位都被删除了,则对再次输入退格键就无响应
D_BACKSPACE = 3 //接收到的是退格键
D_ALL //可以接收所有按键输入
};//这些标记对于加数的值和输入结果在显示框中更新很有用。
//_CState描述了计算器的状态数据,每个状态转换函数会对其数据进行修改
typedef struct _CState{
int state; //OPSTATE
int flag; //DATASTATE
int val[2]; //两个加数的值
int res; //结果的数字
char addend[2][12];//两个加数的字符数组
int index[2]; //加数的字符数组的索引
char result[12];//结果的加数的字符数组
char op[2]; //运算符
}CState;
//一下是函数原型声明
HSlot void onGetInput(Payload *pdint num);//按钮的槽响应函数,每个按钮是HButton类型控件,它有clicked信号,在按下后被触发。也就是说每个按钮按下后会调用此函数。
HSlot void onShowResult(Payload *pdint num);//每个按钮初始化后加入了updateResult(int key)信号。这个信号会触发onShowResult函数,执行状态转换
HSlot void onFile(Payload *pdint num); //文件菜单响应槽
//下面的三个函数处理每个状态下具体的细节,主要是对每个输入的按键后的响应。参数:state,状态参数;input,输入按钮的编号;key,按键的字符值;o,加数选择,指明操作第一个加数还是第二个。返回值:是否需要更新显示框
bool stateChangeStepOne(CState* stateint inputchar keyint o);
bool stateChangeStepTwo(CState* stateint inputchar keyint o);
bool stateChangeStepThree(CState* sint inputchar keyint o);
void updateResult(HWidget *txtbxCState *s);//更新结果显示框。
HLocal void getResult(CState *s); //根据状态数据计算结果
HLocal void cleanState(CState *s); //清除状态数据
//下面是初始化计算器,在窗口mwnd的xy位置,结果显示框为txtbx,按键为btns
bool initCalculator(HMainWindow *mwndHWidget*txtbxint nHButton btns[]int xint y);
HSlot void onGetInput(Payload *pdint num)
{
int kval;
object *key;
key = getObj(pd); //得到接收者对象指针,即connect函数中指定的接收者。例如,本程序中是连接到按钮本身,即指向按钮的指针
if(strcmp(key->name“+“) == 0) //每个按键的名字作为区分按键的标志。得到按钮编号。
kval = PLUS;
else if(strc
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2513012 2010-04-14 21:14 rtware_arm9\lib\sealib_arm9.a
文件 14408 2009-04-24 20:49 rtware_arm9\lib\2410init.o
文件 64 2009-08-30 22:14 rtware_arm9\lib\vssver.scc
文件 129 2009-04-02 16:43 rtware_arm9\docs\说明.txt
文件 48 2009-08-30 22:14 rtware_arm9\docs\vssver.scc
文件 165888 2010-03-30 08:54 rtware_arm9\docs\JPEG解码算法的详细分析.doc
文件 846848 2010-03-30 08:58 rtware_arm9\docs\HGUI的文本框设计.doc
文件 419328 2010-03-30 08:51 rtware_arm9\docs\HGUI的对话框设计.doc
文件 274 2009-04-02 14:50 rtware_arm9\build\scat.scf
文件 931 2000-11-05 02:28 rtware_arm9\build\reset.ini
文件 221993 2010-04-15 08:03 rtware_arm9\build\rtware_arm9.mcp
文件 96 2009-08-30 22:14 rtware_arm9\build\vssver.scc
文件 3450 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\CWSettingsWindows.stg
文件 48 2009-08-30 22:14 rtware_arm9\build\rtware_arm9_Data\vssver.scc
文件 69613 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\Debug\TargetDataWindows.tdt
文件 48 2009-08-30 22:14 rtware_arm9\build\rtware_arm9_Data\Debug\vssver.scc
文件 68239 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\Release\TargetDataWindows.tdt
文件 48 2009-08-30 22:14 rtware_arm9\build\rtware_arm9_Data\Release\vssver.scc
文件 139512 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\DebugRel\TargetDataWindows.tdt
文件 785832 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\DebugRel\rtware_arm9.axf
文件 64 2009-08-30 22:14 rtware_arm9\build\rtware_arm9_Data\DebugRel\vssver.scc
文件 64 2009-08-30 22:14 rtware_arm9\build\rtware_arm9_Data\DebugRel\rtware_arm9.bin\vssver.scc
文件 928 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\DebugRel\rtware_arm9.bin\ROM1
文件 366356 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\DebugRel\rtware_arm9.bin\ER_RO
文件 160 2009-08-30 22:14 rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
文件 35732 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
文件 91552 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
文件 114460 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
文件 30552 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
文件 35736 2010-04-15 08:03 rtware_arm9\build\rtware_arm9_Data\DebugRel\ob
............此处省略108个文件信息
相关资源
- 蓝桥杯CT117E嵌入式竞赛板省赛第十届
- 蓝桥杯CT117E嵌入式竞赛板省赛第五届
- 嵌入式实时操作系统μCOS-II邵贝贝.p
- 毕设题目:嵌入式数字示波器设计
- 任哲的《嵌入式实时操作系统ΜcOS-Ⅱ
- lcd_ok.zip
- 海康威视笔试题08、09、12、13年 dsp,
- 国嵌嵌入式linux培训全套实验代码
- 任哲嵌入式实时操作系统uCos-ii原理及
- 分布式嵌入式实时操作系统QNX
- 关于嵌入式系统的30篇论文
- 计算机组组成原理课程设计,设计一
- GBT28172-2011嵌入式软件质量保证要求
- 优秀毕业设计带论文和答辩ppt:智能
- STM32F10x中文教程及参考手册
- 时间触发嵌入式系统设计模式源码
- 任哲《嵌入式实时操作系统uCOS-II原理
- 一个月学会嵌入式开发STM32共23个PPT
- 电子科技大学微处理器系统与嵌入式
- 嵌入式stm32开发——基于红外的万能遥
- 一个嵌入式工程师的stm32开发日记
-
嵌入式系统设计em
bedded System Design - robocup机器人大赛——足球机器人
- 电子-复件实验15RTC模拟指针时钟实验
- arm32平台可用的x11vnc服务端应用
- 《计算方法》第二版 易大义
- 基于单片机的红外遥控发射接收解码
- 计算机三级嵌入式习题。一共十二套
- 如何编写一个WIFI驱动程序
- 嵌入式实时操作系统uCOS-II》(第二版
评论
共有 条评论