博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
嵌入式应用开发第三阶段
阅读量:4683 次
发布时间:2019-06-09

本文共 4341 字,大约阅读时间需要 14 分钟。

今天来设计一个项目:嵌入式智能娱乐影音系统

软件:vmwave虚拟机  ubuntu18.0系统  SecureCRT串口终端  tftpd64

硬件:基于ARM Cortex-A53芯片的6818开发板,4寸电容屏  rs232串口线  usb转串口线  电源线 网线

一、搭建项目框架

建一个文件夹project,存放多个.c文件负责各个模块功能的实现,创建一个.h文件,把所有用到的库函数放进去。创建一个project_set.c文件,存放lcd、触摸屏等各个模块都需用到的函数

 

本系统包含5个功能模块:游戏、音乐播放器、电子相册、语音识别、视频播放器

二、设计界面

用PS或画图工具设计界面如图所示

分辨率800*480,beijing.bmpbmp

 

 

6个图标功能分别为:关机、音乐播放器、视频播放器、游戏、电子相册 、语音识别

 

三、代码设计

设计思路:主函数写一个while循环判断触摸按下的位置,根据按下的图标执行对应的功能函数

3.1 每个功能模块都要用到触摸和lcd显示函数,将初始化函数写在project_set.c中

1、图片显示函数

2、LCD、触摸屏初始化函数

3、关机函数

4、读取触摸屏坐标函数

3.2 申请一个结构体,存放各种参数,放在.h文件,同时在每个函数声明此结构体是外部变量

typedef struct Pro_Inf

{

int lcd;//lcd文件描述符

int * mmap_star; //lcd 内存映射描述符

int ts;//触摸屏文件描述符

int x;//触摸点x坐标

int y;触摸点y坐标

struct input_event touch;//触摸按压值

}P_I;

3.3 主函数

1、初始化lcd、触摸屏

2、循环判断屏幕是否按下,根据按下位置执行对应函数

3、结束函数

  win10系统打开画图,打开主界面,勾上标尺和网格线,根据图标第一个像素点和最后一个像素点的x、y轴坐标写进触摸位置判断语句

(图片像素大小根据电容屏分辨率选择,4寸800*480,7寸1024*600,或者800*480的图片放在7寸电容屏上可以比例转换,x=touch.value*800/1024;y=touch.value*480/600;)

 

