历史上的今天
今天是:2025年01月23日(星期四)
2020年01月23日 | 51单片机串口通信Bad Apple视频播放源程序(LCD12864显示)
2020-01-23 来源:51hei
程序源自我的团队的一个参赛项目,项目文件是一个大工程有很多内容由其他队员编写我也不好直接发上来,所以我只好截取了其中我写的一个小模块放上来供大家分享。
这个程序主要可以实现“任意图片显示”以及“任意视频播放”两个功能,数据都通过串口进行传输(波特率4800,蓝牙或USB均可),当然发送的数据只能是处理好的图像取模数据。(LCD驱动是st7920)
上电后直接显示以下图像:
此时发送53 FF(十六进制发送)即可使用显示单张图片的预设,这时再通过串口发送取模数据就可以实时显示图像。
显示完图片后发送 01 0E即可跳回就绪状态(如果无法退出就定时循环发送01 0E)。
如果在就绪状态下发送53 53就可以进行视频流播放,此时只要将视频流的逐帧取模代码通过串口发过来就行了。
附件压缩包里有我制作的Bad Apple 烂苹果取模BIN文件供大家参考。
由于我的晶振是12MHz的,所以波特率设置为4800,实测播放速度有1帧/秒,大家也可以更改定时器参数来提高波特率。
视频播放完毕后同样循环发送01 0E就可以回到就绪状态了。
下面放出main函数代码,其他代码放在附件中。
#include
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();
}
}
史海拾趣
|
error C2146: syntax error : missing \';\' before identifier \'Lock\'兄弟是新手,谁能帮我解决一下。使用的开发工具是vc++6.0.小北谢谢了。 … 查看全部问答> |
|
EVC下 如何得到视频文件的信息?比如"MPG"、"AVI"等嵌入式常用视频格式? EVC下 如何得到视频文件的信息? 比如\"MPG\"、\"AVI\"等嵌入式常用视频格式? 我知道MP3可以通过读ID3信息得到,但视频文件就不知道了 我希望得到该文件的如下信息 1、视频的分辨率,宽、高为多少像素?如768×576. 2、持续时间 3、帧速率 ...… 查看全部问答> |
|
首届ARM中国合作伙伴巡回研讨会(成都/杭州/上海/南京)报名中 在线报名:http://www.realview.com.cn/wen2-list.asp?id=2912008年5-7月 北京 深圳 武汉 西安 成都 杭州 上海 南京 8个城市 缤纷多彩的ARM嵌入式应用   ...… 查看全部问答> |




