stm32 기반 OLED 화면 디스플레이의 기본 시도와 한자 도트 매트릭스 인코딩의 기본 작동

한자 도트 매트릭스 코딩

1. 여기에서 PCtoLCD 소프트웨어를 사용하여 16 * 16 중국어 글꼴을 자동으로 생성
여기에 사진 설명 삽입
2. 글꼴 생성 방법 설정
여기에 사진 설명 삽입
3. 글꼴 생성
예 :
여기에 사진 설명 삽입

실험 공학

1. 여기서 디스플레이 프로젝트는 OLED Taobao 스토어에서 제공하는 프로젝트를 의미합니다
여기에 사진 설명 삽입
2. 프로젝트 기능 디스플레이이
여기에 사진 설명 삽입
테스트에서 필요한 기능 만 사용하면되고 나머지는 주석 처리 할 수 ​​있습니다.

이름과 학생증을 보여주세요

엔지니어링 재 작성

1. 여기에서 다운로드 한 SPI 프로젝트의 경우 프로젝트에서 변수를 찾아 디스플레이 요구 사항을 다시 작성
2. 텍스트 수정 :
기능에서 검색하여 변경해야하는 매개 변수 찾기
여기에 사진 설명 삽입
기능 이름을 마우스 오른쪽 버튼으로 클릭하고 기능으로 이동 정의

모든 방법을 검색하고, 매개 변수 수정 위치를 찾고, 텍스트를 표시 할 글꼴을 작성하십시오
여기에 사진 설명 삽입
3. 학생 ID 표시 :
프로젝트에서 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. 굽기 프로그램을 컴파일하여 실험 결과를 확인합니다.
여기에 사진 설명 삽입

실험 결과

여기에 사진 설명 삽입

스 와이프하여 이름과 학생 ID를 표시합니다.

엔지니어링 재 작성

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