GeBalanceBot/GeBalanceBot_Firmware v1.0 .../HARDWARE/OLED/oled.c

303 lines
8.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

///******************** (C) COPYRIGHT 2023 GeekRebot *****************************
//* File Name : oled.c
//* Current Version : V1.0 & ST 3.5.0
//* Author : zhanli 719901725@qq.com
//* Date of Issued : 2024.01.09
//* Comments : oled的iic方式驱动
// SCL -> PA10SDA -> PA11
//********************************************************************************/
//#include "oled.h"
//#include "stdlib.h"
//#include "oledfont.h"
//#include "delay.h"
//#include "bsp_iic.h"
//// OLED的显存
//// 存放格式如下.
////[0]0 1 2 3 ... 127
////[1]0 1 2 3 ... 127
////[2]0 1 2 3 ... 127
////[3]0 1 2 3 ... 127
////[4]0 1 2 3 ... 127
////[5]0 1 2 3 ... 127
////[6]0 1 2 3 ... 127
////[7]0 1 2 3 ... 127
//void Write_IIC_Command(unsigned char IIC_Command)
//{
// IIC_Start();
// IIC_Send_Byte(0x78); // Slave address,SA0=0
// IIC_Wait_Ack();
// IIC_Send_Byte(0x00); // write command
// IIC_Wait_Ack();
// IIC_Send_Byte(IIC_Command);
// IIC_Wait_Ack();
// IIC_Stop();
//}
///**********************************************
//// IIC Write Data
//**********************************************/
//void Write_IIC_Data(unsigned char IIC_Data)
//{
// IIC_Start();
// IIC_Send_Byte(0x78); // D/C#=0; R/W#=0
// IIC_Wait_Ack();
// IIC_Send_Byte(0x40); // write data
// IIC_Wait_Ack();
// IIC_Send_Byte(IIC_Data);
// IIC_Wait_Ack();
// IIC_Stop();
//}
//void OLED_WR_Byte(unsigned dat, unsigned cmd)
//{
// if (cmd)
// {
// Write_IIC_Data(dat);
// }
// else
// {
// Write_IIC_Command(dat);
// }
//}
///********************************************
//// fill_Picture
//********************************************/
//void fill_picture(unsigned char fill_Data)
//{
// unsigned char m, n;
// for (m = 0; m < 8; m++)
// {
// OLED_WR_Byte(0xb0 + m, 0); // page0-page1
// OLED_WR_Byte(0x00, 0); // low column start address
// OLED_WR_Byte(0x10, 0); // high column start address
// for (n = 0; n < 128; n++)
// {
// OLED_WR_Byte(fill_Data, 1);
// }
// }
//}
///***********************Delay****************************************/
//void Delay_50ms(unsigned int Del_50ms)
//{
// unsigned int m;
// for (; Del_50ms > 0; Del_50ms--)
// for (m = 6245; m > 0; m--);
//}
//void Delay_1ms(unsigned int Del_1ms)
//{
// unsigned char j;
// while (Del_1ms--)
// {
// for (j = 0; j < 123; j++);
// }
//}
//// 坐标设置
//void OLED_Set_Pos(unsigned char x, unsigned char y)
//{
// OLED_WR_Byte(0xb0 + y, OLED_CMD);
// OLED_WR_Byte(((x & 0xf0) >> 4) | 0x10, OLED_CMD);
// OLED_WR_Byte((x & 0x0f), OLED_CMD);
//}
//// 开启OLED显示
//void OLED_Display_On(void)
//{
// OLED_WR_Byte(0X8D, OLED_CMD); // SET DCDC命令
// OLED_WR_Byte(0X14, OLED_CMD); // DCDC ON
// OLED_WR_Byte(0XAF, OLED_CMD); // DISPLAY ON
//}
//// 关闭OLED显示
//void OLED_Display_Off(void)
//{
// OLED_WR_Byte(0X8D, OLED_CMD); // SET DCDC命令
// OLED_WR_Byte(0X10, OLED_CMD); // DCDC OFF
// OLED_WR_Byte(0XAE, OLED_CMD); // DISPLAY OFF
//}
//// 清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
//void OLED_Clear(void)
//{
// u8 i, n;
// for (i = 0; i < 8; i++)
// {
// OLED_WR_Byte(0xb0 + i, OLED_CMD); // 设置页地址0~7
// OLED_WR_Byte(0x00, OLED_CMD); // 设置显示位置—列低地址
// OLED_WR_Byte(0x10, OLED_CMD); // 设置显示位置—列高地址
// for (n = 0; n < 128; n++)
// OLED_WR_Byte(0, OLED_DATA);
// } // 更新显示
//}
//void OLED_On(void)
//{
// u8 i, n;
// for (i = 0; i < 8; i++)
// {
// OLED_WR_Byte(0xb0 + i, OLED_CMD); // 设置页地址0~7
// OLED_WR_Byte(0x00, OLED_CMD); // 设置显示位置—列低地址
// OLED_WR_Byte(0x10, OLED_CMD); // 设置显示位置—列高地址
// for (n = 0; n < 128; n++)
// OLED_WR_Byte(1, OLED_DATA);
// } // 更新显示
//}
//// 在指定位置显示一个字符,包括部分字符
//// x:0~127
//// y:0~63
//// mode:0,反白显示;1,正常显示
//// size:选择字体 16/12
//void OLED_ShowChar(u8 x, u8 y, u8 chr, u8 Char_Size)
//{
// unsigned char c = 0, i = 0;
// c = chr - ' '; // 得到偏移后的值
// if (x > Max_Column - 1)
// {
// x = 0;
// y = y + 2;
// }
// if (Char_Size == 16)
// {
// OLED_Set_Pos(x, y);
// for (i = 0; i < 8; i++)
// OLED_WR_Byte(F8X16[c * 16 + i], OLED_DATA);
// OLED_Set_Pos(x, y + 1);
// for (i = 0; i < 8; i++)
// OLED_WR_Byte(F8X16[c * 16 + i + 8], OLED_DATA);
// }
// else
// {
// OLED_Set_Pos(x, y);
// for (i = 0; i < 6; i++)
// OLED_WR_Byte(F6x8[c][i], OLED_DATA);
// }
//}
//// m^n函数
//u32 oled_pow(u8 m, u8 n)
//{
// u32 result = 1;
// while (n--)
// result *= m;
// return result;
//}
//// 显示2个数字
//// x,y :起点坐标
//// len :数字的位数
//// size:字体大小
//// mode:模式 0,填充模式;1,叠加模式
//// num:数值(0~4294967295);
//void OLED_ShowNum(u8 x, u8 y, u32 num, u8 len, u8 size2)
//{
// u8 t, temp;
// u8 enshow = 0;
// for (t = 0; t < len; t++)
// {
// temp = (num / oled_pow(10, len - t - 1)) % 10;
// if (enshow == 0 && t < (len - 1))
// {
// if (temp == 0)
// {
// OLED_ShowChar(x + (size2 / 2) * t, y, ' ', size2);
// continue;
// }
// else
// enshow = 1;
// }
// OLED_ShowChar(x + (size2 / 2) * t, y, temp + '0', size2);
// }
//}
//// 显示一个字符号串
//void OLED_ShowString(u8 x, u8 y, u8 *chr, u8 Char_Size)
//{
// unsigned char j = 0;
// while (chr[j] != '\0')
// {
// OLED_ShowChar(x, y, chr[j], Char_Size);
// x += 8;
// if (x > 120)
// {
// x = 0;
// y += 2;
// }
// j++;
// }
//}
//// 显示汉字
//void OLED_ShowCHinese(u8 x, u8 y, u8 no)
//{
// u8 t, adder = 0;
// OLED_Set_Pos(x, y);
// for (t = 0; t < 16; t++)
// {
// OLED_WR_Byte(Hzk[2 * no][t], OLED_DATA);
// adder += 1;
// }
// OLED_Set_Pos(x, y + 1);
// for (t = 0; t < 16; t++)
// {
// OLED_WR_Byte(Hzk[2 * no + 1][t], OLED_DATA);
// adder += 1;
// }
//}
///***********功能描述显示显示BMP图片128×64起始点坐标(x,y),x的范围0127y为页的范围07*****************/
//void OLED_DrawBMP(unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1, unsigned char BMP[])
//{
// unsigned int j = 0;
// unsigned char x, y;
// if (y1 % 8 == 0)
// y = y1 / 8;
// else
// y = y1 / 8 + 1;
// for (y = y0; y < y1; y++)
// {
// OLED_Set_Pos(x0, y);
// for (x = x0; x < x1; x++)
// {
// OLED_WR_Byte(BMP[j++], OLED_DATA);
// }
// }
//}
//// 初始化SSD1306
//void OLED_Init(void)
//{
// IIC_Init();
// Delay_ms(800);
// OLED_WR_Byte(0xAE, OLED_CMD); // Display off
// OLED_WR_Byte(0x00, OLED_CMD); // set low column address
// OLED_WR_Byte(0x10, OLED_CMD); // set high column address
// OLED_WR_Byte(0x40, OLED_CMD); // set start line address
// OLED_WR_Byte(0xB0, OLED_CMD); // set page address
// OLED_WR_Byte(0x81, OLED_CMD); // contract control
// OLED_WR_Byte(0xFF, OLED_CMD); // 128
// OLED_WR_Byte(0xA1, OLED_CMD); // set segment remap
// OLED_WR_Byte(0xA6, OLED_CMD); // normal / reverse
// OLED_WR_Byte(0xA8, OLED_CMD); // set multiplex ratio(1 to 64)
// OLED_WR_Byte(0x3F, OLED_CMD); // 1/32 duty
// OLED_WR_Byte(0xC8, OLED_CMD); // Com scan direction
// OLED_WR_Byte(0xD3, OLED_CMD); // Set display offset
// OLED_WR_Byte(0x00, OLED_CMD);
// OLED_WR_Byte(0xD5, OLED_CMD); // set osc division
// OLED_WR_Byte(0x80, OLED_CMD); //
// OLED_WR_Byte(0xD8, OLED_CMD); // set area color mode off
// OLED_WR_Byte(0x05, OLED_CMD); //
// OLED_WR_Byte(0xD9, OLED_CMD); // Set Pre-Charge Period
// OLED_WR_Byte(0xF1, OLED_CMD); //
// OLED_WR_Byte(0xDA, OLED_CMD); // set com pin configuartion
// OLED_WR_Byte(0x12, OLED_CMD); //
// OLED_WR_Byte(0xDB, OLED_CMD); // set Vcomh
// OLED_WR_Byte(0x30, OLED_CMD); //
// OLED_WR_Byte(0x8D, OLED_CMD); // set charge pump enable
// OLED_WR_Byte(0x14, OLED_CMD);
// OLED_WR_Byte(0xAF, OLED_CMD); // turn on oled panel
//}