使用STM32F103的SPI或IIC接口实现OLED屏显

本文使用到的软件:Keil MDK,串口调试助手
本文使用到的硬件:PC机,STM32最小系统开发板,0.96寸OLED显示屏


一、SPI通信协议简介

在这里插入图片描述

  • 与I2C协议一样,对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层协议层

  • 物理层
    在这里插入图片描述
    (1)SS( Slave Select):从设备选择信号线,常称为片选信号线,也称为 NSS、CS,以下用 NSS 表示。
    (2) SCK (Serial Clock)时钟信号线,用于通讯数据同步。它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如 STM32 的 SPI 时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。
    (3) MOSI (Master Output, Slave Input)主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。
    (4) MISO(Master Input,,Slave Output)主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。

  • 协议层
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二、显示自己的学号和姓名

  • 部分代码
void GUI_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size,u8 mode)
{
   
	unsigned char j=0,csize;
	if(Char_Size == 16)
  {
   
	  csize = Char_Size/2;
	}
  else if(Char_Size == 8)
  {
   
	  csize = Char_Size/2+2;
	}
	else
	{
   
		return;
	}
	while (chr[j]!='\0')
	{
   		
		GUI_ShowChar(x,y,chr[j],Char_Size,mode);
		x+=csize;
		if(x>120)
		{
   
			x=0;
			y+=Char_Size;
		}
		j++;
	}
}
void GUI_ShowFont32(u8 x,u8 y,u8 *s,u8 mode)
{
   
	u8 i,j,k,tmp;
	u16 num;
	num = sizeof(cfont32)/sizeof(typFNT_GB32);
  for(i=0;i<num;i++)
	{
   
		if((cfont32[i].Index[0]==*s)&&(cfont32[i].Index[1]==*(s+1)))
		{
   
			for(j=0;j<128;j++)
			{
   
				if(mode)
				{
   
					tmp = cfont32[i].Msk[j];
				}
				else
				{
   
					tmp = ~(cfont32[i].Msk[j]);
				}
				for(k=0;k<8;k++)
				{
   
					if(tmp&(0x80>>k))
					{
   
						OLED_Set_Pixel(x+(j%4)*8+k, y+j/4,1);
					}
					else
					{
   
						OLED_Set_Pixel(x+(j%4)*8+k, y
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值