OLED写入指令和数据

news2024/11/15 20:53:58

1.OLED写命令

        

写命令/数据的代码
 

/
*
1. start()
2. 写入 b0111 1000 0x78
3. ACK
4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据
5. ACK
6. 写入指令/数据
7. ACK
8. STOP
*/
void Oled_Write_Cmd(char dataCmd)5.1.4 OLED的寻址模式
如何显示一个点?
有三种,分别位页地址模式,水平地址模式和垂直地址模式,可以通过一下表格进行配置
内存管理
{
    // 1. start()
    IIC_Start();
    //
    // 2. 写入从机地址 b0111 1000 0x78
    IIC_Send_Byte(0x78);
    // 3. ACK
    IIC_ACK();
    // 4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据
    IIC_Send_Byte(0x00);
    // 5. ACK
    IIC_ACK();
    //6. 写入指令/数据
    IIC_Send_Byte(dataCmd);
    //7. ACK
    IIC_ACK();
    //8. STOP
    IIC_Stop();
} 

void Oled_Write_Data(char dataData)
{
    // 1. start()
    IIC_Start();
    //
    // 2. 写入从机地址 b0111 1000 0x78
    IIC_Send_Byte(0x78);
    // 3. ACK
    IIC_ACK();
    // 4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据
    IIC_Send_Byte(0x00);
    // 5. ACK
    IIC_ACK();
    ///6. 写入指令/数据
    IIC_Send_Byte(dataData);
    //7. ACK
    IIC_ACK();
    //8. STOP
    IIC_Stop();
}

2.OLED的寻址模式

        如何显示一个点?

有三种,分别位页地址模式,水平地址模式和垂直地址模式,可以通过一下表格进行配置内存管理

        页寻址模式

#include "reg52.h"
#include "intrins.h"

sbit scl = P0^1;
sbit sda = P0^3;

void IIC_Start()
{
	scl = 0; //防止雪花
	sda = 1;
	scl = 1;
	_nop_(); //耗时5个微妙
	sda = 0;
	_nop_();
}
 
void IIC_Stop()
{
	scl = 0; //防止雪花
	sda = 0;
	scl = 1;
	_nop_(); //耗时5个微妙
	sda = 1;
	_nop_();
}

char IIC_ACK()
{
	char flag;
	
	sda = 1;   //就在时钟脉冲9期间释放数据线
	_nop_();
	scl = 1;
	_nop_();
	flag = sda;
	_nop_();
	scl = 0;
	_nop_();
	
	return flag;

}

void IIC_Send_Byte(char dataSend) //发送一个字节
{
	int i;
	for(i = 0 ;i<8;i++)
	{
		scl = 0;//scl 拉低,让sda做好数据准备
		sda = dataSend & 0x80;       // 1000 0000 获得datasend的最高位
		
		_nop_(); //发送数据建立的时间
		scl = 1;//scl拉高开始发送
		_nop_(); //数据发送时间
		
		scl = 0; // 发送完毕拉低
		_nop_();//
		
		dataSend = dataSend <<1;
	}
}

void Oled_Write_Cmd(char dataCmd)
{
	//1.start()
	IIC_Start();
	
	//2.写入从机地址 b0111 1000 0x78
	IIC_Send_Byte(0x78);
	//3.ACK
	IIC_ACK();
	//4.cotrol byte : (0)(0) 000000 写入命令 (0)(1) 000000写入数据
	IIC_Send_Byte(0x00);
	//5.ACK
	IIC_ACK();
	//6.写入指令/数据
	IIC_Send_Byte(dataCmd);
	//7.ACK
	IIC_ACK();
	//8.STOP
	IIC_Stop();
}

void Oled_Write_Data(char dataData)
{
	//1.start()
	IIC_Start();
	
	//2.写入从机地址 b0111 1000 0x78
	IIC_Send_Byte(0x78);
	//3.ACK
	IIC_ACK();
	//4.cotrol byte : (0)(0) 000000 写入命令 (0)(1) 000000写入数据
	IIC_Send_Byte(0x40);
	//5.ACK
	IIC_Stop();
		//6.写入指令/数据
	IIC_Send_Byte(dataData);
	//7.ACK
	IIC_ACK();
	//8.STOP
	IIC_Stop();
}


