当前位置: 首页> 汽车> 时评 > 宁波seo整站优化软件_尚硅谷java培训多少钱_aso优化吧_网络优化器下载

宁波seo整站优化软件_尚硅谷java培训多少钱_aso优化吧_网络优化器下载

时间:2025/7/9 6:32:55来源:https://blog.csdn.net/qq_45973003/article/details/144510933 浏览次数: 0次
宁波seo整站优化软件_尚硅谷java培训多少钱_aso优化吧_网络优化器下载

1.0 模块原理图


2.0 0.96OLED简介


资料下载:https://jiangxiekeji.com/download.html

程序介绍:https://jiangxiekeji.com/tutorial/oled.html


SSD1306是一款OLED/PLED点阵显示屏的控制器,可以嵌入在屏幕中,用于执行接收数据、显示存储、扫描刷新等任务

驱动接口:128个SEG引脚和64个COM引脚,对应128x64像素点阵显示屏

内置显示存储器(GDDRAM):128x64 bit(128x8 Byte)SRAM

供电:VDD=1.65~3.3V(IC逻辑),VCC=7~15V(面板驱动)

通信接口:8位6800/8080并行接口,3/4线SPI接口,I2C接口


3.0 SSD1306定义及引脚框图


 4.0 通信接口选择与通信线定义


 图片解读:


5.0 6800并口协议


提到 "6800",最著名的可能是 Motorola 6800 微处理器。这是由摩托罗拉公司在1974年发布的8位微处理器,它在当时的计算机和嵌入式系统中扮演了重要角色。


6.0 8080并口协议



7.0 4线SPI



8.0 3线SPI



9.0 0.96寸显示屏命令表



10.0 开启指令



11.0 IIC通讯协议

注:IIC协议实现参考这一篇文章:STM32 IIC协议实现-CSDN博客 


12.0 程序实现


12.0.1 发送命令

// OLED发送命令
void OLED_WriteCommand(uint8_t command)
{IIC_Start();IIC_SendByte(0x78);IIC_Wait_Ack();IIC_SendByte(0x00);IIC_Wait_Ack();IIC_SendByte(command);IIC_Wait_Ack();IIC_Stop();
}

12.0.2 发送数据

// OLED发送数据
void OLED_WriteData(uint8_t data)
{IIC_Start();IIC_SendByte(0x78);IIC_Wait_Ack();IIC_SendByte(0x40);MyI2C_ReceiveAck();IIC_SendByte(data);IIC_Wait_Ack();IIC_Stop();
}

12.0.3 设置显示位置

 注:以上的内容来自元地址设置命令表,表示x坐标的位置和Y坐标的位置

// OLED显示位置
void OLED_SetCursor(uint8_t x, uint8_t page)
{// 设置显示的X轴低四位OLED_WriteCommand(0x00 | (x & 0x0F));// 设置显示的X地址高四位OLED_WriteCommand(0x10 | (x & 0xF0) >> 4);// 设置显示的页地址OLED_WriteCommand(0xB0 | page);
}

12.0.4 初始化OLED

 注:这个操作也就是开启显示器的显示,将显示器从关闭状态转换为打开状态

// 初始化OLED
void OLED_Init(void)
{// 初始化IICIIC_Init();Delay_ms(100);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);OLED_WriteCommand(0xC8);OLED_WriteCommand(0xDA);OLED_WriteCommand(0x12);OLED_WriteCommand(0x81);OLED_WriteCommand(0xCF);OLED_WriteCommand(0xD9);OLED_WriteCommand(0xF1);OLED_WriteCommand(0xDB);OLED_WriteCommand(0x30);OLED_WriteCommand(0xA4);OLED_WriteCommand(0xA6);OLED_WriteCommand(0x8D);OLED_WriteCommand(0x14);OLED_WriteCommand(0xAF);Delay_ms(100);
}

12.0.5 清屏函数
// OLED 清屏
void OLED_Clear(void)
{for (uint8_t j = 0; j < 8; j++){OLED_SetCursor(0, j);{for (uint8_t i = 0; i < 128; i++){OLED_WriteData(0x00);}}}
}

