任务:
理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI接口实现以下功能:
- 显示自己的学号和姓名;
- 显示AHT20的温度和湿度;
- 上下或左右的滑动显示长字符
器件准备:一块STM32d103最小芯片,一块AHT20温湿度传感器,一块TTL转串口芯片,一块0.96寸OLED显示屏模块
资料:https://detail.tmall.com/item.htm?spm=a1z0d.6639537.1997196601.80.201d74841fbMPw&id=556732249552
OLDE与STM32芯片连接
OLED模块 | STM32芯片 |
---|---|
VCC | DC 5V/3.3V |
GND | GND |
D1 | PB15 |
CS | PB11 |
RES | PB12 |
DC | PB10 |
D0 | PB13 |
AHT20与STM32芯片连接
AHT20 | STM32芯片 |
---|---|
VCC | 3.3V |
SDA | B7 |
GND | GND |
SCL | B6 |
理解OLED屏显和汉字点阵编码原理
1、打开上面资料下载的文件解压
我选择点阵大小为16 X 16,更改设置。
将生成的字模复制,粘贴到oledfront.h文件中。
用16×16点阵来表示一个汉字,则该汉字图形由16行16列共256个点构成,这256个点需用256个二进制的位来描述,需要32个字节来存储用于存放图形信息,这样的二进制代码串称为汉字的“字模”。
汉字的显示原理
-
从键盘输入的汉字经过键盘管理模块,变换成机内码。
-
然后经字模检索程序,查到机内码对应的点阵信息在字模库的地址。
-
从字库中检索出该汉字点阵信息。
-
利用显示驱动程序将这些信息送到显示卡的显示缓冲存储器中。
-
显示器的控制器把点阵信息整屏顺次读出,并使每一个二进制位与屏幕的一个点位相对应,就可以将汉字字形在屏幕上显示出来。
任务一
OLED屏显示学号姓名。
1、使用PCtoLCD2002(上图工具),输入学号姓名。
2、将生成字模,复制到工程文件oledfront.h中。
3、改写main.c函数中TEST_MainPage()函数。左键单击函数所在位置,然后跳转。
4、显示效果
任务二
显示AHT20的温度和湿度;
代码
#include "temhum.h"
#include "gui.h"
//读取AHT20的状态寄存器
u8 AHT20_Read_Status(void)
{
u8 Byte_first,flag;
IIC_Start();
AHT20_WR_Byte(0x71);
flag=Receive_ACK();
Byte_first = AHT20_RD_Byte(flag);
IIC_NAck();
IIC_Stop();
return Byte_first;
}
//向AHT20发送AC命令
void AHT20_SendAC(void)
{
IIC_Start();
AHT20_WR_Byte(0x70); //启动传输后发送的01110000 (最后1bit表示读/写 0--写,1--读)
Receive_ACK();
AHT20_WR_Byte(0xac);//0xAC采集命令 命令参数有两个字节,第一个字节为 0x33,第二个字节为0x00。
Receive_ACK();
AHT20_WR_Byte(0x33);
Receive_ACK();
AHT20_WR_Byte(0x00);
Receive_ACK();
IIC_Stop();
}
//初始化AHT20
void AHT20_Init(void)
{
IIC_Init();
IIC_Start();
AHT20_WR_Byte(0x70);
Receive_ACK();
AHT20_WR_Byte(0xa8);//0xA8进入NOR工作模式
Receive_ACK();
AHT20_WR_Byte(0x00);
Receive_ACK();
AHT20_WR_Byte(0x00);
Receive_ACK();
IIC_Stop();
delay_ms(10);//延时10ms左右
IIC_Start();
AHT20_WR_Byte(