效果文件都在文件里,可以下载看看。很全,有兴趣就了解下。。
本阶段任务与步骤
================
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 <stdio.h>
- #include <signal.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
- #include <syslog.h>
- #include <errno.h>
- #include <linux/input.h>
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <sys/mman.h>
- #include <stdbool.h>
- #include <linux/fb.h>
- #include <sys/mman.h>
- #include <sys/ioctl.h>
- #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)
- bmp2lcd("background.bmp", FB, &vinfo, 0, 0);
- // 4.2 显示标题栏(bar.bmp)
- bmp2lcd("bar.bmp", FB, &vinfo, 0, 0);
- // 4.3 显示12个琴键(bar.bmp)
- int i;
- for(i=0; i<12; i++)
- {
- bmp2lcd("key_off.bmp", FB, &vinfo, 10+65*i, 47);
- }
- // 4.4 显示LOGO(logo.bmp)
- bmp2lcd("logo.bmp", 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", FB, &vinfo,(coor.x-10)/65*65+10, 47);
- // 5.3 根据coor的坐标信息播放相应的琴键声音(暂时不做)
-
- // 5.4 等待手指的松开
- wait4leave(ts);
- // 5.5 将相应的琴键恢复弹起的状态
- bmp2lcd("key_off.bmp", 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
(10.25 KB, 下载次数: 38)
|