首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

嵌入式项目实训高级教程

嵌入式项目实训高级教程

学的再多也是为了实践,学习中勤于动手才是一种好习惯,下面我介绍个例子,无论是初学嵌入式的还是已经有基础的都可以自己动手实践一下。
    实训一:华容道游戏。
   如图:
   
  游戏功能:屏幕中央为游戏界面,相当于一个棋盘。棋盘中的各个棋子咀历史人物命名,大小不一,都可以移动。棋盘边界的最下方有一缺口,通过移动各个棋子,最终将曹操棋子移到该缺口即获得胜利。可按“确定’’键进行移动。LED显示所移动的步数,当同一棋子连续移动时,步数不进行累加。
    在界面的右方有人物头像显示,该图像随着选择的当前棋子的变化而做相应的变化。
    本游戏提供“横刀立马”和“天罗地网”两种初始棋子布阵,在游戏的开始、结束或
游戏的过程中可以按“5”键选择“横刀立马”布阵;按“o”键选择“天罗地网”布阵。
  代码实现:
   任务的定义、实现以及主要模块

1
Main- Task任务


主任务程序:接收键盘消息


void Main_Task (void*idj )
/Main_res t_Task

{


POSMSG pMsg=0;

Is_worktime=TRUE;
for《;;){

pMsg=WaitMessage(o}j
//等待消息

switch (pMsg->Message){


case OSM- KEY:


onKey{ pMsg- >WParam, pMsg->L Pa ram)j


break;


OSTimeDly (1000)


)

2Dynamic_Display_Task任务

OS_STE
Dynarnic_Di splay_Stack[ STACKSIZE*8
={0,
);


void
Dynamic_Displ ay_Task{ void
*Id)i

  } def ine
Dy namic _Di splay_Task_Pri0
61

  该任务实现移动步数的实时LED显示。
3Key_Scan Task任务
  实现键盘扫描,判断键值,以调用不同的函数。
4Tag_Glint_Task任务

OS_S'TK
Tag_Glinc_Scack[ STACKSIZE*8]=
(口,);

void
Tag_Glint_Taok{void*id)j


#define Tag_Glint_Pri0
40

  彦任务实现所选棋子的闪烁任务。
  5.使用的函数
  初始化界面函数:initdrawimagc0
  重新开始辩戏:restartgame0
  切换布局函数:restartgame20
  刿断新对象坐标函数:tag_direction(int tagdirection_left int tagdirection_up)
  移动对象函数:move0
  绘图函数:
void MoveTo(PDC pdc* int x
int y);

void LineTo(PDC pdc, int x,int y);


void FiIIRect(PDC pdc, int lefXint top ,int right, rnt bottom,U32 DrawMode,


U32 color);


U8 SettPenWidth(PDC pdc);


U32 GetPenMode(PDC pdc);


U32 SetPenColor(PDC pdc, U32 color);


void ShowBmp(PDC pdc, char filename[l, int x,int y);

在这个程序写完后,调试肯定会出现许多问题,发现问题的大家可以自己动手再调试一下
返回列表