注释与语言的极大更新
使用了Doxygen注释风格, 使用了C++混合编程
This commit is contained in:
162
bscpp_Device/bscpp_STM32_OLED.cpp
Normal file
162
bscpp_Device/bscpp_STM32_OLED.cpp
Normal file
@@ -0,0 +1,162 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (c) 2022 Yuankang Liang(XerolySkinner)
|
||||
#
|
||||
# 本软件按原样提供,无任何明示或暗示
|
||||
# 在任何情况下,作者都不承担任何损害赔偿责任
|
||||
#
|
||||
# 使用的许可声明:
|
||||
# 1. 不得歪曲本软件的来源,你不能声称你编写了原始软件.
|
||||
# 2. 免费授予以任何目的,前提是版权声明出现在所有副本中.
|
||||
# 并且版权声明和许可声明同时出现.
|
||||
# 3. 你有使用,复制,修改,分发,和销售本软件的许可.
|
||||
# 4. 如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的.
|
||||
# 5. 本通知不得从任何来源删除或更改.
|
||||
#
|
||||
# Yuankang Liang(XerolySkinner)
|
||||
# E-mail:zabbcccbbaz@163.com
|
||||
# QQ:2715099320
|
||||
# Mobile Phone:13005636215
|
||||
#
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bscpp_IIC_STM32_OLED.cpp
|
||||
* @brief 在STM32下实现OLED通信
|
||||
* @mainpage 主要信息
|
||||
* @author Yuankang Liang(XerolySkinner)
|
||||
* @email zabbcccbbaz@163.com
|
||||
* @version V1.0.0
|
||||
* @date 2022-11-07 13:19
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include "bscpp_IIC_STM32.h"
|
||||
#include "bscpp_STM32_OLED.h"
|
||||
extern const u8 OLED_WORD_ASCII[];
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
// 类函数
|
||||
//
|
||||
/**
|
||||
* @brief 发送一条指令给OLED
|
||||
* @param cmd 要发送的指令
|
||||
*/
|
||||
void bscpp_STM32_OLED::Send_cmd(u8 cmd) {
|
||||
IIC_WriteOneByte(0x3C, 0x00, cmd);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送一条数据给OLED
|
||||
* @param dat 要发送的数据
|
||||
*/
|
||||
void bscpp_STM32_OLED::Send_dat(u8 dat) {
|
||||
IIC_WriteOneByte(0x3C, 0x40, dat);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 发送一串定长指令给OLED
|
||||
* @param *dat 要发送的指令头
|
||||
* @param len 指令长度
|
||||
*/
|
||||
void bscpp_STM32_OLED::Send_len_dat(u8* dat, u32 len) {
|
||||
IIC_Write(0x3C, 0x40, (u8*)dat, len);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 光标定位行中的位置
|
||||
* @param column 设定的该行位置
|
||||
*/
|
||||
void bscpp_STM32_OLED::Column_set(u8 column) {
|
||||
Send_cmd(0x10 | (column >> 4)); //设置列地址高位
|
||||
Send_cmd(0x00 | (column & 0x0f)); //设置列地址低位
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 光标定位于一页
|
||||
* @param page 设定所处的页位置
|
||||
*/
|
||||
void bscpp_STM32_OLED::Page_set(u8 page) {
|
||||
Send_cmd(0xb0 + page);}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
/**
|
||||
* @brief 全页绘制
|
||||
* @param dat 全页绘制的数据,0x00为清空,0xFF为全涂
|
||||
*/
|
||||
void bscpp_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绘图
|
||||
* @param *ptr_pic 图片数据的头
|
||||
*/
|
||||
void bscpp_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反向绘图
|
||||
* @param *ptr_pic 图片数据的头
|
||||
*/
|
||||
void bscpp_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绘制ASCII字符
|
||||
* @param H 行数
|
||||
* @param V 列数
|
||||
* @param word 所要显示的字符
|
||||
*/
|
||||
void bscpp_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初始化
|
||||
* 初始化显示屏的设置
|
||||
*/
|
||||
void bscpp_STM32_OLED::Init(void) {
|
||||
for (int i = 0; i < 25; i++)
|
||||
Send_cmd(OLED_init_cmd[i]);}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
#endif
|
||||
Reference in New Issue
Block a user