12.0.6 OLED显示字符
// OLED显示字符
void OLED_ShowChar(uint8_t x, uint8_t y, char mChar, uint8_t fontSize)
{if (fontSize == 8){// 设置起始位置OLED_SetCursor(x, y);uint8_t i = 0;for (i = 0; i < 8; i++){// 写入数组指定行的第i个数据OLED_WriteData(ascii8x16[mChar - ' '][i]);}OLED_SetCursor(x, y + 1);for (i = 0; i < 8; i++){OLED_WriteData(ascii8x16[mChar - ' '][i + 8]);}}
}

12.0.7 OLED显示字符串
void OLED_ShowString(uint8_t X, uint8_t Page, char *String, uint8_t FontSize)
{for (uint8_t i = 0; String[i] != '\0'; i++){OLED_ShowChar(X + i * FontSize, Page, String[i], FontSize);}
}

12.0.8 OLED显示图片
// OLED显示图片
void OLED_ShowImage(uint8_t x, uint8_t y, uint8_t width, uint8_t height, const uint8_t *Image)
{for (uint8_t j = 0; j < height; j++){// 设置起始位置OLED_SetCursor(x, y + j);uint8_t i = 0;for (i = 0; i < width; i++){// 写入数组指定行的第i个数据OLED_WriteData(Image[width * j + i]);}}
}/*** @brief 补充注释* 如果高度是1也就是只有8个像素,也就是只有一页* 那么显示一页的数据就是遍历width页就是字符的宽度个字节* 然后显示对应的数。* 如果高度不仅仅是1而是16,也就是代表这个字符是跨2页进行* 写入的,那么就要再加一个for循环对第二页的数据进行写入* 也就是第二页开始的字节然后写入【0-9】【】**/

12.0.9 OLED显示汉字

void OLED_ShowChinese(uint8_t X, uint8_t Page, char *Chinese)
{// 第一步:先把传递过来的汉字串,拆分为一个个独立的汉字char SigleChinese[4] = {0};uint8_t pChinese = 0;uint8_t pIndex;for (uint8_t i = 0; Chinese[i] != '\0'; i++){SigleChinese[pChinese] = Chinese[i];pChinese++;if (pChinese >= 3){pChinese = 0;for (pIndex = 0; strcmp(OLED_CF16x16[pIndex].Index, "") != 0; pIndex++){if (strcmp(OLED_CF16x16[pIndex].Index, SigleChinese) == 0){break;}}OLED_ShowImage(X + ((i + 1) / 3 - 1) * 16, Page, 16, 2, OLED_CF16x16[pIndex].Data);}}
}
12.0.10 OLED头文件
#ifndef _OLED_H_
#define _OLED_H_
#include <stdint.h>// OLED初始化
void OLED_Init(void);// OLED发送命令
void OLED_WriteCommand(uint8_t command);// OLED发送数据
void OLED_WriteData(uint8_t data);// OLED显示位置
void OLED_SetCursor(uint8_t x, uint8_t page);// OLED 清屏
void OLED_Clear(void);// OLED显示字符
void OLED_ShowChar(uint8_t x, uint8_t y, char mChar, uint8_t fontSize);// OLED显示图片
void OLED_ShowImage(uint8_t x, uint8_t y, uint8_t width, uint8_t height, const uint8_t *Image);// void OLED_ShowChinese(uint8_t x, uint8_t y, char *chinese);void OLED_ShowChinese(uint8_t X, uint8_t Page, char *Chinese);void OLED_ShowString(uint8_t X, uint8_t Page, char *String, uint8_t FontSize);#endif

12.0.11 字符编码

注:该字符编码放在一个单独的C语言文件中

#include <stdint.h>
#include <stdio.h>const uint8_t ascii8x16[][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, 0x00, 0x00, 0x00, 0x00, /*"!",1*/0x00, 0x10, 0x0C, 0x02, 0x10, 0x0C, 0x02, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*""",2*/0x00, 0x40, 0xC0, 0x78, 0x40, 0xC0, 0x78, 0x00,0x00, 0x04, 0x3F, 0x04, 0x04, 0x3F, 0x04, 0x00, /*"#",3*/0x00, 0x70, 0x88, 0x88, 0xFC, 0x08, 0x30, 0x00,0x00, 0x18, 0x20, 0x20, 0xFF, 0x21, 0x1E, 0x00, /*"$",4*/0xF0, 0x08, 0xF0, 0x80, 0x60, 0x18, 0x00, 0x00,0x00, 0x31, 0x0C, 0x03, 0x1E, 0x21, 0x1E, 0x00, /*"%",5*/0x00, 0xF0, 0x08, 0x88, 0x70, 0x00, 0x00, 0x00,0x1E, 0x21, 0x23, 0x2C, 0x19, 0x27, 0x21, 0x10, /*"&",6*/0x00, 0x12, 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, 0x00, 0xE0, 0x00, 0x00, 0x00,0x00, 0x01, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x01, /*"+",11*/0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x90, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, /*",",12*/0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, /*"-",13*/0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, /*".",14*/0x00, 0x00, 0x00, 0x00, 0xC0, 0x38, 0x04, 0x00,0x00, 0x60, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, /*"/",15*/0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00,0x00, 0x0F, 0x10, 0x20, 0x20, 0x10, 0x0F, 0x00, /*"0",16*/0x00, 0x00, 0x10, 0x10, 0xF8, 0x00, 0x00, 0x00,0x00, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, /*"1",17*/0x00, 0x70, 0x08, 0x08, 0x08, 0x08, 0xF0, 0x00,0x00, 0x30, 0x28, 0x24, 0x22, 0x21, 0x30, 0x00, /*"2",18*/0x00, 0x30, 0x08, 0x08, 0x08, 0x88, 0x70, 0x00,0x00, 0x18, 0x20, 0x21, 0x21, 0x22, 0x1C, 0x00, /*"3",19*/0x00, 0x00, 0x80, 0x40, 0x30, 0xF8, 0x00, 0x00,0x00, 0x06, 0x05, 0x24, 0x24, 0x3F, 0x24, 0x24, /*"4",20*/0x00, 0xF8, 0x88, 0x88, 0x88, 0x08, 0x08, 0x00,0x00, 0x19, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00, /*"5",21*/0x00, 0xE0, 0x10, 0x88, 0x88, 0x90, 0x00, 0x00,0x00, 0x0F, 0x11, 0x20, 0x20, 0x20, 0x1F, 0x00, /*"6",22*/0x00, 0x18, 0x08, 0x08, 0x88, 0x68, 0x18, 0x00,0x00, 0x00, 0x00, 0x3E, 0x01, 0x00, 0x00, 0x00, /*"7",23*/0x00, 0x70, 0x88, 0x08, 0x08, 0x88, 0x70, 0x00,0x00, 0x1C, 0x22, 0x21, 0x21, 0x22, 0x1C, 0x00, /*"8",24*/0x00, 0xF0, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00,0x00, 0x01, 0x12, 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, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, /*";",27*/0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00,0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, /*"<",28*/0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, /*"=",29*/0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, /*">",30*/0x00, 0x70, 0x48, 0x08, 0x08, 0x88, 0x70, 0x00,0x00, 0x00, 0x00, 0x30, 0x37, 0x00, 0x00, 0x00, /*"?",31*/0xC0, 0x30, 0xC8, 0x28, 0xE8, 0x10, 0xE0, 0x00,0x07, 0x18, 0x27, 0x28, 0x2F, 0x28, 0x17, 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, 0x01, 0x3E, 0x01, 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, 0x10, 0x28, 0x28, 0x30, 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*/0x08, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x08, 0x00,0x00, 0x03, 0x3E, 0x01, 0x3E, 0x03, 0x00, 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, 0x04, 0x38, 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, 0x04, 0x00, 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, 0x00, 0x00, 0x00,0x00, 0x19, 0x24, 0x24, 0x12, 0x3F, 0x20, 0x00, /*"a",65*/0x10, 0xF0, 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, 0x80, 0x80, 0x80, 0x90, 0xF0, 0x00,0x00, 0x1F, 0x20, 0x20, 0x20, 0x10, 0x3F, 0x20, /*"d",68*/0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,0x00, 0x1F, 0x24, 0x24, 0x24, 0x24, 0x17, 0x00, /*"e",69*/0x00, 0x80, 0x80, 0xE0, 0x90, 0x90, 0x20, 0x00,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*/0x10, 0xF0, 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*/0x10, 0xF0, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00,0x20, 0x3F, 0x24, 0x06, 0x29, 0x30, 0x20, 0x00, /*"k",75*/0x00, 0x10, 0x10, 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, 0x91, 0x20, 0x20, 0x11, 0x0E, 0x00, /*"p",80*/0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00,0x00, 0x0E, 0x11, 0x20, 0x20, 0x91, 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, 0x10, 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, 0x80, 0x80, 0x80, 0x00,0x00, 0x03, 0x0C, 0x30, 0x0C, 0x03, 0x00, 0x00, /*"v",86*/0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x80,0x01, 0x0E, 0x30, 0x0C, 0x07, 0x38, 0x06, 0x01, /*"w",87*/0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00,0x00, 0x20, 0x31, 0x0E, 0x2E, 0x31, 0x20, 0x00, /*"x",88*/0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80,0x00, 0x81, 0x86, 0x78, 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, 0x00, 0xFC, 0x02, 0x02,0x00, 0x00, 0x00, 0x00, 0x01, 0x3E, 0x40, 0x40, /*"{",91*/0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, /*"|",92*/0x02, 0x02, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,0x40, 0x40, 0x3E, 0x01, 0x00, 0x00, 0x00, 0x00, /*"}",93*/0x00, 0x02, 0x01, 0x02, 0x02, 0x04, 0x02, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*"~",94*/
};

13.0 主函数文件

#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "IIC_Drv.h"
#include "LED.h"
#include "MyI2C.h"
#include "OLED.h"const uint8_t Img[] ={0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00,0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20, /*"n",78*/
};const uint8_t Image[] =
{0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0xB0, 0xF0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61,0xF9, 0x8F, 0x83, 0x01, 0xE1, 0x39, 0x0D, 0x07, 0x21, 0x21, 0x21, 0x21, 0x23, 0x22, 0x20, 0x20, 0xFE, 0x23, 0x31, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x31, 0x1F, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x08, 0x0E, 0x38, 0x60, 0x80, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*"未命名文件",0*/
};const uint8_t Hao[] ={0x10, 0x10, 0xF0, 0x1F, 0x10, 0xF0, 0x00, 0x80, 0x82, 0x82, 0xE2, 0x92, 0x8A, 0x86, 0x80, 0x00, 0x40, 0x22, 0x15, 0x08, 0x16, 0x61, 0x00, 0x00, 0x40, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, /*"好",0*/
};// const uint8_t MyChar[][32] =
// {
// 		0x00, 0x80, 0x60, 0xF8, 0x07, 0x40, 0x20, 0x18, 0x0F, 0x08, 0xC8, 0x08, 0x08, 0x28, 0x18, 0x00, 0x01, 0x00, 0x00, 0xFF, 0x00, 0x10, 0x0C, 0x03, 0x40, 0x80, 0x7F, 0x00, 0x01, 0x06, 0x18, 0x00,
// 		/*"你",0*/// 		0x10, 0x10, 0xF0, 0x1F, 0x10, 0xF0, 0x00, 0x80, 0x82, 0x82, 0xE2, 0x92, 0x8A, 0x86, 0x80, 0x00, 0x40, 0x22, 0x15, 0x08, 0x16, 0x61, 0x00, 0x00, 0x40, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
// 		/*"好",1*/// 		0x20, 0x20, 0x20, 0xFE, 0x20, 0x20, 0xFF, 0x20, 0x20, 0x20, 0xFF, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x40, 0x40, 0x47, 0x44, 0x44, 0x44, 0x47, 0x40, 0x40, 0x40, 0x00, 0x00,
// 		/*"世",2*/// 		0x00, 0x00, 0x00, 0xFE, 0x92, 0x92, 0x92, 0xFE, 0x92, 0x92, 0x92, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04, 0x84, 0x62, 0x1E, 0x01, 0x00, 0x01, 0xFE, 0x02, 0x04, 0x04, 0x08, 0x08, 0x00,
// 		/*"界",3*/
// };extern const uint8_t ascii8x16[][16];int main(void)
{OLED_Init();OLED_Clear();// OLED_ShowChar(20, 1, 'X', 8);// OLED_ShowString(0, 0, "helloword!", 8);// OLED_ShowImage(0, 0, 8, 2, Img);// OLED_ShowImage(0, 0, 8, 2, ascii8x16[4]);// OLED_ShowImage(10, 5, 30, 4, Image);// OLED_ShowImage(0, 0, 16, 2, Hao);// OLED_ShowImage(20, 1, 16, 2, MyChar[3]);OLED_ShowChinese(10, 2, "你好世界");while (1){}
}

