资源简介
该项目基于arm开发板。 运用了linux的多线程,多进程, arm的LCD屏幕的图片显示和触摸屏控制功能,使用了
madplay进行音频播放。
该系统运行时会生成一条进程读取触摸屏的x,y和压力值数据,存储到共享内存里面。
进入系统时会显示一个主界面,通过读取共享内存的x,y数据检测到用户点击了钢琴图标后进入钢琴界面,点击钢琴
琴键时,会播放该琴键对应的琴音,由于开发板限制无法一次播放多个音频文件,所以在点击下一个琴键时,会使用
命令终止其他音频文件的播放。该程序还可以通过点击钢琴界面的按钮调整钢琴声音的大小。并支持滑动弹奏。
madplay进行音频播放。
该系统运行时会生成一条进程读取触摸屏的x,y和压力值数据,存储到共享内存里面。
进入系统时会显示一个主界面,通过读取共享内存的x,y数据检测到用户点击了钢琴图标后进入钢琴界面,点击钢琴
琴键时,会播放该琴键对应的琴音,由于开发板限制无法一次播放多个音频文件,所以在点击下一个琴键时,会使用
命令终止其他音频文件的播放。该程序还可以通过点击钢琴界面的按钮调整钢琴声音的大小。并支持滑动弹奏。
代码片段和文件信息
#include “common.h“
int show_bmp(int x int y const char *pathname);
int piano_get_xy(int *x int *y);
void key12(void);
void key11(void);
void key10(void);
void key9(void);
void key8(void);
void key7(void);
void key6(void);
void key5(void);
void key4(void);
void key3(void);
void key2(void);
void key1(void);
#define TOUCH 0
#define UP 1
#define DOWN 2
#define LEFT 3
#define RIGHT 4
int touch = 0;
int pressure;
int voice = -25; //-60 ~ 0
char buf[5];
int past_x = 0past_y = 0;
int key = 0;
int past_key = 0;
int main()
{
int mod = 0;
int xy;
int event;
pid_t pid;
pid_t pid0 = fork();
if(pid0 == 0)
{
int id = shmget(ftok(“.“ 1) 1024 IPC_CREAT|0777);
int *addr1 = shmat(id /* 共享内存的ID */
NULL/* 意味着让系统帮忙找到一处恰当的虚拟地址来映射 */
0 /* 意味着以可读可写的方式访问这块内存 */);
//1、打开event0文件
int ts_fd = open(“/dev/input/event0“ O_RDWR);
if(ts_fd == -1)
{
perror(“open event0 failed!“);
return -1;
}
struct input_event ts_buf;
bzero(&ts_buf sizeof(ts_buf));
while(1)
{
//2、阻塞(卡住等待手指触摸屏幕后),读取触摸屏数据-->每一次只能获取其中一种事件
read(ts_fd &ts_buf sizeof(ts_buf));
//3、分析处理触摸屏数据
//判断事件类型是否为触摸屏事件
if(ts_buf.type == EV_ABS)
{
//进一步判断事件类型是否为x轴事件
if(ts_buf.code == ABS_X)
{
x= ts_buf.value*800/1024 ;
}
//进一步判断事件类型是否为y轴事件
if(ts_buf.code == ABS_Y)
{
y= ts_buf.value*480/600;
}
*addr1 = x;
*(addr1 + 1) = y;
}
else if(ts_buf.type == EV_KEY)
{
if(ts_buf.code == BTN_TOUCH)
{
*(addr1 + 2) = ts_buf.value;
if(ts_buf.value == 0)
{
*addr1 = 0;
*(addr1 + 1) = 0;
}
}
}
}
}
/* pid_t pid2 = fork();
if(pid2 == 0)
{
int id = shmget(ftok(“.“ 1) 1024 IPC_CREAT|0777);
int *addr3 = shmat(id
NULL
0);
int key2;
int pressure2;
while(1)
{
key2 = *(addr3 + 3);
pressure2 = *(addr3 + 2);
if(key != past_key)
{
show_bmp(0 49 “/IOT/IO/piano_file/piano_bmp/background.bmp“);
switch(key2)
{
case 1:
show_bmp(0 49 “/IOT/IO/piano_file/piano_bmp/key.bmp“);
break;
case 2:
show_bmp(67 49 “/IOT/IO/piano_file/piano_bmp/k2.bmp“);
break;
case 3:
show_bmp(133 49 “/IOT/IO/piano_file/piano_bmp/k3.bmp“);
break;
case 4:
show_bmp(200 49 “/IOT/IO/piano_file/piano_bmp/k4.bmp“);
break;
case 5:
show_bmp(267 49 “/IOT/IO/piano_file/piano_bmp/k5.bmp“);
break;
case 6:
show_bmp(331 49 “/IOT/IO/piano_file/piano_bmp/k2.bmp“);
break;
case 7:
show_bmp(400 49 “/IOT/IO/piano_file/piano_bmp/k3.bmp“);
break;
case 8:
show_bmp(468 49 “/IOT/IO/piano_file/piano_bmp/k5.bmp“);
break;
case 9:
show_bmp(531 49 “/IOT/IO/piano_file/piano_bmp/k2.bmp“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-09-18 11:34 新建文件夹\
文件 1152056 2019-09-18 10:15 新建文件夹\background.bmp
目录 0 2019-09-18 11:32 新建文件夹\key_bmp\
文件 58088 2019-09-18 08:26 新建文件夹\key_bmp\k2.bmp
文件 58780 2019-09-18 08:27 新建文件夹\key_bmp\k3.bmp
文件 58780 2019-09-18 08:28 新建文件夹\key_bmp\k4.bmp
文件 57464 2019-09-18 08:28 新建文件夹\key_bmp\k5.bmp
文件 57176 2019-09-18 08:29 新建文件夹\key_bmp\k6.bmp
目录 0 2019-09-18 11:32 新建文件夹\key_on\
文件 58296 2019-09-18 08:50 新建文件夹\key_on\on1.bmp
文件 56056 2019-09-18 08:50 新建文件夹\key_on\on2.bmp
文件 56564 2019-09-18 08:51 新建文件夹\key_on\on3.bmp
文件 57256 2019-09-18 08:51 新建文件夹\key_on\on4.bmp
文件 56768 2019-09-18 08:52 新建文件夹\key_on\on5.bmp
文件 14346 2019-09-18 09:54 新建文件夹\piano.c
文件 19254 2019-09-16 14:50 新建文件夹\piano_app.bmp
目录 0 2019-09-18 11:32 新建文件夹\voice\
文件 25077 2011-05-29 13:46 新建文件夹\voice\1.mp3
文件 22987 2011-05-29 13:46 新建文件夹\voice\10.mp3
文件 23405 2011-05-29 13:46 新建文件夹\voice\11.mp3
文件 22987 2011-05-29 13:46 新建文件夹\voice\12.mp3
文件 22987 2011-05-29 13:46 新建文件夹\voice\2.mp3
文件 25077 2011-05-29 13:46 新建文件夹\voice\3.mp3
文件 25077 2011-05-29 13:46 新建文件夹\voice\4.mp3
文件 24659 2011-05-29 13:46 新建文件夹\voice\5.mp3
文件 23823 2011-05-29 13:46 新建文件夹\voice\6.mp3
文件 26749 2011-05-29 13:46 新建文件夹\voice\7.mp3
文件 23823 2011-05-29 13:46 新建文件夹\voice\8.mp3
文件 24241 2011-05-29 13:46 新建文件夹\voice\9.mp3
- 上一篇:国科大图像处理与分析 2018-2019回忆版
- 下一篇:梯控分析助手
相关资源
- 嵌入式系统/ARM技术中的基于嵌入式的
- Linux网络设备分析
- linux下为SD卡烧写uboot.bin的原理与方法
- linux音频播放和停止
- arm下图片显示,jpeg,bmp,png三种图片
- Linux下使用Qt+V4L2测试UVC相机
- linux设备驱动程序开发 第四版 源码
- dnw_ubuntu
- 基于ARM 实现简单的电子相册功能
-
fr
amebuffer显示图片 - DM9008 linux 驱动
- linux c select简单
- Lua中调用C函数
- Linux mpu6050驱动程序
- linux 配置文件读写C
- linux0.11内核源码
- linux进程监控和守护进程的程序
- rocky凝思操作系统ISO镜像刻录到U盘里
- linux按键测试,获取按键状态
- Linux基本命令操作实验报告
- 学习用4.0版Linux下Zynq的axitimer中断驱动
- ros的urdf机器人模型功能包
- ROS创建工作空间代码我写的博客配套
- Pycharm汉化解决不能设置的问题.zip
- 2020大数据面试题总汇
- STM32模拟SPi.rar
- Linux实验1_常用命令应用.doc
- 树莓派用I2C读取mpu9250代码
- pgilinux-2019-1910-x86-64.txt
- 56706-Linux驱动程序开发第2版源码
评论
共有 条评论