单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:4918|回复:1
打印上一主题下一主题

基于ARM平台的钢琴游戏 实现琴键按下效果

[复制链接]
跳转到指定楼层
楼主
ID:222305发表于 2017-7-25 15:29|只看该作者|只看大图回帖奖励
效果文件都在文件里,可以下载看看。很全,有兴趣就了解下。。

本阶段任务与步骤
================
1,设置好共享文件夹

2,编译这些代码:
   make

3,将编译好的示例程序piano丢到开发板,观察运行效果
   注意:要将所有的bmp文件也要上传到开发板(已经上传过了就不用重复上传了)

4,修改piano.c,使得钢琴12个琴键均能按下去。


单片机源程序如下:
  1. /***********************************************
  2. //
  3. //  Copyright(C), 2013-2016, GEC Tech. Co., Ltd.
  4. //
  5. //  作者: 林世霖
  6. //  微信公众号:秘籍酷
  7. //  日期: 2016-6
  8. //
  9. //  描述: 在LCD上显示音乐钢琴的界面
  10. //
  11. //  GitHub: github.com/vincent040
  12. //  Bug Report: 2437231462@qq.com
  13. //
  14. ***********************************************/

  15. #include< stdio.h>
  16. #include< signal.h>
  17. #include< stdlib.h>
  18. #include< unistd.h>
  19. #include< string.h>
  20. #include< syslog.h>
  21. #include< errno.h>
  22. #include< linux/input.h>

  23. #include< fcntl.h>
  24. #include< sys/types.h>
  25. #include< sys/stat.h>
  26. #include< sys/mman.h>
  27. #include< stdbool.h>

  28. #include< linux/fb.h>
  29. #include< sys/mman.h>
  30. #include< sys/ioctl.h>

  31. #include "bmp.h"
  32. #include "ts.h"

  33. int main(int argc, char const *argv[])
  34. {
  35.      // 1,打开LCD设备
  36.      int lcd = open("/dev/fb0", O_RDWR);

  37.      // 2,获取LCD设备的参数
  38.      struct fb_var_screeninfo vinfo;
  39.      ioctl(lcd, FBIOGET_VSCREENINFO,& vinfo);

  40.      // 3,为该LCD设备映射显存
  41.      unsigned char *FB;
  42.      FB = mmap(NULL, vinfo.xres * vinfo.yres * vinfo.bits_per_pixel/8,
  43.                      PROT_READ|PROT_WRITE, MAP_SHARED, lcd, 0);

  44.      // 4,显示整个钢琴的界面
  45.      //   4.1 显示背景(background.bmp)
  46.      bmp2lcd("background.bmp", FB,& vinfo, 0, 0);

  47.      //   4.2 显示标题栏(bar.bmp)
  48.      bmp2lcd("bar.bmp", FB,& vinfo, 0, 0);

  49.      //   4.3 显示12个琴键(bar.bmp)
  50.      int i;
  51.      for(i=0; i<12; i++)
  52.      {
  53.          bmp2lcd("key_off.bmp", FB,& vinfo, 10+65*i, 47);
  54.      }

  55.      //   4.4 显示LOGO(logo.bmp)
  56.      bmp2lcd("logo.bmp", FB,& vinfo, 214, 355);


  57.      // 5,打开触摸屏设备,开始音乐钢琴
  58.      int ts = open("/dev/event0", O_RDWR);
  59.      struct coordinate coor;

  60.      while(1)
  61.      {
  62.          // 5.1 等待手指触碰,并顺便获取触碰点坐标(coor.x和coor.y)
  63.          wait4touch(ts,& coor);

  64.          // 5.2 根据coor的坐标信息来更新琴键的状态
  65.          bmp2lcd("key_on.bmp", FB,& vinfo,(coor.x-10)/65*65+10, 47);

  66.          // 5.3 根据coor的坐标信息播放相应的琴键声音(暂时不做)
  67.         

  68.          // 5.4 等待手指的松开
  69.          wait4leave(ts);

  70.          // 5.5 将相应的琴键恢复弹起的状态
  71.          bmp2lcd("key_off.bmp", FB,& vinfo,(coor.x-10)/65*65+10,  47);
  72.      }
  73.     
  74.      return 0;
  75. }







  76.      // int ts = open("/dev/event0", O_RDWR);
  77.      // struct coordinate coor;

  78.      // while(1)
  79.      // {
  80.      //     // 5.1 等待手指触碰,并顺便获取触碰点坐标(coor.x和coor.y)
  81. ……………………

  82. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
06实现琴键按下效果.rar(10.25 KB, 下载次数: 38)


沙发
ID:453180发表于 2019-7-4 13:00|只看该作者
最好把仿真文件,程序文件都上传,文档中写的都不全

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网