历史上的今天
今天是:2024年10月12日(星期六)
2019年10月12日 | 基于ARM平台的钢琴游戏 实现琴键按下效果
2019-10-12 来源:eefocus
本阶段任务与步骤
================
1,设置好共享文件夹
2,编译这些代码:
make
3,将编译好的示例程序piano丢到开发板,观察运行效果
注意:要将所有的bmp文件也要上传到开发板(已经上传过了就不用重复上传了)
4,修改piano.c,使得钢琴12个琴键均能按下去。
单片机源程序如下:
/***********************************************
//
// Copyright(C), 2013-2016, GEC Tech. Co., Ltd.
//
// 作者: 林世霖
// 微信公众号:秘籍酷
// 日期: 2016-6
//
// 描述: 在LCD上显示音乐钢琴的界面
//
// GitHub: github.com/vincent040
// Bug Report: 2437231462@qq.com
//
***********************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "bmp.h"
#include "ts.h"
int main(int argc, char const *argv[])
{
// 1,打开LCD设备
int lcd = open("/dev/fb0", O_RDWR);
// 2,获取LCD设备的参数
struct fb_var_screeninfo vinfo;
ioctl(lcd, FBIOGET_VSCREENINFO, &vinfo);
// 3,为该LCD设备映射显存
unsigned char *FB;
FB = mmap(NULL, vinfo.xres * vinfo.yres * vinfo.bits_per_pixel/8,
PROT_READ|PROT_WRITE, MAP_SHARED, lcd, 0);
// 4,显示整个钢琴的界面
// 4.1 显示背景(background.bmp?imageView2/2/w/550)
bmp2lcd("background.bmp?imageView2/2/w/550", FB, &vinfo, 0, 0);
// 4.2 显示标题栏(bar.bmp?imageView2/2/w/550)
bmp2lcd("bar.bmp?imageView2/2/w/550", FB, &vinfo, 0, 0);
// 4.3 显示12个琴键(bar.bmp?imageView2/2/w/550)
int i;
for(i=0; i<12; i++)
{
bmp2lcd("key_off.bmp?imageView2/2/w/550", FB, &vinfo, 10+65*i, 47);
}
// 4.4 显示LOGO(logo.bmp?imageView2/2/w/550)
bmp2lcd("logo.bmp?imageView2/2/w/550", FB, &vinfo, 214, 355);
// 5,打开触摸屏设备,开始音乐钢琴
int ts = open("/dev/event0", O_RDWR);
struct coordinate coor;
while(1)
{
// 5.1 等待手指触碰,并顺便获取触碰点坐标(coor.x和coor.y)
wait4touch(ts, &coor);
// 5.2 根据coor的坐标信息来更新琴键的状态
bmp2lcd("key_on.bmp?imageView2/2/w/550", FB, &vinfo,(coor.x-10)/65*65+10, 47);
// 5.3 根据coor的坐标信息播放相应的琴键声音(暂时不做)
// 5.4 等待手指的松开
wait4leave(ts);
// 5.5 将相应的琴键恢复弹起的状态
bmp2lcd("key_off.bmp?imageView2/2/w/550", FB, &vinfo,(coor.x-10)/65*65+10, 47);
}
return 0;
}
// int ts = open("/dev/event0", O_RDWR);
// struct coordinate coor;
// while(1)
// {
// // 5.1 等待手指触碰,并顺便获取触碰点坐标(coor.x和coor.y)
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
所有资料51hei提供下载:
06实现琴键按下效果.rar
史海拾趣
|
功能介绍: ○ 编程软件兼容日本三菱FXGP_WIN-C梯形图软件,在应用中相当于三菱的FX1N; ○ 工作电源AC18V或DC24V,带有防雷击保护电路; ○ 主板有20路I/0输入输出,其中输入12路,输出8路(有继电器输出和晶体管输出两种型号); ○ 本机采用高 ...… 查看全部问答> |
|
我想用光耦隔离 输入信号, 当 VInput 为高电平时,光耦截止,Voutput输出高电平, 当 VInput 为低电平时,光耦导通,Voutput输出低电平, 光耦用的是 TLP521, 请教 R1,R2的阻值怎么计算?谢谢啊!!! datasheet看不太懂,各位大侠帮帮忙啊 ...… 查看全部问答> |
|
最近要做魅族M8短信截获功能,有什么方法可以实现啊,我看了M8机器上没有cemapi.dll所以使用cemapi和mapirule都不可以,还有什么其他的方法可以实现啊,谢谢!… 查看全部问答> |
|
着急!!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卡是存在 ...… 查看全部问答> |
|
我在VS2005下编写wince程序,加载一幅位图,失败了. hbitmap=(HBITMAP)::LoadImage(g_hInst,L\"Wallpaper1.bmp\",IMAGE_BITMAP,0,0,0); nErr = GetLastError();// … 查看全部问答> |
|
1.明确接线关系,只需接4根线,VCC要 5V,3.3我测试过不能用,时钟和数据线要用bidir双向口线,FPGA可以不用外接上拉电阻。另外,USB键盘也可以用,只要用一个转接头转成PS2即可。 2.读取基本的键盘数据,不需要FPGA发送任何数据, ...… 查看全部问答> |
|
我在使用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 ...… 查看全部问答> |