int main(){
Init_Pro();/*触摸屏按钮控制*/while(1){Get_Touch_Inf();if(xxx.touch.type == EV_KEY && xxx.touch.code == BTN_TOUCH && xxx.touch.value == 0) {if(xxx.x>644 && xxx.x<720 && xxx.y>300 && xxx.y<400) Picture_Player();//图片if(xxx.x>43 && xxx.x<121 && xxx.y>300 && xxx.y<400) Music_Player();//音悦台if(xxx.x>460 && xxx.x<550 && xxx.y>300 && xxx.y<400) Game();//游戏if(xxx.x>233 && xxx.x<323 && xxx.y>300 && xxx.y<400) Video_Player(); //影音if (xxx.x > 330 && xxx.x < 457 && xxx.y>150 && xxx.y < 300) Sound(); //语音if(xxx.x>46 && xxx.x<120 && xxx.y>10 && xxx.y<96) break; }}End_Pro();return 0;}

 

 

3.4 模块功能函数

1、功能图标界面显示

音乐播放器

实现按下图标跳到相应的界面:按下音悦台图标后,主函数执行Music_Player()函数用Display_Pic("/IOT/my/mp3.bmp", 0, 0);显示播放器的主界面图

while(1)循环判断触摸状态

按下退出图标后 break 跳出循环,return 0 返回主函数

#include "project.h"extern P_I xxx;int Music_Player(){    printf("启动音乐播放器!\n");    int t = 1;    while (t)    {        Display_Pic("/IOT/my/mp3.bmp", 0, 0); Get_Touch_Inf(); if (xxx.touch.type == EV_KEY && xxx.touch.code == BTN_TOUCH && xxx.touch.value == 0) { if (xxx.x > 674 && xxx.x < 727 && xxx.y>42 && xxx.y < 91)//退出按钮  { Display_Pic("/IOT/my/beijing.bmp", 0, 0); t = 0; } if (xxx.x > 326 && xxx.x < 461 && xxx.y>337 && xxx.y < 461)//播放按钮  { printf("播放音乐\n"); } if (xxx.x > 621 && xxx.x < 693 && xxx.y>371 && xxx.y < 427)//暂停按钮  { printf("暂停音乐\n"); } if (xxx.x > 326 && xxx.x < 461 && xxx.y>337 && xxx.y < 461)//继续按钮  { printf("继续播放音乐\n"); } if (xxx.x > 110 && xxx.x < 186 && xxx.y>365 && xxx.y < 429)//停止按钮  { printf("关闭音乐\n"); } } } return 0; }

 

 

 

视频播放器界面,游戏界面,电子相册界面,语音识别仿照音乐播放器

 

 

 

 

 

2、功能代码实现

以电子相册、语音识别为例

电子相册:

选几张图片,将位置放在指针数组里

char*pic[5]={ "/IOT/my/b.bmp","/IOT/my/k.bmp","/IOT/my/l.bmp","/IOT/my/lq.bmp","/IOT/my/pathname.bmp" };

设计3个图标,用于左翻,右翻和退出

#include "project.h"extern P_I xxx;char *pic[5] = { "/IOT/my/b.bmp","/IOT/my/k.bmp","/IOT/my/l.bmp","/IOT/my/lq.bmp","/IOT/my/pathname.bmp" };int Picture_Player(){    printf("启动电子相册!\n");    Display_Pic("/IOT/my/youxi.bmp", 0, 0);    int t = 1; int i = 0; while (t) { Display_Pic("/IOT/my/jiantou.bmp", 0, 182); Display_Pic("/IOT/my/jiantou1.bmp", 699, 182); Display_Pic("/IOT/my/tuichu.bmp", 719, 0); Get_Touch_Inf(); if (xxx.touch.value == 0) continue; if (xxx.touch.type == EV_KEY && xxx.touch.code == BTN_TOUCH && xxx.touch.value > 0) { if (xxx.x > 719 && xxx.y>0 && xxx.y < 80) { Display_Pic("/IOT/my/beijing.bmp", 0, 0); t = 0; } if (xxx.x > 0 && xxx.x < 100 && xxx.y>180 && xxx.y < 260) { i++; if (i >=4) i = 4; Display_Pic(pic[i], 0, 0); } if (xxx.x > 699 && xxx.y > 180 && xxx.y < 260) { i--; if (i <= 0) i = 0; Display_Pic(pic[i], 0, 0); } } } return 0; }

 

 

 

语音识别:

设计三个麦克风图标

 

 

按下图标后,创建一个线程,循环显示3个麦克风图标

按键离开后,返回主界面

#include "project.h"extern P_I xxx;void * Pic_Go(void * arg){    while (1)    {        usleep(50000);        Display_Pic("/IOT/my/1.bmp", 350, 178);        usleep(50000); Display_Pic("/IOT/my/2.bmp", 350, 178); usleep(50000); Display_Pic("/IOT/my/3.bmp", 350, 178); } return NULL; } int Sound() { printf("启动语音识别!\n"); pthread_t go_id; while (1) { Get_Touch_Inf(); if (xxx.touch.type == EV_KEY && xxx.touch.code == BTN_TOUCH && xxx.touch.value == 0)//  { pthread_cancel(go_id); Display_Pic("/IOT/my/beijing.bmp", 0, 0); break; } if (xxx.touch.type == EV_KEY && xxx.touch.code == BTN_TOUCH && xxx.touch.value > 0) { pthread_create(&go_id, NULL, Pic_Go, NULL); mask = 1; } } return 0; }

音乐播放器、视频播放器和游戏留到下一阶段,有兴趣可以关注我,定期更新干货

 

转载于:https://www.cnblogs.com/cyyz-le/p/11129084.html

你可能感兴趣的文章
JVM jstack 详解
查看>>
css初级代码
查看>>
ZFS(一):ZFS在Debian GNU/Linux上的安装
查看>>
layui
查看>>
CSS画出的图
查看>>
Windows Phone开发(4):框架和页
查看>>
测试准入准出标准
查看>>
区块链学习笔记01(基本介绍)
查看>>
[树形dp] 洛谷 P2634 聪聪可可
查看>>
JS 字符串切割成数组
查看>>
微信 小程序组件 转发
查看>>
MySQL 重命名数据库
查看>>
The version of SQL Server in use does not support datatype 'datetime2' 解决办法
查看>>
JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)...
查看>>
DSAPI多功能组件编程应用-HTTP监听服务端与客户端_指令版
查看>>
Java中的ReentrantLock和synchronized两种锁定机制的对比
查看>>
MySQL锁之二:锁相关的配置参数
查看>>
作品汇总和进度表
查看>>
2018-2019-1 20165301 《信息安全系统设计基础》第五周学习总结
查看>>
EF多个表映射
查看>>