OLED_C文件

#include "stm32f10x.h"
#include "MyI2C.h"
#include "IIC_Drv.h"
#include "Delay.h"
#include "OLED.h"
#include <string.h>extern const uint8_t ascii8x16[][16];typedef struct {char Index[6];uint8_t Data[32];
} ChineseCell_t;const ChineseCell_t OLED_CF16x16[] = {"你",0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00,/*0*/"好",0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,/*1*/"世",0x20,0x20,0x20,0xFE,0x20,0x20,0xFF,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x47,0x44,0x44,0x44,0x47,0x40,0x40,0x40,0x00,0x00,/*2*/"界",0x00,0x00,0x00,0xFE,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,0x08,0x08,0x04,0x84,0x62,0x1E,0x01,0x00,0x01,0xFE,0x02,0x04,0x04,0x08,0x08,0x00,/*3*///..."",0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};// OLED发送命令
void OLED_WriteCommand(uint8_t command)
{IIC_Start();IIC_SendByte(0x78);IIC_Wait_Ack();IIC_SendByte(0x00);IIC_Wait_Ack();IIC_SendByte(command);IIC_Wait_Ack();IIC_Stop();
}// OLED发送数据
void OLED_WriteData(uint8_t data)
{IIC_Start();IIC_SendByte(0x78);IIC_Wait_Ack();IIC_SendByte(0x40);MyI2C_ReceiveAck();IIC_SendByte(data);IIC_Wait_Ack();IIC_Stop();
}// OLED显示位置
void OLED_SetCursor(uint8_t x, uint8_t page)
{// 设置显示的X轴低四位OLED_WriteCommand(0x00 | (x & 0x0F));// 设置显示的X地址高四位OLED_WriteCommand(0x10 | (x & 0xF0) >> 4);// 设置显示的页地址OLED_WriteCommand(0xB0 | page);
}// 初始化OLED
void OLED_Init(void)
{// 初始化IICIIC_Init();Delay_ms(100);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);OLED_WriteCommand(0xC8);OLED_WriteCommand(0xDA);OLED_WriteCommand(0x12);OLED_WriteCommand(0x81);OLED_WriteCommand(0xCF);OLED_WriteCommand(0xD9);OLED_WriteCommand(0xF1);OLED_WriteCommand(0xDB);OLED_WriteCommand(0x30);OLED_WriteCommand(0xA4);OLED_WriteCommand(0xA6);OLED_WriteCommand(0x8D);OLED_WriteCommand(0x14);OLED_WriteCommand(0xAF);Delay_ms(100);
}// OLED 清屏
void OLED_Clear(void)
{for (uint8_t j = 0; j < 8; j++){OLED_SetCursor(0, j);{for (uint8_t i = 0; i < 128; i++){OLED_WriteData(0x00);}}}
}// OLED显示字符
void OLED_ShowChar(uint8_t x, uint8_t y, char mChar, uint8_t fontSize)
{if (fontSize == 8){// 设置起始位置OLED_SetCursor(x, y);uint8_t i = 0;for (i = 0; i < 8; i++){// 写入数组指定行的第i个数据OLED_WriteData(ascii8x16[mChar - ' '][i]);}OLED_SetCursor(x, y + 1);for (i = 0; i < 8; i++){OLED_WriteData(ascii8x16[mChar - ' '][i + 8]);}}
}// OLED显示字符串
// void OLED_ShowString(uint8_t x, uint8_t y, char *string, uint8_t fontSize)
// {
//     uint8_t i = 0;
//     for (i = 0; string[i] != '\0'; i++)
//     {
//         // 每个字符对应的起始坐标等于最初的起始坐标,
//         OLED_ShowChar(x + i * fontSize, y, string[i], fontSize);
//     }
// }
void OLED_ShowString(uint8_t X, uint8_t Page, char *String, uint8_t FontSize)
{for (uint8_t i = 0; String[i] != '\0'; i++){OLED_ShowChar(X + i * FontSize, Page, String[i], FontSize);}
}// OLED显示图片
void OLED_ShowImage(uint8_t x, uint8_t y, uint8_t width, uint8_t height, const uint8_t *Image)
{for (uint8_t j = 0; j < height; j++){// 设置起始位置OLED_SetCursor(x, y + j);uint8_t i = 0;for (i = 0; i < width; i++){// 写入数组指定行的第i个数据OLED_WriteData(Image[width * j + i]);}}
}
/*** @brief 补充注释* 如果高度是1也就是只有8个像素,也就是只有一页* 那么显示一页的数据就是遍历width页就是字符的宽度个字节* 然后显示对应的数。* 如果高度不仅仅是1而是16,也就是代表这个字符是跨2页进行* 写入的,那么就要再加一个for循环对第二页的数据进行写入* 也就是第二页开始的字节然后写入【0-9】【】**/// void OLED_ShowChinese(uint8_t x, uint8_t y, char *chinese)
// {
//     // 第一步:先把传递过来的汉字串,拆分为一个个独立的汉字
//     char SigleChinese[4] = {0};
//     uint8_t pChinese = 0;//     // 定义一个变量用于存放索引
//     uint8_t pIndex;//     // 第二步:遍历汉字字模,一一匹配汉字索引
//     for (uint8_t i = 0; chinese[i] != '\0'; i++)
//     {
//         SigleChinese[pChinese] = chinese[i];
//         pChinese++;//         if (pChinese >= 3)
//         {
//             pChinese = 0;//             for (pIndex = 0; strcmp(OLED_CF16X16[pIndex].Index, "") != 0; pIndex++)
//             {
//                 if (strcmp(OLED_CF16X16[pIndex].Index, SigleChinese) == 0)
//                 {
//                     break;
//                 }
//             }
//             // 第三步:取出指定位置的字模数据
//             OLED_ShowImage(x + ((i + 1) / 3 - 1) * 16, y, 16, 2, OLED_CF16X16[pIndex].Data);
//         }
//     }
// }void OLED_ShowChinese(uint8_t X, uint8_t Page, char *Chinese)
{char SigleChinese[4] = {0};uint8_t pChinese = 0;uint8_t pIndex;for (uint8_t i = 0; Chinese[i] != '\0'; i++){SigleChinese[pChinese] = Chinese[i];pChinese++;if (pChinese >= 3){pChinese = 0;for (pIndex = 0; strcmp(OLED_CF16x16[pIndex].Index, "") != 0; pIndex++){if (strcmp(OLED_CF16x16[pIndex].Index, SigleChinese) == 0){break;}}OLED_ShowImage(X + ((i + 1) / 3 - 1) * 16, Page, 16, 2, OLED_CF16x16[pIndex].Data);}}
}

OLED_H文件:

#ifndef _OLED_H_
#define _OLED_H_
#include <stdint.h>// OLED初始化
void OLED_Init(void);// OLED发送命令
void OLED_WriteCommand(uint8_t command);// OLED发送数据
void OLED_WriteData(uint8_t data);// OLED显示位置
void OLED_SetCursor(uint8_t x, uint8_t page);// OLED 清屏
void OLED_Clear(void);// OLED显示字符
void OLED_ShowChar(uint8_t x, uint8_t y, char mChar, uint8_t fontSize);// OLED显示图片
void OLED_ShowImage(uint8_t x, uint8_t y, uint8_t width, uint8_t height, const uint8_t *Image);// void OLED_ShowChinese(uint8_t x, uint8_t y, char *chinese);void OLED_ShowChinese(uint8_t X, uint8_t Page, char *Chinese);void OLED_ShowString(uint8_t X, uint8_t Page, char *String, uint8_t FontSize);#endif

编译以上程序输出如下结果:


...

关键字:宁波seo整站优化软件_尚硅谷java培训多少钱_aso优化吧_网络优化器下载

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: