基于stm32的OLED屏显的基本尝试以及关于汉字点阵编码的基本操作

汉字点阵编码

1、这里使用软件PCtoLCD自动生成16*16的汉字字模
在这里插入图片描述
2、设置生成字模方式
在这里插入图片描述
3、生成字模
例如:
在这里插入图片描述

实验工程

1、这里的显示工程是引用 OLED淘宝商店提供的工程
在这里插入图片描述
2、工程功能展示
在这里插入图片描述
此次试验只需用自己需要使用的功能,其他的可以注释掉

显示自己的名字和学号

工程改写

1、这里下载的SPI工程,在工程中找到变量,以对自己的显示需求进行改写
2、文字修改:
在函数下一 一寻找,找到自己需要改变的参数
在这里插入图片描述
右键函数名称,前往函数定义处

一路寻找,找到参数修改处,将自己想要显示文字的字模写入即可
在这里插入图片描述
3、学号显示:
0-9数字定义已经在工程中写入,只需修改函数参数即可
在这里插入图片描述
4、编译烧录程序即可查看实验结果
在这里插入图片描述

实验结果

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

显示AHT20的温度和湿度

工程改写

1、加入AHT20温湿度读取函数
在这里插入图片描述
2、AHT20部分代码:

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "bmp.h"
#include "stdlib.h"
#include "bsp_i2c.h"
#include "ATH20.h"
#include "stm32f10x.h"
#include "stm32f10x_usart.h"
#include "misc.h"
void GPIO_Configuration(void);
void RCC_Configuration(void);

GPIO_InitTypeDef GPIO_InitStructure;

int main(void)
  {
    
    	int hcr=1;int i1=6,i2=26,i3=46,i4=66,i5=86,i6=106,	i7=126,i8=146,i9=166;
		uint8_t ret = 0;
		uint8_t LED_Stat = 0;
    float P,T,ALT;
    uint32_t CT_data[2];
	int  c1,t1;
		delay_init();	    	 //延时函数初始化	  
		NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 	LED_Init();			     //LED端口初始化
		OLED_Init();			//初始化OLED  
		OLED_Clear(0) ; 
		RCC_Configuration();					   	//设置系统时钟
    GPIO_Configuration();					    //IO口设
I2C_Bus_Init();
    ret = ATH20_Init();
    if(ret == 0)
		while(1)
    {
    
       OLED_Clear(0);
         OLED_ShowString(0,11,"631807030616",16);  
		  delay_ms(2500);
       printf("ATH20传感器初始化错误\n");
    }
 while(1) 
	{
    
    		for(hcr=0;hcr<=166;hcr+=20)
		{
    
    
		while(ATH20_Read_Cal_Enable() == 0)
       {
    
    
           ATH20_Init();//如果为0再使能一次
           delay_ms(25);
        }
        ATH20_Read_CTdata(CT_data);  //读取温度和湿度
        c1 = CT_data[0] * 1000 / 1024 / 1024;  //计算得到湿度值(放大了10倍,如果c1=523,表示现在湿度为52.3%)
        t1 = CT_data[1] * 200 *10 / 1024 / 1024 - 500;//计算得到温度值(放大了10倍,如果t1=245,表示现在温度为24.5℃)
        
      
        OLED_Clear(0);
		  if((i1-hcr)>=0)
        OLED_ShowCHinese(6-hcr,0,9);//全
	      if((i2-hcr)>=0)
        OLED_ShowCHinese(26-hcr,0,10);//欢
	      if((i3-hcr)>=0)
	      OLED_ShowCHinese(46-hcr,0,11);
        if((i4-hcr)>=0)
	      OLED_ShowCHinese(66-hcr,0,12);//子
	      if((i5-hcr)>=0)
        OLED_ShowCHinese(86-hcr,0,13);//技
	      if((i6-hcr)>=0)
	       OLED_ShowCHinese(106-hcr,0,14);//术

	      if((i7-hcr)>=0&&(i7-hcr)<=106)
         OLED_ShowCHinese(126-hcr,0,15);//动
	      if((i8-hcr)>=0&&(i8-hcr)<=106)
        	OLED_ShowCHinese(146-hcr,0,16);//电
        if((i9-hcr)>=0&&(i9-hcr)<=106)
	      OLED_ShowCHinese(166-hcr,0,17);//子
			
		    OLED_ShowCHinese(6,3,18);//温
		    OLED_ShowCHinese(26,3,20);//度
		    OLED_ShowCHinese(46,3,21);//:
		    OLED_ShowNum(66,3,c1,1,16);
		   	OLED_ShowCHinese(6,6,19);//湿
		    OLED_ShowCHinese(26,6,20);//度
		    OLED_ShowCHinese(46,6,21);//:
				OLED_ShowNum(66,6,t1,3,16);
			  delay_ms(2500);
        delay_ms(2500);//每隔两秒读一次数

        if(LED_Stat == 0)
        {
    
    
            LED_Stat = 1;
            GPIO_ResetBits(GPIOC, GPIO_Pin_2);
				   //	GPIO_ResetBits(GPIOC, GPIO_Pin_1);
        }
        else
        {
    
    
            LED_Stat = 0;
            GPIO_SetBits(GPIOC, GPIO_Pin_2);
					 // GPIO_SetBits(GPIOC, GPIO_Pin_1);
        }
				
	    }
	}	
	
}


void RCC_Configuration(void)
{
    
    
  SystemInit();

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC
  						| RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE , ENABLE);
}
void GPIO_Configuration(void)
{
    
    
  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7;				     //状态LED1
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;			 //通用推挽输出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;			 //输出模式最大速度50MHz
  GPIO_Init(GPIOC, &GPIO_InitStructure);
}

3、编译烧录程序即可查看实验结果
在这里插入图片描述

实验结果

在这里插入图片描述

滑动显示自己的名字和学号

工程改写

1、加入控制滚动的函数
在这里插入图片描述
2、滚动代码部分代码:

    OLED_WR_Byte(0x2e,OLED_CMD);//关滚动
    OLED_WR_Byte(0x2a,OLED_CMD);//29向右,2a向左(垂直水平滚动)
    OLED_WR_Byte(0x00,OLED_CMD);//A:空字节
    OLED_WR_Byte(0x00,OLED_CMD);//B:水平起始页
    OLED_WR_Byte(0x00,OLED_CMD);//C:水平滚动速度
    OLED_WR_Byte(0x07,OLED_CMD);//D:水平结束页
    OLED_WR_Byte(0x01,OLED_CMD);//E:每次垂直滚动位移
	OLED_WR_Byte(0x2f,OLED_CMD);//开滚动

3、如果输出字符较长的话考虑横纵坐标,避免输出文字重合
在这里插入图片描述
4、将自己想要输出文字字模如以上方式修改
在这里插入图片描述
5、编译并烧录程序即可查看实验结果
在这里插入图片描述

实验结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/rude_dragon/article/details/111881580