基于IIC协议实现的Oled屏幕显示汉字及屏幕滚动

一.Oled简介

1.Oled原理

OLED的原理是,由ITO透明电极和金属电极分别作为器件的阳极和阴极,在一定的电压驱动下,电子和空穴分别从阴极和阳极注入到电子和空穴传输层,电子和空穴分别经过电子和空穴传输层迁移到发光层,并在发光层中相遇,形成激子并使发光分子激发。后者经过辐射弛豫而发出可见光。辐射光可从ITO一侧观察到,金属电极膜同时也起到了反射层的作用。根据这种发光原理而制成的显示器被称为有机发光显示器,也叫OLED显示器。

2.点阵编码及显示

(1)汉字点阵编码
汉字点阵编码是将汉字转换为点阵图像的编码方式。每个汉字都可以由一个矩形的点阵组成,点阵中的每个点都可以表示一个汉字的一个字形。常用的点阵大小有12x12、14x14、16x16等,每个点用0或1表示,0代表没有点,1代表有点。这样,每个汉字就可以通过一个二进制数组来表示。
汉字的点阵编码通常采用区位码的方式表示。区位码将汉字分为若干区和若干位,每个区包含一定数量的汉字,每个位包含一定数量的字形。通过区号和位号的组合,可以唯一地确定一个汉字的点阵编码。例如,在GB2312编码中,每个汉字的区号范围是0x01-0x7F,位号范围是0x01-0x7F,共分为94个区和94个位,每个区包含94个汉字,每个位包含94个字形。
(2)oled点阵显示
OLED点阵显示是一种利用OLED技术制作点阵式显示屏幕的方法。这种显示屏幕可以用于显示文字、图像、视频等各种内容。其基本原理是通过将OLED材料涂层放置在一个塑料或玻璃基板上,然后在OLED材料上形成像素阵列,从而制作出显示屏幕。每个像素由一个OLED材料层和一个薄膜晶体管(TFT)组成,薄膜晶体管可以控制像素的亮度和颜色。

二.Oled显示实验

1.实验目标

显示自己的学号和姓名;
显示AHT20的温度和湿度;
上下或左右的滑动显示(使用硬件刷屏模式)

2.实验材料

(1) 硬件:

  • STM32F103C8T6最小板
  • AHT20温湿度传感器
  • USB/TTL接口
  • 4针脚使用I2C通信协议的OLED屏
  • 面包板
  • 杜邦线若干

(2) 软件:

  • KEIL 5
  • 字模软件

3.取字模

打开PCtoLCD2002开始取字模,先进行相关设置再取字模
在这里插入图片描述

注:此处字宽20

在这里插入图片描述

取字模完毕将字模复制到Oled_Font.h的10*16字模库内
在这里插入图片描述

4.代码实现

ATH相关代码奥送官网中寻找:点击前往

自带函数没有输出中文的方法,需要自己定义

/**
  * @brief  OLED初始化
  * @param  Line 起始行位置
  * @param  Column 起始列位置
  * @retval 无
  */
void OLED_ShowCHINESE(uint8_t Line, uint8_t Column, uint8_t Num)
{
	
	uint8_t i;
	uint8_t wide = 20;//字宽
	
	OLED_SetCursor(( Line - 1 ) * 2, ( Column - 1 )* wide);		//参数1:把光标设置在第几页. 参数2:把光标设置在第几列
	for (i = 0; i < wide; i++)
	{
		OLED_WriteData(OLED_F10x16[Num][i]);			//显示上半部分内容
	}
	
	OLED_SetCursor(( Line - 1 ) * 2 + 1,( Column - 1) * wide);		
	for (i = 0; i < wide ; i++)
	{ 
		OLED_WriteData(OLED_F10x16[Num][i+wide]);		//显示下半部分内容
	}

}

滚动实现代码

				OLED_WriteCommand(0x2E); //关闭滚动
				OLED_WriteCommand(0x26); //向右滚动,27则向左
				OLED_WriteCommand(0x00); //虚拟字节
				OLED_WriteCommand(0x00); //起始页 这里为0
				OLED_WriteCommand(0x07); //滚动速度
				OLED_WriteCommand(0x03); //终止页 这里为3,也就是之后的姓名,学号
				OLED_WriteCommand(0x00); //虚拟字节
				OLED_WriteCommand(0xFF); //虚拟字节
				OLED_WriteCommand(0x2F); //开启滚动

main.c代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AHT20-21_DEMO_V1_3.h"
#include <stdio.h>


int main(void)
{
	
		Init_I2C_Sensor_Port();//初始化SDA,SCL的IO口的函数
		uint32_t CT_data[2];
		volatile int  c1,t1;
		Delay_1ms(500);
		OLED_Init();//初始化OLED
		if((AHT20_Read_Status()&0x18)!=0x18)
		{
			AHT20_Start_Init(); //重新初始化寄存器
			Delay_1ms(10);
		}


		OLED_ShowCN(1,1,0); 
		OLED_ShowCN(1,2,1); 
		OLED_ShowCN(1,3,2);
		OLED_ShowString(2,1,"632107060303"); 
		OLED_ShowCN(3,1,4);
		OLED_ShowCN(3,2,5);
		OLED_ShowString(3,6,":"); 
		OLED_ShowCN(4,1,3);
		OLED_ShowCN(4,2,5);
		OLED_ShowString(4,6,":"); 
		滚动句,需要用时取消注释
//		OLED_ShowCN(2,1,6);
//		OLED_ShowCN(2,2,7);
//		OLED_ShowCN(2,3,8);
//		OLED_ShowCN(2,4,9);
//		OLED_ShowCN(2,5,10);
//		OLED_ShowCN(2,6,11);
//		OLED_ShowCN(3,1,12);
//		OLED_ShowCN(3,2,13);
//		OLED_ShowCN(3,3,14);
		while(1)
		{
			滚动代码,配合滚动语句时取消注释
//				OLED_WriteCommand(0x2E); 
//				OLED_WriteCommand(0x26); 
//				OLED_WriteCommand(0x00); 
//				OLED_WriteCommand(0x00); 
//				OLED_WriteCommand(0x07); 
//				OLED_WriteCommand(0x03); 
//				OLED_WriteCommand(0x00); 
//				OLED_WriteCommand(0xFF); 
//				OLED_WriteCommand(0x2F); 
	
				//AHT20_Read_CTdata(CT_data);       
				AHT20_Read_CTdata_crc(CT_data);   
		
				while(CT_data[0]==0x00&&CT_data[1]==0x00) 
				{
					AHT20_Read_CTdata_crc(CT_data);//crc校验后,读取AHT20的温度和湿度数据
				}
				c1 = CT_data[0]*100*10/1024/1024;  
				t1 = CT_data[1]*200*10/1024/1024-500;
				
				下一步客户处理显示数据,我们这里用两个字符串来表示计算得到的值
				char str1[5];
				char str2[5];
				sprintf(str1,"%.1f",c1/10.0);
				sprintf(str2,"%.1f",t1/10.0);
				OLED_ShowString(3,7,str1);
				OLED_ShowString(4,7,str2);
				Delay_1ms(2000);

	}

}

5.电路连接

在这里插入图片描述

oledstm
GNDGND
VCC3V
SCLB8
SDAB9

6.实验效果

在这里插入图片描述
在这里插入图片描述

三.参考文章

STM32 OLED显示汉字及屏幕滚动(I2C协议)

  • 34
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值