• 合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)


    基于ARM语音识别的智能家居系统

    我们上一篇,我们实现在Linux系统下编译程序,我们首先通过两个小练习来熟悉一下如何去编译。今天,我们来介绍一下LCD屏幕基本使用。

    一、LCD屏幕基本使用

    如何使用LCD屏幕?
        1、打开开发板LCD设备驱动文件。  (/dev/fb0)
        2、准备颜色数据。
        3、写入颜色像素点数据。
        4、关闭设备文件。

    示例代码:

    1. #include
    2. #include //open()
    3. #include
    4. #include
    5. #include //write()
    6. int main()
    7. {
    8. //1、打开开发板LCD设备驱动文件。 (/dev/fb0)
    9. int lcd_fd = open("/dev/fb0", O_RDWR);
    10. if(lcd_fd == -1)
    11. {
    12. perror("open lcd_fd failed!"); //通过错误码打印错误信息
    13. return -1; //程序非正常结束
    14. }
    15. //2、准备颜色数据。
    16. int buf[1024*600] = {0}; //像素数据缓冲区
    17. // A R G B : 0 255 0 0 -----> 0x00FF0000;
    18. int R = 0x00FF0000;
    19. int i;
    20. for(i = 0; i<1024*600; i++)
    21. {
    22. buf[i] = R;
    23. }
    24. //3、写入颜色像素点数据。
    25. int w_size = write(lcd_fd, buf, 1024*600*4);
    26. //4、关闭设备文件。
    27. close(lcd_fd);
    28. return 0;
    29. }

    二、开发板运行程序

    1、在Ubuntu平台上使用交叉编译器arm-linux-gcc 编译程序。

    2、下载程序到开发板。

    3、给予权限,运行程序。

    三、界面显示(bmp图片)

    bmp:BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式。
    ​
    它是用位映射存储的方式的图片格式,图像数据中的RGB数据直接可以使用。

    1、图片准备

    2、显示bmp图片

    1、打开开发板LCD设备驱动文件。  (/dev/fb0)
    2、打开bmp图片文件。
    3、读取bmp图片像素颜色数据。
    4、写入颜色像素点数据到LCD。
    5、关闭设备关闭文件。
    头文件: 
        #include 
    函数原型:
        ssize_t read(int fd, void *buf, size_t count);
        从文件描述符fd指代的文件中,读取count字节数据存入buf指向缓冲区中。
    参数列表:
        int fd:读取的目标文件的文件描述符。
        void *buf:存储读到的数据的内存缓冲区。
        size_t count:要读取的字节数。
    返回值:
        成功: 成功读取的字节个数。
        失败: -1,并且errno被设置。

    示例代码:

    1. #include
    2. #include //open()
    3. #include
    4. #include
    5. #include //write()
    6. int showBmp(char *bmp_path)
    7. {
    8. //1、打开开发板LCD设备驱动文件。 (/dev/fb0)
    9. int lcd_fd = open("/dev/fb0", O_RDWR);
    10. if(lcd_fd == -1)
    11. {
    12. perror("open lcd failed!"); //通过错误码打印错误信息
    13. return -1; //程序非正常结束
    14. }
    15. //2、打开bmp图片文件。
    16. int bmp_fd = open(bmp_path, O_RDWR);
    17. if(bmp_fd == -1)
    18. {
    19. perror("open bmp failed!"); //通过错误码打印错误信息
    20. return -1; //程序非正常结束
    21. }
    22. //3、读取bmp图片像素颜色数据。
    23. //文件偏移量(光标),从文件开始位置偏移54字节,去除无效数据。
    24. char buf[54] = {0};
    25. read(bmp_fd, buf, 54);
    26. char bmp_buf[1024*600*3] = {0};
    27. read(bmp_fd, bmp_buf, 1024*600*3);
    28. //3.1数据处理
    29. //将3字节的bgr 的bmp图像像素点数据处理为 lcd 屏幕所需要的 argb像素数据
    30. int lcd_buf[1024*600] = {0}; //lcd 像素数据缓冲区
    31. int i, j = 0;
    32. for(i = 0; i<1024*600; i++, j+=3)
    33. {
    34. // ARGB b g r a
    35. lcd_buf[i] = bmp_buf[0+j]<<0 | bmp_buf[1+j]<<8 | bmp_buf[2+j]<<16 | 0x00<<24;
    36. }
    37. //3.2 图片上下翻转
    38. int show_buf[1024*600] = {0}; //lcd 像素数据缓冲区
    39. int x, y;
    40. for(y = 0; y<600; y++)
    41. {
    42. for(x = 0; x<1024; x++)
    43. {
    44. show_buf[y*1024+x] = lcd_buf[(599-y)*1024+x];
    45. }
    46. }
    47. //4、写入颜色像素点数据到LCD。
    48. write(lcd_fd, show_buf, 1024*600*4);
    49. //5、关闭设备,关闭文件。
    50. close(lcd_fd);
    51. close(bmp_fd);
    52. return 0;
    53. }
    54. int main()
    55. {
    56. showBmp("./1.bmp");
    57. return 0;
    58. }

    四、音视频播放:

    mplayer 是一款开源的多媒体播放器,可以用来播放音视频,mplayer 自带多种格式的解码器,不需要我们再另外安装。开发板并未安装配置mplayer,需要自行移植。

    直接移植我提供的mplayer:

    文件使用说明:

    alsa-lib--lib.tar.gz:

    此为alsa-lib的编译结果 lib库文件压缩包,先把该文件拷贝到开发板。

    tftp下载命令为: tftp 192.168.1.100 -gr alsa-lib--lib.tar.gz

    解压,并将此目录下的所有库文件拷贝到开发板的/usr/lib 目录下。

    解压命令为: tar -zxvf alsa-lib--lib.tar.gz
    1. 进入解压目录:  cd lib/
    2. 拷贝到/usr/lib目录下: cp ./* /usr/lib -r

    arm-alsa.tar.gz:

             此为alsa-lib编译出的配置文件压缩包,把该文件拷贝到开发板。

    tftp下载命令为: tftp 192.168.1.100 -gr arm-alsa.tar.gz

    解压后,将此目录下所有文件拷贝开发板的 /usr/share/arm-alsa 目录下。(需要先在开发板根文件系统中也创建一个/usr/share/arm-alsa 目录)

    1. 新建arm-alsa/目录: mkdir /usr/share/arm-alsa (空格) -p 
    2. 新建arm-alsa/目录: mkdir /usr/share/arm-alsa (空格) -p 
    3. 拷贝到/usr/share/arm-alsa目录:    cp ./arm-alsa/* /usr/share/arm-alsa/ -r

     

    zlib--lib.tar.gz:

    此文件为zlib的编译结果lib库文件压缩包,先把该文件拷贝到开发板。

    tftp下载命令为: tftp 192.168.1.100 -gr zlib--lib.tar.gz

    解压后,将此目录下的 lib 库文件拷贝到开发板根文件系统的/usr/lib 目录下。

    解压命令为: tar -zxvf zlib--lib.tar.gz
    拷贝到/usr/lib目录: 
        cd lib/            //进入解压得到的lib目录
        cp ./* /usr/lib -r    //拷贝

    mplayer:

    此为mplayer的可执行文件,这就是我们需要的 mplayer播放器!将其拷贝到开发板根文件系统的/bin 目录下,并给予执行权限即可。

    cd /usr/bin/
    tftp下载命令为: tftp 192.168.1.100 -gr mplayer
    给予执行权限: chmod +x mplayer

    使用:

        mplayer是一个命令行音视频播放工具。

    代码方式:
    system函数

    #include
    int system(const char *command);
    command:命令

    前台播放,可以直接停掉,后台播放,只能通过发送信号来停止,暂停,继续
    killall -19 mplayer        暂停
    killall -18 mplayer        继续
    killall -9 mplayer        杀死进程

    1. #include
    2. int main(int argc, char const *argv[])
    3. {
    4. system("mplayer 1.mp3 );
    5. return 0;
    6. }

  • 相关阅读:
    力扣周赛 -- 370周赛
    CDH断电后cloudera-scm-server启动报错
    docker查看jvm内存占用
    SSM进阶-Duubo入门demo整合MyBatis
    试用 ModVB(一):安装教程+使用 JSON 常量和 JSON 模式匹配
    xml 解析bean工具类
    基于Vue+SpringBoot的大学计算机课程管理平台 开源项目
    数据结构之线性表的顺序表(c语言)
    系统介绍浏览器缓存机制及前端优化方案
    Linux进阶-ipc共享内存
  • 原文地址:https://blog.csdn.net/BROKEN__Y/article/details/134541878