diff --git a/BSP/OLED.c b/BSP/OLED.c new file mode 100644 index 0000000..e12d92b --- /dev/null +++ b/BSP/OLED.c @@ -0,0 +1,321 @@ +#include "stm32f10x.h" +#include "OLED_Font.h" + +/*引脚配置*/ +#define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x)) +#define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x)) + +/*引脚初始化*/ +void OLED_I2C_Init(void) +{ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); + + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; + GPIO_Init(GPIOB, &GPIO_InitStructure); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + OLED_W_SCL(1); + OLED_W_SDA(1); +} + +/** + * @brief I2C开始 + * @param 无 + * @retval 无 + */ +void OLED_I2C_Start(void) +{ + OLED_W_SDA(1); + OLED_W_SCL(1); + OLED_W_SDA(0); + OLED_W_SCL(0); +} + +/** + * @brief I2C停止 + * @param 无 + * @retval 无 + */ +void OLED_I2C_Stop(void) +{ + OLED_W_SDA(0); + OLED_W_SCL(1); + OLED_W_SDA(1); +} + +/** + * @brief I2C发送一个字节 + * @param Byte 要发送的一个字节 + * @retval 无 + */ +void OLED_I2C_SendByte(uint8_t Byte) +{ + uint8_t i; + for (i = 0; i < 8; i++) + { + OLED_W_SDA(!!(Byte & (0x80 >> i))); + OLED_W_SCL(1); + OLED_W_SCL(0); + } + OLED_W_SCL(1); //额外的一个时钟,不处理应答信号 + OLED_W_SCL(0); +} + +/** + * @brief OLED写命令 + * @param Command 要写入的命令 + * @retval 无 + */ +void OLED_WriteCommand(uint8_t Command) +{ + OLED_I2C_Start(); + OLED_I2C_SendByte(0x78); //从机地址 + OLED_I2C_SendByte(0x00); //写命令 + OLED_I2C_SendByte(Command); + OLED_I2C_Stop(); +} + +/** + * @brief OLED写数据 + * @param Data 要写入的数据 + * @retval 无 + */ +void OLED_WriteData(uint8_t Data) +{ + OLED_I2C_Start(); + OLED_I2C_SendByte(0x78); //从机地址 + OLED_I2C_SendByte(0x40); //写数据 + OLED_I2C_SendByte(Data); + OLED_I2C_Stop(); +} + +/** + * @brief OLED设置光标位置 + * @param Y 以左上角为原点,向下方向的坐标,范围:0~7 + * @param X 以左上角为原点,向右方向的坐标,范围:0~127 + * @retval 无 + */ +void OLED_SetCursor(uint8_t Y, uint8_t X) +{ + OLED_WriteCommand(0xB0 | Y); //设置Y位置 + OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4)); //设置X位置高4位 + OLED_WriteCommand(0x00 | (X & 0x0F)); //设置X位置低4位 +} + +/** + * @brief OLED清屏 + * @param 无 + * @retval 无 + */ +void OLED_Clear(void) +{ + uint8_t i, j; + for (j = 0; j < 8; j++) + { + OLED_SetCursor(j, 0); + for(i = 0; i < 128; i++) + { + OLED_WriteData(0x00); + } + } +} + +/** + * @brief OLED显示一个字符 + * @param Line 行位置,范围:1~4 + * @param Column 列位置,范围:1~16 + * @param Char 要显示的一个字符,范围:ASCII可见字符 + * @retval 无 + */ +void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char) +{ + uint8_t i; + OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8); //设置光标位置在上半部分 + for (i = 0; i < 8; i++) + { + OLED_WriteData(OLED_F8x16[Char - ' '][i]); //显示上半部分内容 + } + OLED_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 8); //设置光标位置在下半部分 + for (i = 0; i < 8; i++) + { + OLED_WriteData(OLED_F8x16[Char - ' '][i + 8]); //显示下半部分内容 + } +} + +/** + * @brief OLED显示字符串 + * @param Line 起始行位置,范围:1~4 + * @param Column 起始列位置,范围:1~16 + * @param String 要显示的字符串,范围:ASCII可见字符 + * @retval 无 + */ +void OLED_ShowString(uint8_t Line, uint8_t Column, char *String) +{ + uint8_t i; + for (i = 0; String[i] != '\0'; i++) + { + OLED_ShowChar(Line, Column + i, String[i]); + } +} + +/** + * @brief OLED次方函数 + * @retval 返回值等于X的Y次方 + */ +uint32_t OLED_Pow(uint32_t X, uint32_t Y) +{ + uint32_t Result = 1; + while (Y--) + { + Result *= X; + } + return Result; +} + +/** + * @brief OLED显示数字(十进制,正数) + * @param Line 起始行位置,范围:1~4 + * @param Column 起始列位置,范围:1~16 + * @param Number 要显示的数字,范围:0~4294967295 + * @param Length 要显示数字的长度,范围:1~10 + * @retval 无 + */ +void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) +{ + uint8_t i; + for (i = 0; i < Length; i++) + { + OLED_ShowChar(Line, Column + i, Number / OLED_Pow(10, Length - i - 1) % 10 + '0'); + } +} + +/** + * @brief OLED显示数字(十进制,带符号数) + * @param Line 起始行位置,范围:1~4 + * @param Column 起始列位置,范围:1~16 + * @param Number 要显示的数字,范围:-2147483648~2147483647 + * @param Length 要显示数字的长度,范围:1~10 + * @retval 无 + */ +void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length) +{ + uint8_t i; + uint32_t Number1; + if (Number >= 0) + { + OLED_ShowChar(Line, Column, '+'); + Number1 = Number; + } + else + { + OLED_ShowChar(Line, Column, '-'); + Number1 = -Number; + } + for (i = 0; i < Length; i++) + { + OLED_ShowChar(Line, Column + i + 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 + '0'); + } +} + +/** + * @brief OLED显示数字(十六进制,正数) + * @param Line 起始行位置,范围:1~4 + * @param Column 起始列位置,范围:1~16 + * @param Number 要显示的数字,范围:0~0xFFFFFFFF + * @param Length 要显示数字的长度,范围:1~8 + * @retval 无 + */ +void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) +{ + uint8_t i, SingleNumber; + for (i = 0; i < Length; i++) + { + SingleNumber = Number / OLED_Pow(16, Length - i - 1) % 16; + if (SingleNumber < 10) + { + OLED_ShowChar(Line, Column + i, SingleNumber + '0'); + } + else + { + OLED_ShowChar(Line, Column + i, SingleNumber - 10 + 'A'); + } + } +} + +/** + * @brief OLED显示数字(二进制,正数) + * @param Line 起始行位置,范围:1~4 + * @param Column 起始列位置,范围:1~16 + * @param Number 要显示的数字,范围:0~1111 1111 1111 1111 + * @param Length 要显示数字的长度,范围:1~16 + * @retval 无 + */ +void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) +{ + uint8_t i; + for (i = 0; i < Length; i++) + { + OLED_ShowChar(Line, Column + i, Number / OLED_Pow(2, Length - i - 1) % 2 + '0'); + } +} + +/** + * @brief OLED初始化 + * @param 无 + * @retval 无 + */ +void OLED_Init(void) +{ + uint32_t i, j; + + for (i = 0; i < 1000; i++) //上电延时 + { + for (j = 0; j < 1000; j++); + } + + OLED_I2C_Init(); //端口初始化 + + OLED_WriteCommand(0xAE); //关闭显示 + + OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率 + OLED_WriteCommand(0x80); + + OLED_WriteCommand(0xA8); //设置多路复用率 + OLED_WriteCommand(0x3F); + + OLED_WriteCommand(0xD3); //设置显示偏移 + OLED_WriteCommand(0x00); + + OLED_WriteCommand(0x40); //设置显示开始行 + + OLED_WriteCommand(0xA1); //设置左右方向,0xA1正常 0xA0左右反置 + + OLED_WriteCommand(0xC8); //设置上下方向,0xC8正常 0xC0上下反置 + + OLED_WriteCommand(0xDA); //设置COM引脚硬件配置 + OLED_WriteCommand(0x12); + + OLED_WriteCommand(0x81); //设置对比度控制 + OLED_WriteCommand(0xCF); + + OLED_WriteCommand(0xD9); //设置预充电周期 + OLED_WriteCommand(0xF1); + + OLED_WriteCommand(0xDB); //设置VCOMH取消选择级别 + OLED_WriteCommand(0x30); + + OLED_WriteCommand(0xA4); //设置整个显示打开/关闭 + + OLED_WriteCommand(0xA6); //设置正常/倒转显示 + + OLED_WriteCommand(0x8D); //设置充电泵 + OLED_WriteCommand(0x14); + + OLED_WriteCommand(0xAF); //开启显示 + + OLED_Clear(); //OLED清屏 +} diff --git a/BSP/OLED.h b/BSP/OLED.h new file mode 100644 index 0000000..16e0f4a --- /dev/null +++ b/BSP/OLED.h @@ -0,0 +1,13 @@ +#ifndef __OLED_H +#define __OLED_H + +void OLED_Init(void); +void OLED_Clear(void); +void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char); +void OLED_ShowString(uint8_t Line, uint8_t Column, char *String); +void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); +void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length); +void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); +void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); + +#endif diff --git a/BSP/OLED_Font.h b/BSP/OLED_Font.h new file mode 100644 index 0000000..1ee330a --- /dev/null +++ b/BSP/OLED_Font.h @@ -0,0 +1,293 @@ +#ifndef __OLED_FONT_H +#define __OLED_FONT_H + +/*OLED字模库,宽8像素,高16像素*/ +const uint8_t OLED_F8x16[][16] = +{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0 + + 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0x30, 0x00, 0x00, 0x00, //! 1 + + 0x00, 0x10, 0x0C, 0x06, 0x10, 0x0C, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //" 2 + + 0x40, 0xC0, 0x78, 0x40, 0xC0, 0x78, 0x40, 0x00, + 0x04, 0x3F, 0x04, 0x04, 0x3F, 0x04, 0x04, 0x00, //# 3 + + 0x00, 0x70, 0x88, 0xFC, 0x08, 0x30, 0x00, 0x00, + 0x00, 0x18, 0x20, 0xFF, 0x21, 0x1E, 0x00, 0x00, //$ 4 + + 0xF0, 0x08, 0xF0, 0x00, 0xE0, 0x18, 0x00, 0x00, + 0x00, 0x21, 0x1C, 0x03, 0x1E, 0x21, 0x1E, 0x00, //% 5 + + 0x00, 0xF0, 0x08, 0x88, 0x70, 0x00, 0x00, 0x00, + 0x1E, 0x21, 0x23, 0x24, 0x19, 0x27, 0x21, 0x10, //& 6 + + 0x10, 0x16, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //' 7 + + 0x00, 0x00, 0x00, 0xE0, 0x18, 0x04, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x00, //( 8 + + 0x00, 0x02, 0x04, 0x18, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, //) 9 + + 0x40, 0x40, 0x80, 0xF0, 0x80, 0x40, 0x40, 0x00, + 0x02, 0x02, 0x01, 0x0F, 0x01, 0x02, 0x02, 0x00, //* 10 + + 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x1F, 0x01, 0x01, 0x01, 0x00, //+ 11 + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, //, 12 + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //- 13 + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, //. 14 + + 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, 0x04, + 0x00, 0x60, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, /// 15 + + 0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00, + 0x00, 0x0F, 0x10, 0x20, 0x20, 0x10, 0x0F, 0x00, //0 16 + + 0x00, 0x10, 0x10, 0xF8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, //1 17 + + 0x00, 0x70, 0x08, 0x08, 0x08, 0x88, 0x70, 0x00, + 0x00, 0x30, 0x28, 0x24, 0x22, 0x21, 0x30, 0x00, //2 18 + + 0x00, 0x30, 0x08, 0x88, 0x88, 0x48, 0x30, 0x00, + 0x00, 0x18, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00, //3 19 + + 0x00, 0x00, 0xC0, 0x20, 0x10, 0xF8, 0x00, 0x00, + 0x00, 0x07, 0x04, 0x24, 0x24, 0x3F, 0x24, 0x00, //4 20 + + 0x00, 0xF8, 0x08, 0x88, 0x88, 0x08, 0x08, 0x00, + 0x00, 0x19, 0x21, 0x20, 0x20, 0x11, 0x0E, 0x00, //5 21 + + 0x00, 0xE0, 0x10, 0x88, 0x88, 0x18, 0x00, 0x00, + 0x00, 0x0F, 0x11, 0x20, 0x20, 0x11, 0x0E, 0x00, //6 22 + + 0x00, 0x38, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, //7 23 + + 0x00, 0x70, 0x88, 0x08, 0x08, 0x88, 0x70, 0x00, + 0x00, 0x1C, 0x22, 0x21, 0x21, 0x22, 0x1C, 0x00, //8 24 + + 0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00, + 0x00, 0x00, 0x31, 0x22, 0x22, 0x11, 0x0F, 0x00, //9 25 + + 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, //: 26 + + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00, //; 27 + + 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00, + 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, //< 28 + + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, //= 29 + + 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, + 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, //> 30 + + 0x00, 0x70, 0x48, 0x08, 0x08, 0x08, 0xF0, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x36, 0x01, 0x00, 0x00, //? 31 + + 0xC0, 0x30, 0xC8, 0x28, 0xE8, 0x10, 0xE0, 0x00, + 0x07, 0x18, 0x27, 0x24, 0x23, 0x14, 0x0B, 0x00, //@ 32 + + 0x00, 0x00, 0xC0, 0x38, 0xE0, 0x00, 0x00, 0x00, + 0x20, 0x3C, 0x23, 0x02, 0x02, 0x27, 0x38, 0x20, //A 33 + + 0x08, 0xF8, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00, + 0x20, 0x3F, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00, //B 34 + + 0xC0, 0x30, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, + 0x07, 0x18, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, //C 35 + + 0x08, 0xF8, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, + 0x20, 0x3F, 0x20, 0x20, 0x20, 0x10, 0x0F, 0x00, //D 36 + + 0x08, 0xF8, 0x88, 0x88, 0xE8, 0x08, 0x10, 0x00, + 0x20, 0x3F, 0x20, 0x20, 0x23, 0x20, 0x18, 0x00, //E 37 + + 0x08, 0xF8, 0x88, 0x88, 0xE8, 0x08, 0x10, 0x00, + 0x20, 0x3F, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, //F 38 + + 0xC0, 0x30, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00, + 0x07, 0x18, 0x20, 0x20, 0x22, 0x1E, 0x02, 0x00, //G 39 + + 0x08, 0xF8, 0x08, 0x00, 0x00, 0x08, 0xF8, 0x08, + 0x20, 0x3F, 0x21, 0x01, 0x01, 0x21, 0x3F, 0x20, //H 40 + + 0x00, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x00, 0x00, + 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, //I 41 + + 0x00, 0x00, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x00, + 0xC0, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00, 0x00, //J 42 + + 0x08, 0xF8, 0x88, 0xC0, 0x28, 0x18, 0x08, 0x00, + 0x20, 0x3F, 0x20, 0x01, 0x26, 0x38, 0x20, 0x00, //K 43 + + 0x08, 0xF8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x30, 0x00, //L 44 + + 0x08, 0xF8, 0xF8, 0x00, 0xF8, 0xF8, 0x08, 0x00, + 0x20, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x20, 0x00, //M 45 + + 0x08, 0xF8, 0x30, 0xC0, 0x00, 0x08, 0xF8, 0x08, + 0x20, 0x3F, 0x20, 0x00, 0x07, 0x18, 0x3F, 0x00, //N 46 + + 0xE0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, + 0x0F, 0x10, 0x20, 0x20, 0x20, 0x10, 0x0F, 0x00, //O 47 + + 0x08, 0xF8, 0x08, 0x08, 0x08, 0x08, 0xF0, 0x00, + 0x20, 0x3F, 0x21, 0x01, 0x01, 0x01, 0x00, 0x00, //P 48 + + 0xE0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, + 0x0F, 0x18, 0x24, 0x24, 0x38, 0x50, 0x4F, 0x00, //Q 49 + + 0x08, 0xF8, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, + 0x20, 0x3F, 0x20, 0x00, 0x03, 0x0C, 0x30, 0x20, //R 50 + + 0x00, 0x70, 0x88, 0x08, 0x08, 0x08, 0x38, 0x00, + 0x00, 0x38, 0x20, 0x21, 0x21, 0x22, 0x1C, 0x00, //S 51 + + 0x18, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x18, 0x00, + 0x00, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x00, 0x00, //T 52 + + 0x08, 0xF8, 0x08, 0x00, 0x00, 0x08, 0xF8, 0x08, + 0x00, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x00, //U 53 + + 0x08, 0x78, 0x88, 0x00, 0x00, 0xC8, 0x38, 0x08, + 0x00, 0x00, 0x07, 0x38, 0x0E, 0x01, 0x00, 0x00, //V 54 + + 0xF8, 0x08, 0x00, 0xF8, 0x00, 0x08, 0xF8, 0x00, + 0x03, 0x3C, 0x07, 0x00, 0x07, 0x3C, 0x03, 0x00, //W 55 + + 0x08, 0x18, 0x68, 0x80, 0x80, 0x68, 0x18, 0x08, + 0x20, 0x30, 0x2C, 0x03, 0x03, 0x2C, 0x30, 0x20, //X 56 + + 0x08, 0x38, 0xC8, 0x00, 0xC8, 0x38, 0x08, 0x00, + 0x00, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x00, 0x00, //Y 57 + + 0x10, 0x08, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00, + 0x20, 0x38, 0x26, 0x21, 0x20, 0x20, 0x18, 0x00, //Z 58 + + 0x00, 0x00, 0x00, 0xFE, 0x02, 0x02, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x00, //[ 59 + + 0x00, 0x0C, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x06, 0x38, 0xC0, 0x00, //\ 60 + + 0x00, 0x02, 0x02, 0x02, 0xFE, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x40, 0x40, 0x7F, 0x00, 0x00, 0x00, //] 61 + + 0x00, 0x00, 0x04, 0x02, 0x02, 0x02, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //^ 62 + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //_ 63 + + 0x00, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //` 64 + + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x19, 0x24, 0x22, 0x22, 0x22, 0x3F, 0x20, //a 65 + + 0x08, 0xF8, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x3F, 0x11, 0x20, 0x20, 0x11, 0x0E, 0x00, //b 66 + + 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x0E, 0x11, 0x20, 0x20, 0x20, 0x11, 0x00, //c 67 + + 0x00, 0x00, 0x00, 0x80, 0x80, 0x88, 0xF8, 0x00, + 0x00, 0x0E, 0x11, 0x20, 0x20, 0x10, 0x3F, 0x20, //d 68 + + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x1F, 0x22, 0x22, 0x22, 0x22, 0x13, 0x00, //e 69 + + 0x00, 0x80, 0x80, 0xF0, 0x88, 0x88, 0x88, 0x18, + 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, //f 70 + + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x00, 0x6B, 0x94, 0x94, 0x94, 0x93, 0x60, 0x00, //g 71 + + 0x08, 0xF8, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20, //h 72 + + 0x00, 0x80, 0x98, 0x98, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, //i 73 + + 0x00, 0x00, 0x00, 0x80, 0x98, 0x98, 0x00, 0x00, + 0x00, 0xC0, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00, //j 74 + + 0x08, 0xF8, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, + 0x20, 0x3F, 0x24, 0x02, 0x2D, 0x30, 0x20, 0x00, //k 75 + + 0x00, 0x08, 0x08, 0xF8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, //l 76 + + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x20, 0x3F, 0x20, 0x00, 0x3F, 0x20, 0x00, 0x3F, //m 77 + + 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20, //n 78 + + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x00, //o 79 + + 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xA1, 0x20, 0x20, 0x11, 0x0E, 0x00, //p 80 + + 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x00, 0x0E, 0x11, 0x20, 0x20, 0xA0, 0xFF, 0x80, //q 81 + + 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, + 0x20, 0x20, 0x3F, 0x21, 0x20, 0x00, 0x01, 0x00, //r 82 + + 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x00, 0x33, 0x24, 0x24, 0x24, 0x24, 0x19, 0x00, //s 83 + + 0x00, 0x80, 0x80, 0xE0, 0x80, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1F, 0x20, 0x20, 0x00, 0x00, //t 84 + + 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, + 0x00, 0x1F, 0x20, 0x20, 0x20, 0x10, 0x3F, 0x20, //u 85 + + 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, + 0x00, 0x01, 0x0E, 0x30, 0x08, 0x06, 0x01, 0x00, //v 86 + + 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, + 0x0F, 0x30, 0x0C, 0x03, 0x0C, 0x30, 0x0F, 0x00, //w 87 + + 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, + 0x00, 0x20, 0x31, 0x2E, 0x0E, 0x31, 0x20, 0x00, //x 88 + + 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, + 0x80, 0x81, 0x8E, 0x70, 0x18, 0x06, 0x01, 0x00, //y 89 + + 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x00, 0x21, 0x30, 0x2C, 0x22, 0x21, 0x30, 0x00, //z 90 + + 0x00, 0x00, 0x00, 0x00, 0x80, 0x7C, 0x02, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x40, //{ 91 + + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, //| 92 + + 0x00, 0x02, 0x02, 0x7C, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x40, 0x3F, 0x00, 0x00, 0x00, 0x00, //} 93 + + 0x00, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //~ 94 +}; + +#endif diff --git a/CMakeLists.txt b/CMakeLists.txt index 13eb9f1..98962fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,10 +32,13 @@ add_executable(${CMAKE_PROJECT_NAME} BSP/Delay.c BSP/LED.c BSP/Key.c - BSP/Buzzer.c - BSP/Buzzer.h - BSP/LightSensor.c - BSP/LightSensor.h + BSP/Buzzer.c + BSP/Buzzer.h + BSP/LightSensor.c + BSP/LightSensor.h + BSP/OLED.c + BSP/OLED.h + BSP/OLED_Font.h ) target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE diff --git a/User/main.c b/User/main.c index 612dab5..1bd843b 100644 --- a/User/main.c +++ b/User/main.c @@ -1,17 +1,21 @@ #include "stm32f10x.h" #include "Delay.h" -#include "Buzzer.h" -#include "LightSensor.h" -uint8_t KeyNum; - +#include "OLED.h" int main(void) { - Buzzer_Init(); - LightSensor_Init(); + + OLED_Init(); + OLED_ShowChar(1,1, 'A'); + OLED_ShowString(1,3, "Hello World!12"); + OLED_ShowNum(2, 1, 12345, 5); + OLED_ShowSignedNum(2, 7, 12, 2); + OLED_ShowSignedNum(2, 11, -34, 2); + OLED_ShowHexNum(3,1,0xaa55,4); + OLED_ShowBinNum(4,1,0xaa55,16); + + Delay_ms(1000); + OLED_Clear(); + while (1) { - if (LightSensor_Read() == 1) { - Buzzer_ON(); - } else { - Buzzer_OFF(); - } + } }