使用STM32F103的SPI或IIC接口实现OLED屏显和汉字输出

一.使用OLED显示屏显示数据
实验工具与材料
软件:keil
硬件:PC机,STM32开发板(本过程采用的是野火stm32mini开发板),0.96寸OLED显示屏,下载器(本过程采用ST_Link)
0.96寸OLED显示屏相关介绍
参考下面链接:0.96inch SPI OLED Module - LCD wiki
运行厂家给出的Demo程序
①下载程序
程序下载链接:http://www.lcdwiki.com/res/Program/OLED/0.96inch/SPI_SSD1306_MSP096X_V1.0/0.96inch_SPI_OLED_Module_SSD1306_MSP096X_V1.0.zip
②打开资料包,选择与自己平台相同的实例,打开Demo的工程,使用keil编译
③将程序烧录到开发板
④连接显示屏和开发板
在这里插入图片描述
显示自己的学号和姓名;
打开取自模软件新建图像
在这里插入图片描述
在输入区输入姓名学号后按下ctrl+enter键
点击取模方式的c51格式后显示点阵
将点阵复制,之后会用
2. 实现显示代码
在test.c可以找到类似这样的代码
在这里插入图片描述
在引号中写入自己的姓名
然后找到oledfont.h
在这里插入图片描述
按照实例类型将刚才的字模生成点阵复制到这里
在主函数中设置

int main(void)
{
   	
	delay_init();	    	       //延时函数初始化	  
	OLED_Init();			         //初始化OLED  
	OLED_Clear(0);             //清屏(全黑)
	while(1) 
	{
   	
		TEST_MainPage();         //界面显示
	}
}

烧录并展示结果
在这里插入图片描述
自行修改程序实现显示温度和湿度
显示要求:

显示AHT20的温度和湿度;

1.主函数修改
int main(void)
{
delay_init(); //延时函数初始化
uart_init(115200);
IIC_Init();

NVIC_Configuration(); 	   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 	
OLED_Init();			         //初始化OLED  
OLED_Clear(0); 
while(1)
{
	//printf("温度湿度显示");
	read_AHT20_once();
	OLED_Clear(0); 
	delay_ms(1500);

}
}
2.新建bsp_i2c.c
代码如下

#include "bsp_i2c.h"
#include "delay.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
#include "stdio.h"
#include "string.h"
 
uint8_t   ack_status=0;
uint8_t   readByte[6];
uint8_t   AHT20_status=0;
 
uint32_t  H1=0;  //Humility
uint32_t  T1=0;  //Temperature
 
uint8_t t1,t2,t3,t4;
uint8_t h1,h2,h3,h4;
 
uint8_t  AHT20_OutData[4];
uint8_t  AHT20sendOutData[10] = {
   0xFA, 0x06, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF};
char strTemp[30];  //声明字符数组strTemp,初始化元素30  
char strHumi[30];  //声明字符数组strHumi,初始化元素30
int t;
int h;
float a;
float b;
void IIC_Init(void)
{
   					     
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOB, ENABLE );	
	   
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //í?íìê?3?
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
 
	IIC_SCL=1;
	IIC_SDA=1;
 
}
//2úéúIIC?eê?D?o?
void IIC_Start(void)
{
   
	SDA_OUT();     //sda??ê?3?
	IIC_SDA=1;	  	  
	IIC_SCL=1;
	delay_us(4);
 	IIC_SDA=0;//START:when CLK is high,DATA change form high to low 
	delay_us(4);
	IIC_SCL=0;//?ˉ×?I2C×ü??£?×?±?·¢?í?ò?óê?êy?Y 
}	  
//2úéúIICí£?1D?o?
void IIC_Stop(void)
{
   
	SDA_OUT();//sda??ê?3?
	IIC_SCL=0;
	IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
 	delay_us(4);
	IIC_SCL=1; 
	IIC_SDA=1;//·¢?íI2C×ü???áê?D?o?
	delay_us(4);							   	
}
//μè′yó|′eD?o?μ?à′
//·μ???μ£o1£??óê?ó|′e꧰ü
//        0£??óê?ó|′e3é1|
u8 IIC_Wait_Ack(void)
{
   
	u8 ucErrTime=0;
	SDA_IN();      //SDAéè???aê?è?  
	IIC_SDA=1;delay_us(1);	   
	IIC_SCL=1;delay_us(1);	 
	while(READ_SDA)
	{
   
		ucErrTime++;
		if(ucErrTime>250)
		{
   
			IIC_Stop();
			return 1;
		}
	}
	IIC_SCL=0;//ê±?óê?3?0 	   
	return 0;  
} 
//2úéúACKó|′e
void IIC_Ack(void)
{
   
	IIC_SCL=0;
	SDA_OUT();
	IIC_SDA=0;
	delay_us(2);
	IIC_SCL=1;
	delay_us(2);
	IIC_SCL=0;
}
//2?2úéúACKó|′e		    
void IIC_NAck(void)
{
   
	IIC_SCL=0;
	SDA_OUT();
	IIC_SDA=1;
	delay_us(2);
	IIC_SCL=1;
	delay_us(2
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值