//oled初始函数
 void Oled_Init(void){
		Oled_Write_Cmd(0xAE);//--display off
		Oled_Write_Cmd(0x00);//---set low column address
		Oled_Write_Cmd(0x10);//---set high column address
		Oled_Write_Cmd(0x40);//--set start line address
		Oled_Write_Cmd(0xB0);//--set page address
		Oled_Write_Cmd(0x81); // contract control
		Oled_Write_Cmd(0xFF);//--128
		Oled_Write_Cmd(0xA1);//set segment remap
		Oled_Write_Cmd(0xA6);//--normal / reverse
		Oled_Write_Cmd(0xA8);//--set multiplex ratio(1 to 64)
		Oled_Write_Cmd(0x3F);//--1/32 duty
		Oled_Write_Cmd(0xC8);//Com scan direction
		Oled_Write_Cmd(0xD3);//-set display offset
		Oled_Write_Cmd(0x00);//
	 
		Oled_Write_Cmd(0xD5);//set osc division
		Oled_Write_Cmd(0x80);//
	 
		Oled_Write_Cmd(0xD8);//set area color mode off
		Oled_Write_Cmd(0x05);//
	 
		Oled_Write_Cmd(0xD9);//Set Pre-Charge Period
		Oled_Write_Cmd(0xF1);//
		
		Oled_Write_Cmd(0xDA);//set com pin configuartion
		Oled_Write_Cmd(0x12);//
		
		Oled_Write_Cmd(0xDB);//set Vcomh
		Oled_Write_Cmd(0x30);//
		
		Oled_Write_Cmd(0x8D);//set charge pump enable
		Oled_Write_Cmd(0x14);//
		
		Oled_Write_Cmd(0xAF);//--turn on oled panel
}

//清屏函数
void Oled_Clear()
{
	unsigned char i,j;
	for(i = 0;i<8;i++)
	{
		Oled_Write_Cmd(0xB0 + i);	//page0 -- page7
		//每个page从第0列开始
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		//每个page从0列到127列,依次写入0,每写入数据,列地址自动偏移
		for(j = 0;j<128;j++)
		{
			Oled_Write_Data(0);
		}
	}
		
}

void main()
{
	
	int a = 10;
	
	//1.Oled初始化
	Oled_Init();
	//2.选择一个位置
	//2.1选择页寻址模式
	Oled_Write_Cmd(0x20);
	Oled_Write_Cmd(0x02);
	Oled_Clear();
	//2.2选择PAGE0   1011 0000   0xB0
	Oled_Write_Cmd(0xB0);
	Oled_Write_Cmd(0x00);
	Oled_Write_Cmd(0x10);
	//3.显示一个点
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	
	Oled_Write_Cmd(0xB5);
	Oled_Write_Cmd(0x00);
	Oled_Write_Cmd(0x10);
	
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	Oled_Write_Data(0x08);
	
	
	Oled_Write_Cmd(0xB0);
	Oled_Write_Cmd(0x0f);
	Oled_Write_Cmd(0x17);
	Oled_Write_Data(0x08);
	
	while(1); //程序不能退出
}

OLED显示一行字

        

思路:1.防止雪花bug

                2.    Oled_Write_Cmd(0xB0);  //page0开始
                       Oled_Write_Cmd(0x00);  //从第0列开始
                       Oled_Write_Cmd(0x10);

                        后面等同

#include "reg52.h"
#include "intrins.h"

sbit scl = P0^1;
sbit sda = P0^3;

void IIC_Start()
{
	scl = 0; //防止雪花
	sda = 1;
	scl = 1;
	_nop_(); //耗时5个微妙
	sda = 0;
	_nop_();
}
 
void IIC_Stop()
{
	scl = 0; //防止雪花
	sda = 0;
	scl = 1;
	_nop_(); //耗时5个微妙
	sda = 1;
	_nop_();
}

char IIC_ACK()
{
	char flag;
	
	sda = 1;   //就在时钟脉冲9期间释放数据线
	_nop_();
	scl = 1;
	_nop_();
	flag = sda;
	_nop_();
	scl = 0;
	_nop_();
	
	return flag;

}

void IIC_Send_Byte(char dataSend) //发送一个字节
{
	int i;
	for(i = 0 ;i<8;i++)
	{
		scl = 0;//scl 拉低,让sda做好数据准备
		sda = dataSend & 0x80;       // 1000 0000 获得datasend的最高位
		
		_nop_(); //发送数据建立的时间
		scl = 1;//scl拉高开始发送
		_nop_(); //数据发送时间
		
		scl = 0; // 发送完毕拉低
		_nop_();//
		
		dataSend = dataSend <<1;
	}
}

