找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8016|回复: 10
收起左侧

51单片机串口通信Bad Apple视频播放源程序(LCD12864显示)

  [复制链接]
ID:209954 发表于 2018-12-16 19:32 | 显示全部楼层 |阅读模式
  程序源自我的团队的一个参赛项目,项目文件是一个大工程有很多内容由其他队员编写我也不好直接发上来,所以我只好截取了其中我写的一个小模块放上来供大家分享。
  这个程序主要可以实现“任意图片显示”以及“任意视频播放”两个功能,数据都通过串口进行传输(波特率4800,蓝牙或USB均可),当然发送的数据只能是处理好的图像取模数据。(LCD驱动是st7920
  上电后直接显示以下图像: IMG_5009.JPG











此时发送53 FF十六进制发送)即可使用显示单张图片的预设,这时再通过串口发送取模数据就可以实时显示图像。

新建位图图像.jpg

IMG_5010.JPG

显示完图片后发送 01 0E即可跳回就绪状态(如果无法退出就定时循环发送01 0E)。

如果在就绪状态下发送53 53就可以进行视频流播放,此时只要将视频流的逐帧取模代码通过串口发过来就行了。
附件压缩包里有我制作的Bad Apple 烂苹果取模BIN文件供大家参考。
IMG_5012.JPG IMG_5011.JPG

由于我的晶振是12MHz的,所以波特率设置为4800,实测播放速度有1帧/秒,大家也可以更改定时器参数来提高波特率。
视频播放完毕后同样循环发送01 0E就可以回到就绪状态了。

下面放出main函数代码,其他代码放在附件中。
#include <reg51.h>
typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;
#define tbuf 25
u8 RX_buffer[tbuf]={0};  //全局字符串数组,串口接收缓存,用于记录蓝牙串口发来的信息
u8 RX_num=0;               //蓝牙接收的字符个数
u8 RX_value=0;                              //蓝牙函数处理后返回的值
#include "delay service.h"
#include "driver of LCD12864.h"        
#include "bluetooth.h"
#include "resource.h"

void init()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                        //打开计数器
}


void main()
{
   init();                 //红外、蓝牙初始化
   Initialization(); //LCD初始化
   Screen_Clear();

        while(1)
        {
    unsigned char j=0,k=0,l=0,m_flag=0;
        RX_buffer[1]=0;
        Write_Instruction(0x01);
        Display_Text(0x80,text16);
        Display_Text(0x98,text15);
        while(RX_buffer[1]==0);//跳出此模式的条件
        Write_Instruction(0x01);
        if(RX_buffer[1]==0xFF) //发送0x53 0xXX(XX表示任意,除01,FF外)默认视频播放模式,发送0x53 0xFF则为图片显示模式
        {
           m_flag=1;
        }
        RX_num=1;
        while((RX_buffer[1] != 0x01) || (RX_buffer[2] != 0x0E))//发送0x01 0x0E退出
        {
        while((j != 32) || (l != 1))
        {
           Write_Instruction(0x36);
           while(RX_num != 17);
           if((RX_buffer[1]==0x01) && (RX_buffer[2])==0x0E) break;
           if((l==0) && (j==32))
           {
              l=1;
                  j=0;
           }
           Write_Instruction(0x80+j);
           if(l==0)
           {
              Write_Instruction(0x80);
           }
           else
           {
              Write_Instruction(0x88);
           }
           for(k=1;k<17;k++)
           {
              Write_Data(RX_buffer[k]);
           }
           j++;
           RX_num=1;
        }
        if(m_flag==1)
        {
           RX_buffer[1]=0x01;
           RX_buffer[2]=0x0E;
        }
        j=0;
        l=0;
        }

        RX_num=0;//接收数组下标指向指令位

        RX_buffer[0]=0;
        while(RX_buffer[0]==0);
        Screen_Clear();
}
}

附件压缩包内容:
新建位图图像 (2).jpg


图像取模软件我推荐Image2Lcd,新版本支持批量取模。

0.png

全部资料51hei下载地址:
多媒体功能演示.zip (262.09 KB, 下载次数: 181)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:209954 发表于 2018-12-16 20:16 | 显示全部楼层
刚刚忘记说了,电路连接如图:(无关部分无视就好) 新建位图图像.jpg
回复

使用道具 举报

ID:436752 发表于 2019-1-10 08:00 | 显示全部楼层
这个非常好啊~~~
回复

使用道具 举报

ID:362076 发表于 2019-3-9 16:48 | 显示全部楼层
借楼主badapple的bin文件一用咯,非常感谢!
回复

使用道具 举报

ID:123950 发表于 2019-3-13 10:40 | 显示全部楼层
可以的
回复

使用道具 举报

ID:241550 发表于 2020-3-9 21:46 | 显示全部楼层
楼主,为什么我把波特率调到9600以上时无法正常显示?(出现斜条纹)是不是液晶读写数据速度跟不上???
回复

使用道具 举报

ID:686782 发表于 2020-5-4 12:29 | 显示全部楼层
多谢楼主分享,最近刚好在研究这方面,学习了
回复

使用道具 举报

ID:756770 发表于 2020-5-20 18:24 | 显示全部楼层
bad apple
妙啊
回复

使用道具 举报

ID:763866 发表于 2020-5-28 23:14 | 显示全部楼层
在这里找到了,谢谢楼主!
回复

使用道具 举报

ID:612528 发表于 2020-6-4 15:06 | 显示全部楼层
本帖最后由 大头怪1号 于 2020-6-9 21:28 编辑

那个判断函数为什要判断 ‘S’
回复

使用道具 举报

ID:612528 发表于 2020-6-4 15:07 | 显示全部楼层
那个 uartjudge函数起什么作用呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表