汉字点阵与OLED屏显

一、SPI协议
1.应用
SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率较高的场合。

2.组成
分为物理层和协议层。

汉字点阵编码原理
1、 在汉字的点阵字库中,每个字节的每个位都代表一个汉字的一个点,每个汉字都是由一个矩形的点阵组成,0代表没有,1代表有点,将0和1分别用不同颜色画出,就形成了一个汉字,常用的点阵矩阵有12x12, 14x14, 16x16三种字库。
2、 字库根据字节所表示点的不同有分为横向矩阵和纵向矩阵,目前多数的字库都是横向矩阵的存储方式(用得最多的应该是早期UCDOS字库),纵向矩阵一般是因为有某些液晶是采用纵向扫描显示法,为了提高显示速度,于是便把字库矩阵做成纵向,省得在显示时还要做矩阵转换。我们接下去所描述的都是指横向矩阵字库。
OLED屏显
OLED(Organic Light Emitting Display,中文名有机发光显示器)是指有机半导体材料和发光材料在电场驱动下,通过载流子注入和复合导致发光的现象。其原理是用ITO透明电极和金属电极分别作为器件的阳极和阴极,在一定电压驱动下,电子和空穴分别从阴极和阳极注入到电子和空穴传输层,电子和空穴分别经过电子和空穴传输层迁移到发光层,并在发光层中相遇,形成激子并使发光分子激发,后者经过辐射弛豫而发出可见光。

二、使用OLED显示自己的学号和姓名
1.在文字取模软件中设置相应选项
在这里插入图片描述

2.在该软件中输入文字并获取字模
在这里插入图片描述

3.在test.c的文件中TEST_MainPage函数位置编写

4.在oledfont.h文件中输入,进行文字存储

5.编写main.c文件
#include “delay.h”
#include “sys.h”
#include “oled.h”
#include “gui.h”
#include “test.h”
int main(void)
{
delay_init();
NVIC_Configuration();
OLED_Init();
OLED_Clear(0);
while(1)
{
TEST_MainPage();

}

}

三、使用OLED显示AHT20的温度和湿度
1.编写bsp_i2c.c中的read_AHT20函数
void read_AHT20(void)
{
uint8_t i;
for(i=0; i<6; i++)
{
readByte[i]=0;
}

//-------------
I2C_Start();

I2C_WriteByte(0x71);
ack_status = Receive_ACK();
readByte[0]= I2C_ReadByte();
Send_ACK();

readByte[1]= I2C_ReadByte();
Send_ACK();

readByte[2]= I2C_ReadByte();
Send_ACK();

readByte[3]= I2C_ReadByte();
Send_ACK();

readByte[4]= I2C_ReadByte();
Send_ACK();

readByte[5]= I2C_ReadByte();
SendNot_Ack();
//Send_ACK();

I2C_Stop();

//--------------
if( (readByte[0] &amp; 0x68) == 0x08 )
{
	H1 = readByte[1];
	H1 = (H1<<8) | readByte[2];
	H1 = (H1<<8) | readByte[3];
	H1 = H1>>4;

	H1 = (H1*1000)/1024/1024;

	T1 = readByte[3];
	T1 = T1 &amp; 0x0000000F;
	T1 = (T1<<8) | readByte[4];
	T1 = (T1<<8) | readByte[5];

	T1 = (T1*2000)/1024/1024 - 500;

	AHT20_OutData[0] = (H1>>8) &amp; 0x000000FF;
	AHT20_OutData[1] = H1 &amp; 0x000000FF;

	AHT20_OutData[2] = (T1>>8) &amp; 0x000000FF;
	AHT20_OutData[3] = T1 &amp; 0x000000FF;
}
else
{
	AHT20_OutData[0] = 0xFF;
	AHT20_OutData[1] = 0xFF;

	AHT20_OutData[2] = 0xFF;
	AHT20_OutData[3] = 0xFF;
	printf("lyy");

}

t=T1/10;
t1=T1%10;
a=(float)(t+t1*0.1);
h=H1/10;
h1=H1%10;
b=(float)(h+h1*0.1);
sprintf(strTemp,"%.1f",a);  
sprintf(strHumi,"%.1f",b);    
GUI_ShowCHinese(16,00,16,"温湿度",1);
GUI_ShowCHinese(16,20,16,"温度",1);
GUI_ShowString(53,20,strTemp,16,1);
GUI_ShowCHinese(16,38,16,"湿度",1);
GUI_ShowString(53,38,strHumi,16,1);
delay_ms(1500);		
delay_ms(1500);

}
2.编写main.c文件
#include “delay.h”
#include “usart.h”
#include “bsp_i2c.h”
#include “sys.h”

#include “oled.h”
#include “gui.h”
#include “test.h”

int main(void)
{
delay_init();
uart_init(115200);
IIC_Init();

NVIC_Configuration(); 	  	
OLED_Init();			        
OLED_Clear(0); 
while(1)
{
	
	read_AHT20_once();
	OLED_Clear(0); 
	delay_ms(1500);

}
}
3.在oledfont.h文件中输入
在这里插入图片描述

4.实物链接
在这里插入图片描述

SCL连接PB6,SDA连接PB7

5.实现效果

温湿度
在这里插入图片描述

四、使用OLED上下或左右的滑动显示长字符
1.编写mainc.文件
#include “delay.h”
#include “sys.h”
#include “oled.h”
#include “gui.h”
#include “test.h”
int main(void)
{
delay_init();
NVIC_Configuration();
OLED_Init();
OLED_Clear(0);
OLED_WR_Byte(0x2E,OLED_CMD);
OLED_WR_Byte(0x27,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0x07,OLED_CMD);
OLED_WR_Byte(0x07,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0xFF,OLED_CMD);
TEST_MainPage();
OLED_WR_Byte(0x2F,OLED_CMD);
while(1)
{

}

}
2.在oledfont.h文件中输入
在这里插入图片描述

3.编辑test.c
void TEST_MainPage(void)
{

GUI_ShowCHinese(10,20,16,"为世界上所有的美好而战",1);

//GUI_ShowString(40,32,"64X128",16,1);
//GUI_ShowString(4,48,"www.lcdwiki.com",16,1);*/
delay_ms(500);		
delay_ms(500);

}

3.实现效果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值