void Oled_Write_Cmd(char dataCmd)
{
	//1.start()
	IIC_Start();
	
	//2.写入从机地址 b0111 1000 0x78
	IIC_Send_Byte(0x78);
	//3.ACK
	IIC_ACK();
	//4.cotrol byte : (0)(0) 000000 写入命令 (0)(1) 000000写入数据
	IIC_Send_Byte(0x00);
	//5.ACK
	IIC_ACK();
	//6.写入指令/数据
	IIC_Send_Byte(dataCmd);
	//7.ACK
	IIC_ACK();
	//8.STOP
	IIC_Stop();
}

void Oled_Write_Data(char dataData)
{
	//1.start()
	IIC_Start();
	
	//2.写入从机地址 b0111 1000 0x78
	IIC_Send_Byte(0x78);
	//3.ACK
	IIC_ACK();
	//4.cotrol byte : (0)(0) 000000 写入命令 (0)(1) 000000写入数据
	IIC_Send_Byte(0x40);
	//5.ACK
	IIC_Stop();
		//6.写入指令/数据
	IIC_Send_Byte(dataData);
	//7.ACK
	IIC_ACK();
	//8.STOP
	IIC_Stop();
}



 void Oled_Init(void){
		Oled_Write_Cmd(0xAE);//--display off
		Oled_Write_Cmd(0x00);//---set low column address
		Oled_Write_Cmd(0x10);//---set high column address
		Oled_Write_Cmd(0x40);//--set start line address
		Oled_Write_Cmd(0xB0);//--set page address
		Oled_Write_Cmd(0x81); // contract control
		Oled_Write_Cmd(0xFF);//--128
		Oled_Write_Cmd(0xA1);//set segment remap
		Oled_Write_Cmd(0xA6);//--normal / reverse
		Oled_Write_Cmd(0xA8);//--set multiplex ratio(1 to 64)
		Oled_Write_Cmd(0x3F);//--1/32 duty
		Oled_Write_Cmd(0xC8);//Com scan direction
		Oled_Write_Cmd(0xD3);//-set display offset
		Oled_Write_Cmd(0x00);//
	 
		Oled_Write_Cmd(0xD5);//set osc division
		Oled_Write_Cmd(0x80);//
	 
		Oled_Write_Cmd(0xD8);//set area color mode off
		Oled_Write_Cmd(0x05);//
	 
		Oled_Write_Cmd(0xD9);//Set Pre-Charge Period
		Oled_Write_Cmd(0xF1);//
		
		Oled_Write_Cmd(0xDA);//set com pin configuartion
		Oled_Write_Cmd(0x12);//
		
		Oled_Write_Cmd(0xDB);//set Vcomh
		Oled_Write_Cmd(0x30);//
		
		Oled_Write_Cmd(0x8D);//set charge pump enable
		Oled_Write_Cmd(0x14);//
		
		Oled_Write_Cmd(0xAF);//--turn on oled panel
}

void Oled_Clear()
{
	unsigned char i,j;
	for(i = 0;i<8;i++)
	{
		Oled_Write_Cmd(0xB0 + i);	//page0 -- page7
		//每个page从第0列开始
		Oled_Write_Cmd(0x00);
		Oled_Write_Cmd(0x10);
		//每个page从0列到127列,依次写入0,每写入数据,列地址自动偏移
		for(j = 0;j<128;j++)
		{
			Oled_Write_Data(0);
		}
	}
		
}


