历史上的今天
返回首页

历史上的今天

今天是:2024年10月12日(星期六)

正在发生

2019年10月12日 | 基于ARM平台的钢琴游戏 实现琴键按下效果

2019-10-12 来源:eefocus

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

2,编译这些代码:
   make

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

4,修改piano.c,使得钢琴12个琴键均能按下去。
0.png?imageView2/2/w/550 

单片机源程序如下:

  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

  16. #include

  17. #include

  18. #include

  19. #include

  20. #include

  21. #include

  22. #include


  23. #include

  24. #include

  25. #include

  26. #include

  27. #include


  28. #include

  29. #include

  30. #include


  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?imageView2/2/w/550)

  46.         bmp2lcd("background.bmp?imageView2/2/w/550", FB, &vinfo, 0, 0);


  47.         //    4.2 显示标题栏(bar.bmp?imageView2/2/w/550)

  48.         bmp2lcd("bar.bmp?imageView2/2/w/550", FB, &vinfo, 0, 0);


  49.         //    4.3 显示12个琴键(bar.bmp?imageView2/2/w/550)

  50.         int i;

  51.         for(i=0; i<12; i++)

  52.         {

  53.                 bmp2lcd("key_off.bmp?imageView2/2/w/550", FB, &vinfo, 10+65*i, 47);

  54.         }


  55.         //    4.4 显示LOGO(logo.bmp?imageView2/2/w/550)

  56.         bmp2lcd("logo.bmp?imageView2/2/w/550", 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?imageView2/2/w/550", 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?imageView2/2/w/550", 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 


推荐阅读

史海拾趣

BLT Circuit Services公司的发展小趣事

随着公司实力的不断增强,BLT Circuit Services开始积极拓展国内外市场。公司积极参加各类行业展会,与国内外同行进行深入交流与合作,不断提升公司的知名度和影响力。同时,公司还根据市场需求调整产品策略,推出了一系列符合市场需求的新产品,进一步扩大了市场份额。

HBH-Microwave公司的发展小趣事

为了加速全球化进程,HBH-Microwave积极寻求与国际知名企业的合作。通过技术交流和联合研发,HBH与多家跨国公司建立了长期稳定的合作关系。这些合作不仅为公司带来了先进的技术和管理经验,也帮助HBH的产品成功打入国际市场,实现了销售额的快速增长。同时,HBH还通过参加国际展会和研讨会,不断提升品牌知名度和行业影响力。

Extech公司的发展小趣事

为了响应国家振兴制造业的号召,培养优秀的数字化设计与制造技术人才,Extech公司在近年来启动了“PLM China”计划。该计划面向全国高校提供价值1000万人民币的软件支持,旨在与教育行业携手合作,共同提升中国制造业的整体设计研发水平。通过这一计划的实施,Extech公司不仅展现了自己的社会责任感,也为中国制造业的发展做出了积极的贡献。

以上五个故事分别从不同角度展现了Extech公司在电子行业中的发展历程和成就。通过持续的创新和努力,Extech公司已经成为了一家在制造业信息化领域具有重要影响力的企业。

ET Enterprises Ltd公司的发展小趣事

近年来,ET Enterprises Ltd公司经历了一系列的收购和战略合作。这些举措不仅进一步增强了公司的实力和市场地位,也为公司的未来发展注入了新的活力。例如,公司成为得克萨斯州Ludlum Measurements Inc.的子公司后,受益于美国光电倍增管生产商ADIT的生产设施和ET Enterprises的开发设施的综合资源,为公司的持续发展提供了有力支持。

以上五个故事概述了ET Enterprises Ltd公司的发展历程和关键阶段,展示了公司在电子行业中不断崛起和持续发展的过程。

Analogic Corporation公司的发展小趣事

ET Enterprises Ltd公司的历史可以追溯到1930年代,当时它作为EMI公司的一部分,开始涉足光检测技术领域。在这个早期阶段,公司致力于研究光信号的特性及其检测方法,为后续的光电倍增管技术奠定基础。

德力康(DLK)公司的发展小趣事

DLK公司一直将技术创新作为企业发展的核心驱动力。公司拥有一支高素质的研发团队,不断投入大量资金进行技术研发和产品创新。通过引进先进的生产设备和技术,结合自主研发,DLK公司成功开发出了一系列具有自主知识产权的连接器产品。这些产品不仅具有更高的性能和更稳定的品质,而且能够满足不同客户的个性化需求。技术创新使DLK公司在激烈的市场竞争中保持了领先地位。

问答坊 | AI 解惑

PLC主板加扩展模块实现优越组合

功能介绍: ○ 编程软件兼容日本三菱FXGP_WIN-C梯形图软件,在应用中相当于三菱的FX1N; ○ 工作电源AC18V或DC24V,带有防雷击保护电路; ○ 主板有20路I/0输入输出,其中输入12路,输出8路(有继电器输出和晶体管输出两种型号); ○ 本机采用高 ...…

查看全部问答>

求救:光耦隔离,电阻的阻值怎么计算啊?

我想用光耦隔离 输入信号, 当 VInput 为高电平时,光耦截止,Voutput输出高电平, 当 VInput 为低电平时,光耦导通,Voutput输出低电平, 光耦用的是 TLP521, 请教 R1,R2的阻值怎么计算?谢谢啊!!! datasheet看不太懂,各位大侠帮帮忙啊 ...…

查看全部问答>

WinCE 6.0短信截获

最近要做魅族M8短信截获功能,有什么方法可以实现啊,我看了M8机器上没有cemapi.dll所以使用cemapi和mapirule都不可以,还有什么其他的方法可以实现啊,谢谢!…

查看全部问答>

"抽象窗口系统"和“C++ To C编译器”

本人预售\"抽象窗口系统\"和“C++ To C编译器”软件,又需要的朋友请联系QQ:29600731…

查看全部问答>

着急!!Wince OS调用GetDiskFreeSpaceEx为什么返回值为零?

_ULARGE_INTEGER freespace,totalspace,userspace; if(::GetDiskFreeSpaceEx(_T(\"SD Memory Card:\\\\\"),&userspace,&totalspace,&freespace)==FALSE); { GET_STRING(TARMS_XXX, _T(\"SDCard Not Available\")) } ..... 总之我的SD卡是存在 ...…

查看全部问答>

wince 下 LoadImage failed....

我在VS2005下编写wince程序,加载一幅位图,失败了. hbitmap=(HBITMAP)::LoadImage(g_hInst,L\"Wallpaper1.bmp\",IMAGE_BITMAP,0,0,0); nErr    = GetLastError();//  …

查看全部问答>

Verilog 模拟 PS2

  1.明确接线关系,只需接4根线,VCC要 5V,3.3我测试过不能用,时钟和数据线要用bidir双向口线,FPGA可以不用外接上拉电阻。另外,USB键盘也可以用,只要用一个转接头转成PS2即可。 2.读取基本的键盘数据,不需要FPGA发送任何数据, ...…

查看全部问答>

stm8s207的AD是不是有bug??

我在使用AD时发现一个问题,AD在采样时,该通道居然有2V的电平输出,我已经断开了外围电路,AIN2只有一个电阻到地,应该是0V,我用示波器看到口线居然是200us左右的脉冲,高电平正好是采样期间,问题是,同样的software,有的板子OK,有的不 ...…

查看全部问答>

ubuntu下修改内核发生“ncurses libraries“错误(解决方法)

BSEC@bsec-server:~/kernel/Kernel$ make menuconfig  HOSTCC  scripts/basic/fixdep  HOSTCC  scripts/basic/docproc  HOSTCC  scripts/basic/hash  HOSTCC  scripts/kconfig/conf.oscripts/kconfig/conf ...…

查看全部问答>