嵌入式应用开发第三阶段

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

软件: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/11128524.html

时间: 2024-10-12 02:05:20

嵌入式应用开发第三阶段的相关文章

嵌入式应用开发第四阶段

一.需求分析 伴随着嵌入式技术.图像处理技术和无线网络传输技术的发展,传统模拟视频监控系统和基于PC的远程视频监控系统由于自身的不足,已经无法满足现代社会应用中不断涌现出来的新需求,于是基于嵌入式技术的无线网络数字视频监控系统就应因而生了.例如远程监控.远程教学.远程医疗诊断.远程购物.远程探视.电视电话会议等应用都迫切需要高质量的网络视频传输的支持.考虑到了所用的硬件设备大部分都已经具备和我们所学到的知识及本身的能力有限,选择基于rk3399的视频监控系统作为我们本次的课程设计题目是比较实际而

IOS开发--第三阶段--TabBarController(2)

     当把下图画圈的地方注释掉,则显示的效果如上面第二张图所示,此时为 self.title 所设置的内容,且该句代码也可写在[view Didlownded]中,反之为第一张图的效果

IOS开发--第三阶段--TabBarController(1)

UITabBarController 1. 创建若干个子视图控制器(它们是并列的关系) 2. 创建一个数组,将已创建的子视图控制器,添加到数组viewControllers中 3. 创建UITabBarController实例 4. tabBarController.viewControllers = viewControllers; 5. 添加到window的rootViewController中 UITabBarController是继承于UIViewController的

IOS开发--第三阶段--微博(4)(程序3)

在ZYSinaEngine中 声明一个实例方法 根据code请求accesstoken 拿到token后 告诉Controller拿到accesstoken 使用协议 因为是ZYSinaEngine想给别人传信息 所以在ZYSinaEngine中应该有一个委托对象属性 id<协议名> delegate 在ZYSinaEngine中写协议方法 并且在.m中使用代理对象调用协议方法 因为协议方法为可选方法 所以应加判断 代理对象是否存在且是否可以响应代理方法 TimeLineViewControl

IOS开发--第三阶段--微博(4)(程序1)

入口类方法中,用来布局主框架,如下图所示: 创建一个ViewController,在入口类中导入头文件,并创建其视图,并在入口类中再创建四个视图: 创建UITabBarController,将所创建的视图放入TabBarController的viewControllers中:

IOS开发--第三阶段--微博(8)(程序5)

主程序:

IOS开发--第三阶段--微博(4)(程序2)

设计思路: 按照MVC来设计代码 新建ZYLoginWebView继承于UIView 在ZYLoginWebView.h中添加webView属性 在ZYLoginWebView的初始化方法中 创建初始化webView 并添加 设置代理 导入协议 实现两个协议方法 重写layoutSubviews方法 方法中设置webView的frame 让webView加载请求 请求归M管 新建Model类ZYSinaEngine 在ZYSinaEngine类中添加加号方法(方便)authorizeReuqes

嵌入式应用开发第一阶段

奋斗中的linux开发初学者!转自陈佳乐! 本文主要讲如何搭建嵌入式开发环境以及文件传输到开发板的两种方式 一.准备开发环境 软件 SecureCRT  串口工具.tftpd64   tftp文件传输工具.vmware虚拟机+Ubuntu系统 硬件 rk3399开发板.7寸lcd屏.rs232串口线.usb转串口线.网线 1.1虚拟机安装ubuntu系统 虚拟机和ubuntu系统,微信关注软件安装管家  发送ubuntu即可获取文件和安装教程 1.2 设置虚拟机的共享文件夹 ==========

Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划)

Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统WEB 5.Sprint 3时间:12.09-12.18 重案组成员   姓名 学号 博客链接 Github链接 队长 黄冠锋 201406114134 http://www.cnblogs.com/hgf520/ https://github.com/crown999   卢利钦 201