Files
MicrochipFor32/bsp_Device/bsp_OLED_STM32.cpp

163 lines
4.8 KiB
C++
Raw Normal View History

/*----------------------------------------------------------------------------------------------------
#
# Copyright (c) 2022 Yuankang Liang(XerolySkinner)
#
# <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD>ṩ,<2C><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ʾ
# <09><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>߶<EFBFBD><DFB6><EFBFBD><EFBFBD>е<EFBFBD><D0B5>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B3A5><EFBFBD><EFBFBD>
#
# ʹ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
# 1. <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ,<2C><EFBFBD><E3B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>.
# 2. <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>Ŀ<EFBFBD><C4BF><><C7B0><EFBFBD>ǰ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8><EFBFBD><EFBFBD><EFBFBD>.
# <09><><EFBFBD>Ұ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>.
# 3. <09><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>,<2C><><EFBFBD><EFBFBD>,<2C>޸<EFBFBD>,<2C>ַ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>۱<EFBFBD><DBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
# 4. <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>Ʒ<EFBFBD><C6B7>ʹ<EFBFBD><CAB9>,<2C><>Ʒ<EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵ĵ<CDB5><C4B5><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD>.
# 5. <09><>֪ͨ<CDA8><D6AA><EFBFBD>ô<EFBFBD><C3B4>κ<EFBFBD><CEBA><EFBFBD>Դɾ<D4B4><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
#
# Yuankang Liang(XerolySkinner)
# E-mail:zabbcccbbaz@163.com
# QQ:2715099320
# Mobile Phone:13005636215
#
# All rights reserved.
*/
/**
* @file bsp_OLED_STM32.cpp
* @brief <EFBFBD><EFBFBD>STM32<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>OLEDͨ<EFBFBD><EFBFBD>
* @mainpage <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>Ϣ
* @author Yuankang Liang(XerolySkinner)
* @email zabbcccbbaz@163.com
* @version V1.0.0
* @date 2022-11-07 13:19
*/
#ifdef __cplusplus
#include "bsp_IIC_STM32.h"
#include "bsp_OLED_STM32.h"
extern const u8 OLED_WORD_ASCII[];
//////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------
// <09><EFBFBD><E0BAAF>
//
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>OLED
* @param cmd Ҫ<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ָ<EFBFBD><EFBFBD>
*/
void bsp_STM32_OLED::Send_cmd(u8 cmd) {
IIC_WriteOneByte(0x3C, 0x00, cmd);}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>OLED
* @param dat Ҫ<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void bsp_STM32_OLED::Send_dat(u8 dat) {
IIC_WriteOneByte(0x3C, 0x40, dat);}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>OLED
* @param *dat Ҫ<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ָ<EFBFBD><EFBFBD>ͷ
* @param len ָ<EFBFBD><EFBFBD><EFBFBD>
*/
void bsp_STM32_OLED::Send_len_dat(u8* dat, u32 len) {
IIC_Write(0x3C, 0x40, (u8*)dat, len);}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>λ<EFBFBD><EFBFBD>
* @param column <EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
*/
void bsp_STM32_OLED::Column_set(u8 column) {
Send_cmd(0x10 | (column >> 4)); //<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ַ<EFBFBD><D6B7>λ
Send_cmd(0x00 | (column & 0x0f)); //<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ַ<EFBFBD><D6B7>λ
}
//----------------------------------------------------------------------------------------------------
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>һҳ
* @param page <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳλ<EFBFBD><EFBFBD>
*/
void bsp_STM32_OLED::Page_set(u8 page) {
Send_cmd(0xb0 + page);}
//----------------------------------------------------------------------------------------------------
/**
* @brief ȫҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param dat ȫҳ<EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,0x00Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,0xFFΪȫͿ
*/
void bsp_STM32_OLED::Clear(u8 dat) {
u8 page;
for (page = 0; page < 8; page++) {
Page_set(page);
Column_set(0);
IIC_Start();
IIC_SendByte(0x3C << 1);
IIC_WaitAck();
IIC_SendByte(0x40);
IIC_WaitAck();
for (int i = 0; i < 128; i++) {
IIC_SendByte(dat);
IIC_WaitAck();}
IIC_Stop();}}
//----------------------------------------------------------------------------------------------------
/**
* @brief OLED<EFBFBD><EFBFBD>ͼ
* @param *ptr_pic ͼƬ<EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ͷ
*/
void bsp_STM32_OLED::Picture_display(const u8* ptr_pic) {
u8 page;
for (page = 0; page < (64 / 8); page++) {
Page_set(page);
Column_set(0);
IIC_Start();
IIC_SendByte(0x3C << 1);
IIC_WaitAck();
IIC_SendByte(0x40);
IIC_WaitAck();
for (int i = 0; i < 128; i++) {
IIC_SendByte(ptr_pic[i]);
IIC_WaitAck();}
IIC_Stop();
ptr_pic += 128;}}
//----------------------------------------------------------------------------------------------------
/**
* @brief OLED<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
* @param *ptr_pic ͼƬ<EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ͷ
*/
void bsp_STM32_OLED::Picture_ReverseDisplay(const u8* ptr_pic) {
u8 page;
for (page = 0; page < (64 / 8); page++) {
Page_set(page);
Column_set(0);
IIC_Start();
IIC_SendByte(0x3C << 1);
IIC_WaitAck();
IIC_SendByte(0x40);
IIC_WaitAck();
for (int i = 0; i < 128; i++) {
IIC_SendByte(~(ptr_pic[i]));
IIC_WaitAck();}
IIC_Stop();
ptr_pic += 128;}}
//----------------------------------------------------------------------------------------------------
/**
* @brief OLED<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ASCII<EFBFBD>ַ<EFBFBD>
* @param H <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param V <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param word <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
*/
void bsp_STM32_OLED::Draw_ASCII(u32 H, u32 V, u8 word) {
word -= 33;
Page_set(V * 2);
Column_set(H * 8);
Send_len_dat((u8*)(OLED_WORD_ASCII + (word * 16)), 8);
Page_set(V * 2 + 1);
Column_set(H * 8);
Send_len_dat((u8*)(OLED_WORD_ASCII + (word * 16) + 8), 8);}
//----------------------------------------------------------------------------------------------------
/**
* @brief OLED<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void bsp_STM32_OLED::Init(void) {
for (int i = 0; i < 25; i++)
Send_cmd(OLED_init_cmd[i]);}
//////////////////////////////////////////////////////////////////////////////////////////////////////
#endif