/*--  文字:  爱  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char a1[16] = {0x80,0x64,0x2C,0x34,0x24,0x24,0xEC,0x32,0x22,0x22,0x32,0x2E,0x23,0xA2,0x60,0x00};
code char a2[16] = {0x00,0x41,0x21,0x91,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x81,0x80,0x80,0x00};

/*--  文字:  我  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char w1[16] = {0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00};
code char w2[16] = {0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00};

/*--  文字:  的  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char d1[16] = {0x00,0xF8,0x0C,0x0B,0x08,0x08,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0xF8,0x00,0x00};
code char d2[16] = {0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,0x00,0x43,0x80,0x40,0x3F,0x00,0x00};

/*--  文字:  宝  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char b1[16] = {0x10,0x4C,0x44,0x44,0x44,0x44,0x45,0xC6,0x44,0x44,0x44,0x44,0x44,0x54,0x0C,0x00};
code char b2[16] = {0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x54,0x64,0x44,0x40,0x40,0x00};

/*--  文字:  贝  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char bb1[16] = {0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0xE2,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00};
code char bb2[16] = {0x00,0x00,0x80,0x47,0x20,0x10,0x0C,0x03,0x08,0x10,0x20,0x47,0x80,0x00,0x00,0x00};

/*--  文字:  猪  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char z1[16] = {0x22,0x14,0x08,0xF4,0x02,0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x26,0x20,0x00};
code char z2[16] = {0x44,0x82,0x41,0x3F,0x00,0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00};


void main()
{
	
	unsigned char i;
	
	//1.Oled初始化
	Oled_Init();
	//2.选择一个位置
	//2.1选择页寻址模式
	Oled_Write_Cmd(0x20);
	Oled_Write_Cmd(0x02);
	Oled_Clear();
	//2.2选择PAGE0   1011 0000   0xB0
	Oled_Write_Cmd(0xB0);  //page0
	Oled_Write_Cmd(0x00);  //从第0列开始
	Oled_Write_Cmd(0x10);
	
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(a1[i]);
		}
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(w1[i]);
		}
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(d1[i]);
		}
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(b1[i]);
		}
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(bb1[i]);
		}
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(z1[i]);
		}
	
		
	Oled_Write_Cmd(0xB1);  //page1
	Oled_Write_Cmd(0x00);  //从第0列开始
	Oled_Write_Cmd(0x10);
	
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(a2[i]);
		}
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(w2[i]);
		}
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(d2[i]);
		}
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(b2[i]);
		}
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(bb2[i]);
		}
	for(i = 0; i<16;i++)
		{
			Oled_Write_Data(z2[i]);
		}
	while(1); //程序不能退出
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1713922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NTLite深度Windows系统镜像文件修改定制

计算机爱好者和技术宅的圈子里,NTLite是一个广受欢迎的名字,一款强大的Windows系统定制工具,允许用户对Windows安装镜像进行深度修改,从而打造出一个更加个性化、高效且精简的操作系统。无论是为了优化系统性能、移除不必要的组件,还是集成最新的更新和驱动,NTLite都能成…

Mac在docker可视化界面上安装主流数据库

前言 篇幅有点长&#xff0c;大家可以打开目录快速跳转到想要的数据库即可&#xff01; 虽然说用命令行会显得我们更加专业一些&#xff0c;但对于我英语水平不怎么好的人来说&#xff0c;毕竟命令多又长&#xff0c;还不好记。我个人是喜欢复杂问题简单化&#xff0c;踩了很多…

如何使用 ArcGIS Pro 计算水库库容量

计算水库库容量可以在前期规划的时候协助水库的选址和预估水库的规模&#xff0c;这里为大家介绍一下在 ArcGIS Pro 中如何计算水库的库容量&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&#xff0c;常见…

JAVA 大鱼吃小鱼小游戏

java实现大鱼吃小鱼&#xff0c;支持身份证防沉迷、账号密码、选择难度 放沉迷 登录 选择难度 游戏界面

网易狼人杀 设置点击自动发言

我们玩网易狼人杀 刚开始 都会发现 要按住麦克风才能发言 不得不说 相当的麻烦 我们可以点击如下图 右上角这个设置的齿轮 新弹出的设置面板上 勾选这个点击发言 然后 我们只需要 点一下 就可以进入发言状态 然后 再点一下即可停止发言 会方便非常多

数字孪生智慧车站:全方位可视化管理平台

运用图扑数字孪生技术&#xff0c;智慧车站可视化管理平台实时模拟并监控车站运行状态&#xff0c;通过整合即时数据与历史数据&#xff0c;提供精准分析和预测。该平台支持乘客流量管理、设备运行监控、安全预警等多项功能&#xff0c;提高车站运营效率与安全性。直观的可视化…

docker-compose jira、bugzilla

一、jira 同这篇文章&#xff1a; linux docker 部署破解版本jira:8.4.0——测试体验(非商用)_jira docker-CSDN博客 直到构建完破解版本的镜像就可以了&#xff5e; 二、bugzilla 1. 拉取镜像&#xff1a; 官网镜像搜索bugzilla&#xff0c;第一个就是&#xff1a; 直接…

输入与输出的魔法:探索Python的内置函数

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、从键盘捕获输入&#xff1a;input()函数的力量 二、打印输出&#xff1a;print()函数的…

【Postman接口测试】第三节.第二节.Postman界面功能介绍(下)

文章目录 前言四、Postman 基础功能介绍 4.4 批量执行接口请求 4.5 日志调试 4.6 Postman 断言 4.7 Postman 变量&#xff08;全局/集合/环境&#xff09; 4.7.1 定义变量 4.7.2 获取变量 4.8 请求前置脚本 4.9 接口自动关…

MyBatisPlus的简单入门

文章目录 1.MybatisPlus的简介2.创建SpringBoot工程3.编写测试类 1.MybatisPlus的简介 MyBatisPlus&#xff08;简称MP&#xff09;是基于MyBatis框架基础上开发的增强型工具&#xff0c;旨在&#xff1a;简化开发、提高效率。 它对应的官方网址&#xff1a;链接 2.创建Sprin…

window自动启动bat文件

开机自动开启远程桌面&#xff0c; WinR 执行netplwiz 命令进入设置&#xff1b;取消勾选&#xff0c;可选择所需用户&#xff0c;点击应用&#xff0c;输入远程的密码即可 开机自动开启远程桌面&#xff0c; WinR 执行netplwiz 命令进入设置&#xff1b;取消勾选&#xff0…

AppScan/哥斯拉的字体大小显示异常

搜索关键字&#xff1a;缩放、分辨率、高DPI 问题现象 其他软件的菜单字体显示异常&#xff0c;解决版办法也一样 哥斯拉 godzilla没有URL 解决办法 第一步&#xff1a; 在桌面软件快捷方式的图标上按鼠标右键&#xff0c;在弹出的对话框中选择【属性】&#xff0c;进入到属…

synchronized 锁的到底是什么?

通过8种情况演示锁运行案例&#xff0c;看看我们到底锁的是什么 1锁相关的8种案例演示code package com.bilibili.juc.lock;import java.util.concurrent.TimeUnit;/*** 题目&#xff1a;谈谈你对多线程锁的理解&#xff0c;8锁案例说明* 口诀&#xff1a;线程 操作 资源类* 8…

产教协同|暴雨AI算力赋能传媒实践教学

近日&#xff0c;“第七届传媒实践教学创新研讨会暨中国高校影视学会实验教学专业委员会年会”在美丽的山城重庆成功举办。本次大会以“拥抱AI&#xff0c;融合共生”为主题&#xff0c;吸引了来自全国200多所高校、30多家企业以及700多位大视听实践教学产学研用各界专家、学者…

【Kotlin】简单介绍与使用kotlin

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Kotlin ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 特点 变量和常量 数据类型和类型推断 函数 字符串模板 条件表达式 空安全 when 表达式 循环 我的其他博客 前言 Kotlin是…

I2C协议详解

文章目录 概念工作模式 原理工作原理工作流程IIC协议的关键特点IIC通信过程 优点与缺点优点缺点 概念 IIC&#xff08;Inter-Integrated Circuit&#xff09;协议&#xff0c;也常被称为TWI&#xff08;Two-Wire Interface&#xff09;协议&#xff0c;是一种用于短距离通信的…

FreeRTOS【8】二值信号量使用

1.开发背景 FreeRTOS 提供了队列可以在线程间快速交换信息&#xff0c;那么还有没有其他交互渠道&#xff1f;答案是有的&#xff0c;相对于队列传递信息&#xff0c;还有更轻量级的线程唤醒操作&#xff0c;那就是信号量&#xff0c;而二值信号量就是最简单的一种。 二值信号量…

视频汇聚EasyCVR平台视图库GA/T 1400协议与GB/T 28181协议的区别

在公安和公共安全领域&#xff0c;视频图像信息的应用日益广泛&#xff0c;尤其是在监控、安防和应急指挥等方面。为了实现视频信息的有效传输、接收和处理&#xff0c;GA/T 1400和GB/T 28181这两个协议被广泛应用。虽然两者都服务于视频信息处理的目的&#xff0c;但它们在实际…

数字人如何赋能农产业智慧化发展?

在第八届中国荔枝龙眼产业大会上&#xff0c;推出了AI数字人宣传大使“荔枝妹”&#xff0c;数字人“荔枝妹”不仅可以在现场犹如真人般与观众、嘉宾实时互动交流&#xff0c;又可以作为AI交互数字人&#xff0c;具有情感交互、语音互动等能力&#xff0c;用户可以通过与AI交互…

【蓝桥杯嵌入式】第十四届省赛 更新中

0 前言 刚刚做完第十四届的省赛&#xff0c;这届题目比我想象中的要简单&#xff1b;不过我去年参加的14届单片机的省赛都比往年的国赛还难&#xff0c;挺离谱的~ 1 展示 1.1 源码 1.2 演示视频 1.3 题目展示 2 CubeMX配置(第十四届省赛真题) 设置下载线 HSE时钟设置 时钟树…