打印
[STM32F1]

STM32F103硬件SPI控制6针/7针0.96寸OLED显示屏

[复制链接]
310|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
OLED介绍
OLED主要参数
1、高分辨率:12864(和12864LCD相同分辨率,但该OLED屏的单位面积像素点多)。
2、广可视角度:大于160°。
3、低功耗:正常显示时0.04W。
4、宽供电范围:直流3.3V-5V。
5、工业级:工作温度范围-30°℃~70°℃。
6、体积小:28.8mm28.5mm。
7、通信方式:lIC、SPI。
8、亮度、对比度可以通过程序指令控制。
9、OLED屏幕内部驱动芯片:SSD1306。

6针OLED如下图所示



引脚定义分别为





使用特权

评论回复
沙发
wangtaohui|  楼主 | 2024-1-31 13:42 | 只看该作者
7针OLED如下图所示


引脚定义分别为


本质上6针与7针都可以使用SPI控制,6针使用SPI通信时,默认片选引脚为选中状态,SCL为SPI时钟线,SDA为SPI数据线。

SPI相对于4针IIC通讯有着无可替代的优势,就是在显示中文字符时不需要通过输入数字的方式引导去查表,先将要显示的中文字符编码存放到一个数组当中,需要显示中文时直接打入要显示的中文即可,省去了IIC查表的麻烦。

使用特权

评论回复
板凳
wangtaohui|  楼主 | 2024-1-31 13:43 | 只看该作者
取字模
一、使用OLED之前先对所需要显示的内容取字模,取字模使用三贝计算器


使用特权

评论回复
地板
wangtaohui|  楼主 | 2024-1-31 13:43 | 只看该作者
二、PCtoLCD2002

使用特权

评论回复
5
wangtaohui|  楼主 | 2024-1-31 13:43 | 只看该作者
程序
main.c


#include        "system.h"
#include        "delay.h"
#include        "oled.h"



int main(void)
{
        delay_init();
        SPI2_Init();
        OLED_Init();//初始化OLED
        OLED_Clear(0);//清屏(全黑)
       
        while(1)
        {
                OLED_Test_MainPage();         //主界面显示测试
                OLED_Clear(0);
                OLED_Test_Color();            //刷屏测试
                OLED_Clear(0);
                OLED_Test_Rectangular();      //矩形绘制测试
                OLED_Clear(0);
                OLED_Test_Circle();           //圆形绘制测试
                OLED_Clear(0);
                OLED_Test_Triangle();         //三角形绘制测试
                OLED_Clear(0);
               
                OLED_TEST_English();          //英文显示测试
                OLED_Clear(0);
                OLED_TEST_Number_Character(); //数字和符号显示测试
                OLED_Clear(0);
               
                OLED_Test_Chinese();          //中文显示测试
                OLED_Clear(0);
                OLED_Test_BMP();              //BMP单色图片显示测试
                OLED_Clear(0);
                OLED_Test_Menu1();            //菜单1显示测试
                OLED_Clear(0);
                OLED_Test_Menu2();            //菜单2显示测试
                OLED_Clear(0);
        }
}


使用特权

评论回复
6
wangtaohui|  楼主 | 2024-1-31 13:44 | 只看该作者
oled.c


#include "oled.h"
#include "oledfont.h"


//OLED显存总共分为8页
//每页8行,一行128个像素点
//OLED的显存
//存放格式如下.
//[0]0 1 2 3 ... 127 (0~7)行
//[1]0 1 2 3 ... 127 (8~15)行
//[2]0 1 2 3 ... 127 (16~23)行
//[3]0 1 2 3 ... 127 (24~31)行
//[4]0 1 2 3 ... 127 (32~39)行
//[5]0 1 2 3 ... 127 (40~47)行
//[6]0 1 2 3 ... 127 (48~55)行
//[7]0 1 2 3 ... 127 (56~63)行


//数组每个bit存储OLED每个像素点的颜色值(1-亮(白色),0-灭(黑色))
//每个数组元素表示1列8个像素点,一共128列
static unsigned char OLED_buffer[1024] =
{
        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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,
        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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,
        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,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,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,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,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,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,
};


/*******************************************************************
* @name       :void OLED_Write_Byte(unsigned dat,unsigned cmd)
* @date       :2022-06-22
* @function   :将一个字节的内容写入OLED屏幕
* @parameters :dat:要编写的内容
                cmd:0-写入命令
                                                                    1-写入数据
* @retvalue   :无
********************************************************************/
void OLED_Write_Byte(unsigned dat,unsigned cmd)
{
        if(cmd)
        {
                OLED_DC_PIN_Set();
        }
        else
        {
                OLED_DC_PIN_Clr();
        }
        OLED_CS_PIN_Clr();
        SPI_WriteByte(SPI2, dat);
        OLED_CS_PIN_Set();
}


/*******************************************************************
* @name       :void OLED_Display_On(void)
* @date       :2022-06-22
* @function   :打开OLED显示
* @parameters :无
* @retvalue   :无
********************************************************************/           
void OLED_Display_On(void)
{
        OLED_Write_Byte(0X8D,OLED_CMD);                //SET DCDC命令
        OLED_Write_Byte(0X14,OLED_CMD);                //DCDC ON
        OLED_Write_Byte(0XAF,OLED_CMD);                //DISPLAY ON
}


/*******************************************************************
* @name       :void OLED_Display_Off(void)
* @date       :2022-06-22
* @function   :关闭OLED显示
* @parameters :无
* @retvalue   :无
********************************************************************/   
void OLED_Display_Off(void)
{
        OLED_Write_Byte(0X8D,OLED_CMD);                //SET DCDC命令
        OLED_Write_Byte(0X10,OLED_CMD);                //DCDC OFF
        OLED_Write_Byte(0XAE,OLED_CMD);                //DISPLAY OFF
}


/*******************************************************************
* @name       :void OLED_Set_Pos(unsigned char x, unsigned char y)
* @date       :2022-06-22
* @function   :在OLED屏幕中设置坐标
* @parameters :x:x坐标
                y:y坐标
* @retvalue   :无
********************************************************************/
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
        OLED_Write_Byte(YLevel+y/PAGE_SIZE,OLED_CMD);
        OLED_Write_Byte((((x+2)&0xf0)>>4)|0x10,OLED_CMD);
        OLED_Write_Byte(((x+2)&0x0f),OLED_CMD);
}


/*******************************************************************
* @name       :void OLED_Reset(void)
* @date       :2022-06-22
* @function   :重置OLED屏幕显示
* @parameters :dat:0-显示全黑
                    1-显示全白
* @retvalue   :无
********************************************************************/
void OLED_Reset(void)
{
        OLED_RST_PIN_Set();
        delay_ms(100);
        OLED_RST_PIN_Clr();
        delay_ms(100);
        OLED_RST_PIN_Set();
}


/*******************************************************************
* @name       :void OLED_Set_Pixel(unsigned char x, unsigned char y,unsigned char color)
* @date       :2022-06-22
* @function   :将像素值设置为RAM
* @parameters :x:像素的x坐标
                y:像素的y坐标
                                                                color:像素点的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
********************************************************************/
void OLED_Set_Pixel(unsigned char x, unsigned char y,unsigned char color)
{
        if(color)
        {
                OLED_buffer[(y/PAGE_SIZE)*WIDTH+x]|= (1<<(y%PAGE_SIZE))&0xff;
        }
        else
        {
                OLED_buffer[(y/PAGE_SIZE)*WIDTH+x]&= ~((1<<(y%PAGE_SIZE))&0xff);
        }
}


/*******************************************************************
* @name       :void OLED_Display(void)
* @date       :2022-06-22
* @function   :在OLED屏幕中显示
* @parameters :无
* @retvalue   :无
********************************************************************/  
void OLED_Display(void)
{
        u8 i,n;
        for(i=0;i<PAGE_SIZE;i++)  
        {  
                OLED_Write_Byte (YLevel+i,OLED_CMD);                        //设置页地址(0~7)
                OLED_Write_Byte (XLevelL,OLED_CMD);                                //设置显示位置—列低地址
                OLED_Write_Byte (XLevelH,OLED_CMD);                                //设置显示位置—列高地址
                for(n=0;n<WIDTH;n++)
                {
                        OLED_Write_Byte(OLED_buffer[i*WIDTH+n],OLED_DATA);
                }
        }                //更新显示
}


/*******************************************************************
* @name       :void OLED_Clear(unsigned dat)
* @date       :2022-06-22
* @function   :清除OLED屏幕显示
* @parameters :dat:0-显示全黑
                    1-显示全白
* @retvalue   :无
********************************************************************/
void OLED_Clear(unsigned dat)
{
        if(dat)
        {
                memset(OLED_buffer,0xff,sizeof(OLED_buffer));
        }
        else
        {
                memset(OLED_buffer,0,sizeof(OLED_buffer));
        }
        OLED_Display();
}


/*******************************************************************
* @name       :void OLED_Init_GPIO(void)
* @date       :2022-06-22
* @function   :OLED引脚初始化
* @parameters :无
* @retvalue   :无
********************************************************************/
void OLED_Init_GPIO(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(OLED_RST_CLK,ENABLE);                                //使能端口时钟
        GPIO_InitStructure.GPIO_Pin = OLED_RST_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //速度50MHz
        GPIO_Init(OLED_RST_PORT, &GPIO_InitStructure);
        GPIO_SetBits(OLED_RST_PORT,OLED_RST_PIN);
       
        RCC_APB2PeriphClockCmd(OLED_DC_CLK,ENABLE);                                        //使能端口时钟
        GPIO_InitStructure.GPIO_Pin = OLED_DC_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //速度50MHz
        GPIO_Init(OLED_DC_PORT, &GPIO_InitStructure);
        GPIO_SetBits(OLED_DC_PORT,OLED_DC_PIN);
       
        RCC_APB2PeriphClockCmd(OLED_CS_CLK,ENABLE);                                        //使能端口时钟
        GPIO_InitStructure.GPIO_Pin = OLED_CS_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //速度50MHz
        GPIO_Init(OLED_CS_PORT, &GPIO_InitStructure);
        GPIO_SetBits(OLED_CS_PORT,OLED_CS_PIN);
}


/*******************************************************************
* @name       :void OLED_Init(void)
* @date       :2022-06-22
* @function   :初始化OLED SSD1306控制IC
* @parameters :无
* @retvalue   :无
********************************************************************/                                     
void OLED_Init(void)
{
        OLED_Init_GPIO();                //初始化GPIO
       
        delay_ms(200);
        OLED_Reset();                                //复位OLED
       
        /**************初始化SSD1306*****************/
        OLED_Write_Byte(0xAE,OLED_CMD);        /*display off*/
        OLED_Write_Byte(0x00,OLED_CMD);        /*set lower column address*/
        OLED_Write_Byte(0x10,OLED_CMD);        /*set higher column address*/
        OLED_Write_Byte(0x40,OLED_CMD);        /*set display start line*/
        OLED_Write_Byte(0xB0,OLED_CMD);        /*set page address*/
        OLED_Write_Byte(0x81,OLED_CMD);        /*contract control*/
        OLED_Write_Byte(0xFF,OLED_CMD);        /*128*/
        OLED_Write_Byte(0xA1,OLED_CMD);        /*set segment remap*/
        OLED_Write_Byte(0xA6,OLED_CMD);        /*normal / reverse*/
        OLED_Write_Byte(0xA8,OLED_CMD);        /*multiplex ratio*/
        OLED_Write_Byte(0x3F,OLED_CMD);        /*duty = 1/64*/
        OLED_Write_Byte(0xC8,OLED_CMD);        /*Com scan direction*/
        OLED_Write_Byte(0xD3,OLED_CMD);        /*set display offset*/
        OLED_Write_Byte(0x00,OLED_CMD);
        OLED_Write_Byte(0xD5,OLED_CMD);        /*set osc division*/
        OLED_Write_Byte(0x80,OLED_CMD);
        OLED_Write_Byte(0xD9,OLED_CMD);        /*set pre-charge period*/
        OLED_Write_Byte(0XF1,OLED_CMD);
        OLED_Write_Byte(0xDA,OLED_CMD);        /*set COM pins*/
        OLED_Write_Byte(0x12,OLED_CMD);
        OLED_Write_Byte(0xDB,OLED_CMD);        /*set vcomh*/
        OLED_Write_Byte(0x30,OLED_CMD);
        OLED_Write_Byte(0x8D,OLED_CMD);        /*set charge pump disable*/
        OLED_Write_Byte(0x14,OLED_CMD);
        OLED_Write_Byte(0xAF,OLED_CMD);        /*display ON*/
}


/*******************************************************************
* @name       :void OLED_DrawPoint(u8 x,u8 y,u8 color)
* @date       :2022-06-22
* @function   :在OLED屏幕中绘制点
* @parameters :x:点的x坐标
                y:点的y坐标
                                                                color:点的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
********************************************************************/
void OLED_DrawPoint(u8 x,u8 y,u8 color)
{
        OLED_Set_Pixel(x,y,color);
        OLED_Display();
}


/*******************************************************************
* @name       :void OLED_Fill(u8 sx,u8 sy,u8 ex,u8 ey,u8 color)
* @date       :2022-06-22
* @function   :填充指定区域
* @parameters :sx:指定填充区域的起始x坐标
                sy:指定填充区域的起始y坐标
                                                                ex:指定填充区域的结束x坐标
                                                                ey:指定填充区域的结束y坐标
                                                                color:指定区域的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
********************************************************************/
void OLED_Fill(u8 sx,u8 sy,u8 ex,u8 ey,u8 color)
{
        u8 i,j;
        u8 width=ex-sx+1;                        //得到填充的宽度
        u8 height=ey-sy+1;                //高度
        for(i=0;i<height;i++)
        {
                for(j=0;j<width;j++)
                {
                                OLED_Set_Pixel(sx+j, sy+i,color);
                }
        }
        OLED_Display();
}


/*******************************************************************
* @name       :void OLED_DrawLine(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
* @date       :2022-06-22
* @function   :在两点之间画一条线
* @parameters :x1:线的起始x点坐标
                y1:线的起始y点坐标
                                                                x2:线的结束x点坐标
                                                                y2:线的结束y点坐标
                                                                color:线条的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
********************************************************************/
void OLED_DrawLine(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
{
        u16 t;
        int xerr=0,yerr=0,delta_x,delta_y,distance;
        int incx,incy,uRow,uCol;
       
        delta_x=x2-x1; //计算坐标增量
        delta_y=y2-y1;
        uRow=x1;
        uCol=y1;
        if(delta_x>0)incx=1; //设置单步方向
        else if(delta_x==0)incx=0;//垂直线
        else {incx=-1;delta_x=-delta_x;}
        if(delta_y>0)incy=1;
        else if(delta_y==0)incy=0;//水平线
        else{incy=-1;delta_y=-delta_y;}
        if( delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴
        else distance=delta_y;
        for(t=0;t<=distance+1;t++ )//画线输出
        {
                OLED_Set_Pixel(uRow,uCol,color);
                xerr+=delta_x ;
                yerr+=delta_y ;
                if(xerr>distance)
                {
                        xerr-=distance;
                        uRow+=incx;
                }
                if(yerr>distance)
                {
                        yerr-=distance;
                        uCol+=incy;
                }
        }
        OLED_Display();
}


/*****************************************************************************
* @name       :void OLED_DrawRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
* @date       :2022-06-22
* @function   :绘制矩形
* @parameters :x1:矩形的起始x坐标
                y1:矩形的起始y坐标
                                                                x2:矩形的结束x坐标
                                                                y2:矩形的结束y坐标
                                                                color:线条的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
******************************************************************************/
void OLED_DrawRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
{
        OLED_DrawLine(x1,y1,x2,y1,color);
        OLED_DrawLine(x1,y1,x1,y2,color);
        OLED_DrawLine(x1,y2,x2,y2,color);
        OLED_DrawLine(x2,y1,x2,y2,color);
}


/*****************************************************************************
* @name       :void OLED_FillRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
* @date       :2022-06-22
* @function   :填充矩形
* @parameters :x1:填充矩形的起始x坐标
                y1:填充矩形的起始y坐标
                                                                x2:填充矩形的结束x坐标
                                                                y2:填充矩形的结束y坐标
                                                                color:矩形的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
******************************************************************************/  
void OLED_FillRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color)
{
        OLED_Fill(x1,y1,x2,y2,color);
}


/*****************************************************************************
* @name       :static void _draw_circle_8(u8 xc, u8 yc, u8 x, u8 y, u8 color)
* @date       :2022-06-22
* @function   :对称圆绘制算法(内部调用)
* @parameters :xc:圆心的x坐标
                yc:圆心的y坐标
                                                                x:相对于圆心的x坐标
                                                                y:相对于圆心的y坐标
                                                                color:圆的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
******************************************************************************/
static void _draw_circle_8(u8 xc, u8 yc, u8 x, u8 y, u8 color)
{
        OLED_Set_Pixel(xc + x, yc + y, color);
        OLED_Set_Pixel(xc - x, yc + y, color);
        OLED_Set_Pixel(xc + x, yc - y, color);
        OLED_Set_Pixel(xc - x, yc - y, color);
        OLED_Set_Pixel(xc + y, yc + x, color);
        OLED_Set_Pixel(xc - y, yc + x, color);
        OLED_Set_Pixel(xc + y, yc - x, color);
        OLED_Set_Pixel(xc - y, yc - x, color);
}


/*****************************************************************************
* @name       :void OLED_DrawCircle(u8 xc, u8 yc, u8 color, u8 r)
* @date       :2022-06-22
* @function   :在指定位置绘制指定大小的圆
* @parameters :xc:圆心的x坐标
                yc:圆心的y坐标
                                                                r:圆形半径
                                                                color:圆的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
******************************************************************************/
void OLED_DrawCircle(u8 xc, u8 yc, u8 color, u8 r)
{
        int x = 0, y = r,d;
        d = 3 - 2 * r;
        while (x <= y)
        {
                _draw_circle_8(xc, yc, x, y, color);
                if (d < 0)
                {
                                d = d + 4 * x + 6;
                }
                else
                {
                                d = d + 4 * (x - y) + 10;
                                y--;
                }
                x++;
        }
        OLED_Display();
}


/*****************************************************************************
* @name       :void OLED_FillCircle(u8 xc, u8 yc, u8 color, u8 r)
* @date       :2022-06-22
* @function   :在指定位置填充指定大小的圆
* @parameters :xc:圆心的x坐标
                yc:圆心的y坐标
                                                                r:圆形半径
                                                                color:圆的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
******************************************************************************/
void OLED_FillCircle(u8 xc, u8 yc, u8 color, u8 r)
{
        int x = 0, y = r, yi, d;
        d = 3 - 2 * r;
        while (x <= y)
        {
                        for (yi = x; yi <= y; yi++)
                        {
                                _draw_circle_8(xc, yc, x, yi, color);
                        }
                        if (d < 0)
                        {
                                d = d + 4 * x + 6;
                        }
                        else
                        {
                                d = d + 4 * (x - y) + 10;
                                y--;
                        }
                        x++;
        }
        OLED_Display();
}


/**********************************************************************************
* @name       :void OLED_DrawTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color)
* @date       :2022-06-22
* @function   :在指定位置绘制三角形
* @parameters :x0:三角形的第一点x坐标
                y0:三角形的第一点y坐标
                                                                x1:三角形的第二点x坐标
                                                                y1:三角形的第二点y坐标
                                                                x2:三角形的第三点x坐标
                                                                y2:三角形的第三点y坐标
                                                                color:三角形的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
***********************************************************************************/
void OLED_DrawTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color)
{
        OLED_DrawLine(x0,y0,x1,y1,color);
        OLED_DrawLine(x1,y1,x2,y2,color);
        OLED_DrawLine(x2,y2,x0,y0,color);
}



/*****************************************************************************
* @name       :static void _swap(u8 *a, u8 *b)
* @date       :2022-06-22
* @function   :交换两个号码(内部通话)
* @parameters :a:第一个号码的地址
                                                                b:第二个号码的地址
* @retvalue   :无
******************************************************************************/
static void _swap(u8 *a, u8 *b)
{
        u16 tmp;
  tmp = *a;
        *a = *b;
        *b = tmp;
}


/*****************************************************************************
* @name       :static void _draw_h_line(u8 x0,u8 x1,u8 y,u8 color)
* @date       :2022-06-22
* @function   :在显示屏中画一条水平线(内部调用)
* @parameters :x0:水平线的起始x坐标
                x1:水平线的结束x坐标
                                                                y:水平线的y坐标
                                                                color:线的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
******************************************************************************/
static void _draw_h_line(u8 x0,u8 x1,u8 y,u8 color)
{
        u8 i=0;
        for(i=x0;i<=x1;i++)
        {
                OLED_Set_Pixel(i, y, color);
        }
}


/*****************************************************************************
* @name       :void OLED_FillTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color)
* @date       :2022-06-22
* @function   :在指定位置填充三角形
* @parameters :x0:三角形的第一点x坐标
                y0:三角形的第一点y坐标
                                                                x1:三角形的第二点x坐标
                                                                y1:三角形的第二点y坐标
                                                                x2:三角形的第三点x坐标
                                                                y2:三角形的第三点y坐标
                                                                color:三角形的颜色值
                                                                      1-白色
                                                                                        0-黑色
* @retvalue   :无
******************************************************************************/
void OLED_FillTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color)
{
        u8 a, b, y, last;
        int dx01, dy01, dx02, dy02, dx12, dy12;
        long sa = 0;
        long sb = 0;
        if (y0 > y1)
        {
    _swap(&y0,&y1);
                _swap(&x0,&x1);
        }
        if (y1 > y2)
        {
    _swap(&y2,&y1);
                _swap(&x2,&x1);
        }
  if (y0 > y1)
        {
    _swap(&y0,&y1);
                _swap(&x0,&x1);
  }
        if(y0 == y2)
        {
                a = b = x0;
                if(x1 < a)
    {
                        a = x1;
    }
    else if(x1 > b)
    {
                        b = x1;
    }
    if(x2 < a)
    {
                        a = x2;
    }
                else if(x2 > b)
    {
                        b = x2;
    }
                _draw_h_line(a,b,y0,color);
    return;
        }
        dx01 = x1 - x0;
        dy01 = y1 - y0;
        dx02 = x2 - x0;
        dy02 = y2 - y0;
        dx12 = x2 - x1;
        dy12 = y2 - y1;
       
        if(y1 == y2)
        {
                last = y1;
        }
  else
        {
                last = y1-1;
        }
        for(y=y0; y<=last; y++)
        {
                a = x0 + sa / dy01;
                b = x0 + sb / dy02;
                sa += dx01;
    sb += dx02;
    if(a > b)
    {
                        _swap(&a,&b);
                }
                _draw_h_line(a,b,y,color);
        }
        sa = dx12 * (y - y1);
        sb = dx02 * (y - y0);
        for(; y<=y2; y++)
        {
                a = x1 + sa / dy12;
                b = x0 + sb / dy02;
                sa += dx12;
                sb += dx02;
                if(a > b)
                {
                        _swap(&a,&b);
                }
                _draw_h_line(a,b,y,color);
        }
        OLED_Display();
}


/*****************************************************************************
* @name       :void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size,u8 mode)
* @date       :2022-06-22
* @function   :显示单个英文字符
* @parameters :x:字符显示位置的起始x坐标
                y:字符显示位置的起始y坐标
                                                                chr:显示字符的ascii码(0~94)
                                                                Char_Size:显示字符的大小(8,16)
                                                                mode:0-白底黑字
                                                                     1-黑底白字
* @retvalue   :无
******************************************************************************/
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size,u8 mode)
{
        unsigned char c=0,i=0,tmp,j=0;
        c=chr-' ';                                                                                        //得到偏移后的值
        if(x>WIDTH-1){x=0;y=y+2;}
        if(Char_Size ==16)
        {
                for(i=0;i<16;i++)
                {
                        if(mode)
                        {
                                tmp = F8X16[c*16+i];
                        }
                        else
                        {
                                tmp = ~(F8X16[c*16+i]);
                        }
                        for(j=0;j<8;j++)
                        {
                                if(tmp&(0x80>>j))
                                {
                                        OLED_Set_Pixel(x+j, y+i,1);
                                }
                                else
                                {
                                        OLED_Set_Pixel(x+j, y+i,0);
                                }
                        }
                }
        }
        else if(Char_Size==8)
        {
                for(i=0;i<8;i++)
                {
                        if(mode)
                        {
                                tmp = F6x8[c];
                        }
                        else
                        {
                                tmp = ~(F6x8[c]);
                        }
                        for(j=0;j<8;j++)
                        {
                                if(tmp&(0x80>>j))
                                {
                                        OLED_Set_Pixel(x+j, y+i,1);
                                }
                                else
                                {
                                        OLED_Set_Pixel(x+j, y+i,0);
                                }
                        }
                }
        }
        else
        {
                return;
        }
        OLED_Display();
}


/*****************************************************************************
* @name       :void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size,u8 mode)
* @date       :2022-06-22
* @function   :显示英文字符串
* @parameters :x:英语字符串的起始x坐标
                y:英语字符串的起始y坐标
                                                                chr:英文字符串的起始地址
                                                                Char_Size:显示字符的大小
                                                                mode:0-白底黑字
                                                                     1-黑底白字
* @retvalue   :无
******************************************************************************/
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size,u8 mode)
{
        unsigned char j=0,csize;
        if(Char_Size == 16)
  {
          csize = Char_Size/2;
        }
  else if(Char_Size == 8)
  {
          csize = Char_Size/2+2;
        }
        else
        {
                return;
        }
        while (chr[j]!='\0')
        {
                OLED_ShowChar(x,y,chr[j],Char_Size,mode);
                x+=csize;
                if(x>120)
                {
                        x=0;
                        y+=Char_Size;
                }
                j++;
        }
}


/*****************************************************************************
* @name       :u32 mypow(u8 m,u8 n)
* @date       :2022-06-22
* @function   :获取m的n次方(内部调用)
* @parameters :m:the multiplier
                n:the power
* @retvalue   :m的n次方
******************************************************************************/
static u32 mypow(u8 m,u8 n)
{
        u32 result=1;
        while(n--)result*=m;
        return result;
}


/*****************************************************************************
* @name       :void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 Size,u8 mode)
* @date       :2022-06-22
* @function   :显示数字
* @parameters :x:数字的起始x坐标
                y:数字的起始y坐标
                                                                num:数字(0~4294967295)
                                                                len:显示数字的长度
                                                                Size:显示数字的大小
                                                                mode:0-白底黑字
                                                                     1-黑底白字
* @retvalue   :无
******************************************************************************/
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 Size,u8 mode)
{
        u8 t,temp;
        u8 enshow=0,csize;
  if(Size == 16)
  {
          csize = Size/2;
        }
  else if(Size == 8)
  {
          csize = Size/2+2;
        }
        else
        {
                return;
        }
        for(t=0;t<len;t++)
        {
                temp=(num/mypow(10,len-t-1))%10;
                if(enshow==0&&t<(len-1))
                {
                        if(temp==0)
                        {
                                OLED_ShowChar(x+csize*t,y,' ',Size,mode);
                                continue;
                        }else enshow=1;
                       
                }
                 OLED_ShowChar(x+csize*t,y,temp+'0',Size,mode);
        }
}


/*****************************************************************************
* @name       :void OLED_ShowFont16(u8 x,u8 y,u8 *s,u8 mode)
* @date       :2022-06-22
* @function   :显示单个16x16汉字
* @parameters :x:汉字的起始x坐标
                y:汉字的起始y坐标
                                                                s:汉字的起始地址
                                                                mode:0-白底黑字
                                                                     1-黑底白字
* @retvalue   :无
******************************************************************************/
void OLED_ShowFont16(u8 x,u8 y,u8 *s,u8 mode)
{
        u8 i,j,k,tmp;
        u16 num;
        num = sizeof(cfont16)/sizeof(typFNT_GB16);
  for(i=0;i<num;i++)
        {
                if((cfont16.Index[0] == *s) && (cfont16.Index[1] == *(s+1)))
                {
                        for(j=0;j<32;j++)
                        {
                                if(mode)
                                {
                                        tmp = cfont16.Msk[j];
                                }
                                else
                                {
                                        tmp = ~(cfont16.Msk[j]);
                                }
                                for(k=0;k<8;k++)
                                {
                                        if(tmp&(0x80>>k))
                                        {
                                                OLED_Set_Pixel(x+(j%2)*8+k, y+j/2,1);
                                        }
                                        else
                                        {
                                                OLED_Set_Pixel(x+(j%2)*8+k, y+j/2,0);
                                        }
                                }
                        }       
                        break;
                }       
        }
        OLED_Display();
}

/*****************************************************************************
* @name       :void OLED_ShowFont24(u8 x,u8 y,u8 *s,u8 mode)
* @date       :2022-06-22
* @function   :显示单个24x24汉字
* @parameters :x:汉字的起始x坐标
                y:汉字的起始y坐标
                                                                s:汉字的起始地址
                                                                mode:0-白底黑字
                                                                     1-黑底白字
* @retvalue   :无
******************************************************************************/
void OLED_ShowFont24(u8 x,u8 y,u8 *s,u8 mode)
{
        u8 i,j,k,tmp;
        u16 num;
        num = sizeof(cfont24)/sizeof(typFNT_GB24);
  for(i=0;i<num;i++)
        {
                if((cfont24.Index[0] == *s) && (cfont24.Index[1] == *(s+1)))
                {
                        for(j=0;j<72;j++)
                        {
                                if(mode)
                                {
                                        tmp = cfont24.Msk[j];
                                }
                                else
                                {
                                        tmp = ~(cfont24.Msk[j]);
                                }
                                for(k=0;k<8;k++)
                                {
                                        if(tmp&(0x80>>k))
                                        {
                                                OLED_Set_Pixel(x+(j%3)*8+k, y+j/3,1);
                                        }
                                        else
                                        {
                                                OLED_Set_Pixel(x+(j%3)*8+k, y+j/3,0);
                                        }
                                }
                        }       
                        break;
                }       
        }
        OLED_Display();
}

/*****************************************************************************
* @name       :void OLED_ShowFont32(u8 x,u8 y,u8 *s,u8 mode)
* @date       :2022-06-22
* @function   :显示单个32x32汉字
* @parameters :x:汉字的起始x坐标
                y:汉字的起始y坐标
                                                                s:汉字的起始地址
                                                                mode:0-白底黑字
                                                                     1-黑底白字
* @retvalue   :无
******************************************************************************/
void OLED_ShowFont32(u8 x,u8 y,u8 *s,u8 mode)
{
        u8 i,j,k,tmp;
        u16 num;
        num = sizeof(cfont32)/sizeof(typFNT_GB32);
  for(i=0;i<num;i++)
        {
                if((cfont32.Index[0] == *s) && (cfont32.Index[1] == *(s+1)))
                {
                        for(j=0;j<128;j++)
                        {
                                if(mode)
                                {
                                        tmp = cfont32.Msk[j];
                                }
                                else
                                {
                                        tmp = ~(cfont32.Msk[j]);
                                }
                                for(k=0;k<8;k++)
                                {
                                        if(tmp&(0x80>>k))
                                        {
                                                OLED_Set_Pixel(x+(j%4)*8+k, y+j/4,1);
                                        }
                                        else
                                        {
                                                OLED_Set_Pixel(x+(j%4)*8+k, y+j/4,0);
                                        }
                                }
                        }
                        break;
                }
        }
        OLED_Display();
}


/*****************************************************************************
* @name       :void OLED_ShowCHinese(u8 x,u8 y,u8 hsize,u8 *str,u8 mode)
* @date       :2022-06-22
* @function   :显示中文字符串
* @parameters :x:汉语字符串的起始x坐标
                y:汉语字符串的起始y坐标
                                                                size:中文字符串的大小
                                                                str:中文字符串的起始地址
                                                                mode:0-白底黑字
                                                                     1-黑底白字
* @retvalue   :无
******************************************************************************/
void OLED_ShowCHinese(u8 x,u8 y,u8 hsize,u8 *str,u8 mode)
{
        while(*str!='\0')
        {
                if(hsize == 16)
                {
                        OLED_ShowFont16(x,y,str,mode);
                }
                else if(hsize == 24)
                {
                        OLED_ShowFont24(x,y,str,mode);
                }
                else if(hsize == 32)
                {
                        OLED_ShowFont32(x,y,str,mode);
                }
                else
                {
                        return;
                }
                x+=hsize;
                if(x>WIDTH-hsize)
                {
                        x=0;
                        y+=hsize;
                }
                str+=2;
        }
}


/*****************************************************************************
* @name       :void OLED_DrawBMP(u8 x,u8 y,u8 width, u8 height, u8 BMP[], u8 mode)
* @date       :2022-06-22
* @function   :显示BMP单色图片
* @parameters :x:BMP单色图片的起始x坐标
                y:BMP单色图片的起始y坐标
                                                                width:BMP单色图片的宽度
                                                                height:BMP单色图片的高度
                                                                BMP:BMP单色图像阵列的起始地址
                                                                mode:0-白底黑字
                                                                     1-黑底白字
* @retvalue   :无
******************************************************************************/
void OLED_DrawBMP(u8 x,u8 y,u8 width, u8 height, u8 BMP[], u8 mode)
{
u8 i,j,k;
u8 tmp;
for(i=0;i<height;i++)
{
                for(j=0;j<(width+7)/8;j++)
                {
                        if(mode)
                        {
                                tmp = BMP[i*((width+7)/8)+j];
                        }
                        else
                        {
                                tmp = ~BMP[i*((width+7)/8)+j];
                        }
                        for(k=0;k<8;k++)
                        {
                                if(tmp&(0x80>>k))
                                {
                                        OLED_Set_Pixel(x+j*8+k, y+i,1);
                                }
                                else
                                {
                                        OLED_Set_Pixel(x+j*8+k, y+i,0);
                                }
                        }
                }
        }
        OLED_Display();
}


/*****************************************************************************
* @name       :void OLED_Test_MainPage(void)
* @date       :2022-06-22
* @function   :绘制综合测试程序主界面
* @parameters :无
* @retvalue   :无
******************************************************************************/
void OLED_Test_MainPage(void)
{
        OLED_ShowString(28,0,"daichuangkun",16,1);                                        //显示英文字符串
        OLED_ShowCHinese(28,20,16,"戴创昆",1);                        //显示中文汉字
        //OLED_ShowString(40,32,"64X128",16,1);
        OLED_ShowString(4,48,"123456789",16,1);        //显示数字
        //OLED_ShowString(4,48,"www.lcdwiki.com",16,1);
        delay_ms(1500);
        delay_ms(1500);
}


/*****************************************************************************
* @name       :void OLED_Test_Color(void)
* @date       :2022-06-22
* @function   :颜色填充测试(白色、黑色)
* @parameters :无
* @retvalue   :无
******************************************************************************/
void OLED_Test_Color(void)
{
         OLED_Fill(0,0,WIDTH-1,HEIGHT-1,0);
         OLED_ShowString(10,10,"BLACK",16,1);
         delay_ms(1000);
         OLED_Fill(0,0,WIDTH-1,HEIGHT-1,1);
         delay_ms(1500);
}


/*****************************************************************************
* @name       :void OLED_Test_Rectangular(void))
* @date       :2022-06-22
* @function   :矩形显示和填充测试
                                                                依次显示黑白矩形框,1000毫秒后,依次用黑色和白色填充矩形
* @parameters :无
* @retvalue   :无
******************************************************************************/
void OLED_Test_Rectangular(void)
{
        OLED_Fill(0,0,WIDTH/2-1,HEIGHT-1,0);
        OLED_Fill(WIDTH/2,0,WIDTH-1,HEIGHT-1,1);
        OLED_DrawRectangle(5, 5, WIDTH/2-1-5, HEIGHT-1-5,1);
        OLED_DrawRectangle(WIDTH/2-1+5, 5, WIDTH-1-5, HEIGHT-1-5,0);
        delay_ms(1000);
        OLED_FillRectangle(5, 5, WIDTH/2-1-5, HEIGHT-1-5,1);
        OLED_FillRectangle(WIDTH/2-1+5, 5, WIDTH-1-5, HEIGHT-1-5,0);
        delay_ms(1500);
}


/*****************************************************************************
* @name       :void OLED_Test_Circle(void)
* @date       :2022-06-22
* @function   :循环显示和填充测试依次显示黑白圆形框,1000毫秒后,依次用黑色、白色填充圆形
* @parameters :无
* @retvalue   :无
******************************************************************************/
void OLED_Test_Circle(void)
{
        OLED_Fill(0,0,WIDTH/2-1,HEIGHT-1,0);
        OLED_Fill(WIDTH/2,0,WIDTH-1,HEIGHT-1,1);
        OLED_DrawCircle(WIDTH/2/2-1, HEIGHT/2-1, 1, 27);
        OLED_DrawCircle(WIDTH/2+WIDTH/2/2-1, HEIGHT/2-1, 0, 27);
        delay_ms(1000);
        OLED_FillCircle(WIDTH/2/2-1, HEIGHT/2-1, 1, 27);
        OLED_FillCircle(WIDTH/2+WIDTH/2/2-1, HEIGHT/2-1, 0, 27);
        delay_ms(1500);
}


/*****************************************************************************
* @name       :void OLED_Test_Triangle(void)
* @date       :2022-06-22
* @function   :三角形显示和填充测试依次显示黑白三角形框,1000毫秒后,依次用黑色和白色填充三角形
* @parameters :无
* @retvalue   :无
******************************************************************************/
void OLED_Test_Triangle(void)
{
        OLED_Fill(0,0,WIDTH/2-1,HEIGHT-1,0);
        OLED_Fill(WIDTH/2,0,WIDTH-1,HEIGHT-1,1);
        OLED_DrawTriangel(5,HEIGHT-1-5,WIDTH/2/2-1,5,WIDTH/2-1-5,HEIGHT-1-5,1);
        OLED_DrawTriangel(WIDTH/2-1+5,HEIGHT-1-5,WIDTH/2+WIDTH/2/2-1,5,WIDTH-1-5,HEIGHT-1-5,0);
        delay_ms(1000);
        OLED_FillTriangel(5,HEIGHT-1-5,WIDTH/2/2-1,5,WIDTH/2-1-5,HEIGHT-1-5,1);
        OLED_FillTriangel(WIDTH/2-1+5,HEIGHT-1-5,WIDTH/2+WIDTH/2/2-1,5,WIDTH-1-5,HEIGHT-1-5,0);
        delay_ms(1500);
}


/*****************************************************************************
* @name       :void OLED_TEST_English(void)
* @date       :2022-06-22
* @function   :英文显示测试
* @parameters :无
* @retvalue   :无
******************************************************************************/
void OLED_TEST_English(void)
{
        OLED_ShowString(0,5,"6x8:abcdefghijklmnopqrstuvwxyz",8,1);
        OLED_ShowString(0,25,"8x16:abcdefghijklmnopqrstuvwxyz",16,1);
        delay_ms(1000);
        OLED_ShowString(0,5,"6x8:ABCDEFGHIJKLMNOPQRSTUVWXYZ",8,1);
        OLED_ShowString(0,25,"8x16:ABCDEFGHIJKLMNOPQRSTUVWXYZ",16,1);
        delay_ms(1500);
}


/*****************************************************************************
* @name       :void OLED_TEST_Number_Character(void)
* @date       :2022-06-22
* @function   :数字和字符显示测试
* @parameters :无
* @retvalue   :无
******************************************************************************/
void OLED_TEST_Number_Character(void)
{
        OLED_Fill(0,0,WIDTH-1,HEIGHT/2-1,0);
        OLED_ShowString(0,0,"6x8:!\"#$%&'()*+,-./:;<=>?@[]\\^_`~{}|",8,1);
        OLED_ShowNum(30,16,1234567890,10,8,1);
        delay_ms(1000);
        OLED_Clear(0);
  OLED_ShowString(0,0,"8x16:!\"#$%&'()*+,-./:;<=>?@[]\\^_`~{}|",16,1);
        OLED_ShowNum(40,32,1234567890,10,16,1);
        delay_ms(1500);
        OLED_Clear(0);
}


/*****************************************************************************
* @name       :void OLED_Test_Chinese(void)
* @date       :2022-06-22
* @function   :中文显示测试
* @parameters :无
* @retvalue   :无
******************************************************************************/
void OLED_Test_Chinese(void)
{
        OLED_ShowString(45,0,"16x16",8,1);
        OLED_ShowCHinese(16,20,16,"戴创昆",1);
        delay_ms(1000);
        OLED_Clear(0);
        OLED_ShowString(45,0,"24x24",8,1);
        OLED_ShowCHinese(16,20,24,"戴创昆",1);
        delay_ms(1000);
        OLED_Clear(0);
        OLED_ShowString(45,0,"32x32",8,1);
        OLED_ShowCHinese(0,20,32,"戴创昆",1);
  delay_ms(1000);
        OLED_Clear(0);
}


/*****************************************************************************
* @name       :void OLED_Test_BMP(void)
* @date       :2022-06-22
* @function   :BMP单色图片显示测试
* @parameters :无
* @retvalue   :无
******************************************************************************/
void OLED_Test_BMP(void)
{
        OLED_DrawBMP(0,0,128,64, BMP2, 1);
        delay_ms(1000);
        OLED_DrawBMP(0,0,128,64, BMP3, 1);
        delay_ms(1000);
        OLED_DrawBMP(0,0,128,64, BMP4, 1);
        delay_ms(1000);
}


/*****************************************************************************
* @name       :void OLED_Test_Menu1(void)
* @date       :2022-06-22
* @function   :中文选择菜单显示测试
* @parameters :无
* @retvalue   :无
******************************************************************************/
void OLED_Test_Menu1(void)
{
        OLED_Fill(0,0,WIDTH-1,15,1);
        OLED_ShowCHinese(32,0,16,"系统设置",0);
        OLED_DrawCircle(10, 24, 1,6);
        OLED_DrawCircle(10, 24, 1,3);
        OLED_DrawCircle(10, 40, 1,6);
        OLED_DrawCircle(10, 40, 1,3);
        OLED_DrawCircle(10, 56, 1,6);
        OLED_DrawCircle(10, 56, 1,3);
        OLED_ShowString(20,16,"A.",16,1);
        OLED_ShowCHinese(36,16,16,"音量设置",1);
        OLED_ShowString(20,32,"B.",16,1);
        OLED_ShowCHinese(36,32,16,"颜色设置",1);
        OLED_ShowString(20,48,"C.",16,1);
        OLED_ShowCHinese(36,48,16,"网络设置",1);
        OLED_DrawRectangle(0, 0,WIDTH-1,HEIGHT-1,1);
        OLED_DrawLine(WIDTH-1-10, 15, WIDTH-1-10, HEIGHT-1,1);
        OLED_FillTriangel(WIDTH-1-9,20,WIDTH-1-5,16,WIDTH-1-1,20,1);
        OLED_FillTriangel(WIDTH-1-9,HEIGHT-1-5,WIDTH-1-5,HEIGHT-1-1,WIDTH-1-1,HEIGHT-1-5,1);
        OLED_FillCircle(10, 24, 1,3);
        OLED_Fill(20,16,99,31,1);
        OLED_ShowString(20,16,"A.",16,0);
        OLED_ShowCHinese(36,16,16,"音量设置",0);
        OLED_Fill(WIDTH-1-9,23,WIDTH-1-1,28,1);
        delay_ms(1500);
        OLED_FillCircle(10, 24, 0,3);
        OLED_DrawCircle(10, 24, 1,3);
        OLED_Fill(20,16,99,31,0);
        OLED_ShowString(20,16,"A.",16,1);
        OLED_ShowCHinese(36,16,16,"音量设置",1);
        OLED_Fill(WIDTH-1-9,23,WIDTH-1-1,28,0);
        OLED_FillCircle(10, 40, 1,3);
        OLED_Fill(20,32,99,47,1);
        OLED_ShowString(20,32,"B.",16,0);
        OLED_ShowCHinese(36,32,16,"颜色设置",0);
        OLED_Fill(WIDTH-1-9,37,WIDTH-1-1,42,1);
        delay_ms(1500);
        OLED_FillCircle(10, 40, 0,3);
        OLED_DrawCircle(10, 40, 1,3);
        OLED_Fill(20,32,99,47,0);
        OLED_ShowString(20,32,"B.",16,1);
        OLED_ShowCHinese(36,32,16,"颜色设置",1);
        OLED_Fill(WIDTH-1-9,37,WIDTH-1-1,42,0);
        OLED_FillCircle(10, 56, 1,3);
        OLED_Fill(20,48,99,63,1);
        OLED_ShowString(20,48,"C.",16,0);
        OLED_ShowCHinese(36,48,16,"网络设置",0);
        OLED_Fill(WIDTH-1-9,HEIGHT-1-13,WIDTH-1-1,HEIGHT-1-8,1);
        delay_ms(1500);
}


/*****************************************************************************
* @name       :void OLED_Test_Menu2(void)
* @date       :2022-06-22
* @function   :英文天气界面显示测试
* @parameters :无
* @retvalue   :无
******************************************************************************/
void OLED_Test_Menu2(void)
{
        u8 i;
        srand(123456);
        OLED_DrawLine(0, 10, WIDTH-1, 10,1);
        OLED_DrawLine(WIDTH/2-1,11,WIDTH/2-1,HEIGHT-1,1);
        OLED_DrawLine(WIDTH/2-1,10+(HEIGHT-10)/2-1,WIDTH-1,10+(HEIGHT-10)/2-1,1);
        OLED_ShowString(0,1,"2019-08-17",8,1);
        OLED_ShowString(78,1,"Saturday",8,1);
        OLED_ShowString(14,HEIGHT-1-10,"Cloudy",8,1);
        OLED_ShowString(WIDTH/2-1+2,13,"TEMP",8,1);
        OLED_DrawCircle(WIDTH-1-19, 25, 1,2);
        OLED_ShowString(WIDTH-1-14,20,"C",16,1);
        OLED_ShowString(WIDTH/2-1+9,20,"32.5",16,1);
        OLED_ShowString(WIDTH/2-1+2,39,"PM2.5",8,1);
        OLED_ShowString(WIDTH/2-1+5,46,"90ug/m3",16,1);
        OLED_DrawBMP(6,16,51,32, BMP5, 1);
        for(i=0;i<15;i++)
        {
                OLED_ShowNum(WIDTH/2-1+9,20,rand()%4,1,16,1);
                OLED_ShowNum(WIDTH/2-1+9+8,20,rand()%10,1,16,1);
                OLED_ShowNum(WIDTH/2-1+9+8+16,20,rand()%10,1,16,1);
                OLED_ShowNum(WIDTH/2-1+5,46,rand()%10,1,16,1);
                OLED_ShowNum(WIDTH/2-1+5+8,46,rand()%10,1,16,1);
    delay_ms(500);
        }
}



使用特权

评论回复
7
wangtaohui|  楼主 | 2024-1-31 13:44 | 只看该作者
oled.h


/****************************************************************************************************
//=========================================电源接线================================================//
// OLED模块               STM32单片机
//   VCC         接       DC 5V/3.3V      //OLED屏电源正
//   GND         接          GND          //OLED屏电源地
//=======================================液晶屏数据线接线==========================================//
//本模块默认数据总线类型为4线制SPI
// OLED模块               STM32单片机
//   D1          接          PB15        //OLED屏SPI写信号
//=======================================液晶屏控制线接线==========================================//
// OLED模块               STM32单片机
//   CS          接          PB11        //OLED屏片选控制信号
//   RES         接          PB12        //OLED屏复位控制信号
//   DC          接          PB10        //OLED屏数据/命令选择控制信号
//   D0          接          PB13        //OLED屏SPI时钟信号
//=========================================触摸屏接线=========================================//
//本模块不带触摸功能,所以不需要触摸屏接线
****************************************************************************************************/       


#ifndef __OLED_H
#define __OLED_H               


#include "sys.h"
#include "stdlib.h"
#include "string.h"          
#include "delay.h"
#include "spi2.h"


//--------------OLED参数定义---------------------
#define PAGE_SIZE                        8
#define XLevelL                                0x00
#define XLevelH                                0x10
#define YLevel                                0xB0
#define        Brightness                0xFF
#define WIDTH                                        128
#define HEIGHT                                64       


//-------------写命令和数据定义-------------------
#define OLED_CMD                        0                //写命令
#define OLED_DATA                        1                //写数据


//-----------------OLED端口定义----------------

#define OLED_RST_PIN                GPIO_Pin_8                                                        //复位信号
#define OLED_RST_PORT                GPIOA                                                                                //复位信号
#define OLED_RST_CLK                RCC_APB2Periph_GPIOA                //复位信号

#define OLED_DC_PIN                        GPIO_Pin_11                                                        //数据/命令控制信号
#define OLED_DC_PORT                GPIOA                                                                                //数据/命令控制信号
#define OLED_DC_CLK                        RCC_APB2Periph_GPIOA                //数据/命令控制信号

#define OLED_CS_PIN                        GPIO_Pin_12                                                        //片选信号
#define OLED_CS_PORT                GPIOA                                                                                //片选信号
#define OLED_CS_CLK                        RCC_APB2Periph_GPIOA                //片选信号


//-----------------OLED端口操作定义----------------
                                          
#define OLED_RST_PIN_Clr()        GPIO_ResetBits(OLED_RST_PORT,OLED_RST_PIN)
#define OLED_RST_PIN_Set()        GPIO_SetBits        (OLED_RST_PORT,OLED_RST_PIN)

#define OLED_DC_PIN_Clr()                GPIO_ResetBits(OLED_DC_PORT,OLED_DC_PIN)
#define OLED_DC_PIN_Set()                GPIO_SetBits        (OLED_DC_PORT,OLED_DC_PIN)

#define OLED_CS_PIN_Clr()                GPIO_ResetBits(OLED_CS_PORT,OLED_CS_PIN)
#define OLED_CS_PIN_Set()                GPIO_SetBits        (OLED_CS_PORT,OLED_CS_PIN)


void OLED_Write_Byte(unsigned dat,unsigned cmd);                                                                                                                //将一个字节的内容写入OLED屏幕
void OLED_Display_On(void);                                                                                                                                                                                                        //打开OLED显示
void OLED_Display_Off(void);                                                                                                                                                                                                //关闭OLED显示
void OLED_Set_Pos(unsigned char x, unsigned char y);                                                                                                //在OLED屏幕中设置坐标
void OLED_Reset(void);                                                                                                                                                                                                                        //重置OLED屏幕显示
void OLED_Set_Pixel(unsigned char x, unsigned char y,unsigned char color);        //将像素值设置为RAM
void OLED_Display(void);                                                                                                                                                                                                                //在OLED屏幕中显示
void OLED_Clear(unsigned dat);                                                                                                                                                                                        //清除OLED屏幕显示
void OLED_Init_GPIO(void);                                                                                                                                                                                                        //OLED引脚初始化
void OLED_Init(void);                                                                                                                                                                                                                                //初始化OLED SSD1306控制IC

void OLED_DrawPoint(u8 x, u8 y, u8 color);                                                                                                                                        //在OLED屏幕中绘制点
void OLED_Fill(u8 sx,u8 sy,u8 ex,u8 ey,u8 color);                                                                                                                //填充指定区域
void OLED_DrawLine(u8 x1, u8 y1, u8 x2, u8 y2,u8 color);                                                                                //在两点之间画一条线
void OLED_DrawRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color);                                                                //绘制矩形
void OLED_FillRectangle(u8 x1, u8 y1, u8 x2, u8 y2,u8 color);                                                                //填充矩形
void OLED_DrawCircle(u8 xc, u8 yc, u8 color, u8 r);                                                                                                        //在指定位置绘制指定大小的圆
void OLED_FillCircle(u8 xc, u8 yc, u8 color, u8 r);                                                                                                        //在指定位置填充指定大小的圆
void OLED_DrawTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color);                                //在指定位置绘制三角形
void OLED_FillTriangel(u8 x0,u8 y0,u8 x1,u8 y1,u8 x2,u8 y2,u8 color);                                //在指定位置填充三角形
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size,u8 mode);                                                                        //显示单个英文字符
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 Size,u8 mode);                                                                //显示英文字符串
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size,u8 mode);                                                                //显示数字
void OLED_ShowFont16(u8 x,u8 y,u8 *s,u8 mode);                                                                                                                        //显示单个16x16汉字
void OLED_ShowFont24(u8 x,u8 y,u8 *s,u8 mode);                                                                                                                        //显示单个24x24汉字
void OLED_ShowFont32(u8 x,u8 y,u8 *s,u8 mode);                                                                                                                        //显示单个32x32汉字
void OLED_ShowCHinese(u8 x,u8 y,u8 hsize,u8 *str,u8 mode);                                                                        //显示中文字符串
void OLED_DrawBMP(u8 x,u8 y,u8 width, u8 height, u8 BMP[], u8 mode);                                //显示BMP单色图片

void OLED_Test_MainPage(void);                                                                                                                                                                                        //绘制综合测试程序主界面
void OLED_Test_Color(void);                                                                                                                                                                                                        //颜色填充测试(白色、黑色)
void OLED_Test_Rectangular(void);                                                                                                                                                                                //矩形显示和填充测试
void OLED_Test_Circle(void);                                                                                                                                                                                                //循环显示和填充测试依次显示黑白圆形框,1000毫秒后,依次用黑色、白色填充圆形
void OLED_Test_Triangle(void);                                                                                                                                                                                        //三角形显示和填充测试依次显示黑白三角形框,1000毫秒后,依次用黑色和白色填充三角形
void OLED_TEST_English(void);                                                                                                                                                                                                //英文显示测试
void OLED_TEST_Number_Character(void);                                                                                                                                                        //数字和字符显示测试
void OLED_Test_Chinese(void);                                                                                                                                                                                                //中文显示测试
void OLED_Test_BMP(void);                                                                                                                                                                                                                //BMP单色图片显示测试
void OLED_Test_Menu1(void);                                                                                                                                                                                                        //中文选择菜单显示测试
void OLED_Test_Menu2(void);                                                                                                                                                                                                        //英文天气界面显示测试


#endif


使用特权

评论回复
8
wangtaohui|  楼主 | 2024-1-31 13:44 | 只看该作者
spi2.c


#include "spi2.h"


void SPI2_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
  SPI_InitTypeDef  SPI_InitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,  ENABLE );        //SPI2时钟使能
       
        RCC_APB2PeriphClockCmd(SPI2_SCK_CLK, ENABLE );                                        //PORTB时钟使能
        GPIO_InitStructure.GPIO_Pin = SPI2_SCK_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                        //PB13复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(SPI2_SCK_PORT, &GPIO_InitStructure);                                        //初始化GPIOB
       
        RCC_APB2PeriphClockCmd(SPI2_MOSI_CLK, ENABLE );                                        //PORTB时钟使能
        GPIO_InitStructure.GPIO_Pin = SPI2_MOSI_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                        //PB15复用推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(SPI2_MOSI_PORT, &GPIO_InitStructure);                                        //初始化GPIOB
       
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;                        //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                                                                                                //设置SPI工作模式:设置为主SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                                                                                                //设置SPI的数据大小:SPI发送接收8位帧结构
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                                                                                                        //串行同步时钟的空闲状态为高电平
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                                                                                                                //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                                                                                                                //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;                        //定义波特率预分频的值:波特率预分频值为2
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                                                                                        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
        SPI_InitStructure.SPI_CRCPolynomial = 7;                                                                                                                                //CRC值计算的多项式
        SPI_Init(SPI2, &SPI_InitStructure);                                                                                                                                                        //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
       
        SPI_Cmd(SPI2, ENABLE);                //使能SPI外设
}


//SPI 速度设置函数
//SpeedSet:
//SPI_BaudRatePrescaler_2   2分频
//SPI_BaudRatePrescaler_8   8分频
//SPI_BaudRatePrescaler_16  16分频
//SPI_BaudRatePrescaler_256 256分频
void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler)
{
  assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
        SPI2->CR1&=0XFFC7;
        SPI2->CR1|=SPI_BaudRatePrescaler;                //设置SPI2速度
        SPI_Cmd(SPI2,ENABLE);
}


//SPIx 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u8 SPI2_ReadWriteByte(u8 TxData)
{
        u8 retry=0;
        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET)                //检查指定的SPI标志位设置与否:发送缓存空标志位
        {
                retry++;
                if(retry>200)
                        return 0;
        }
        SPI_I2S_SendData(SPI2, TxData);                //通过外设SPIx发送一个数据
        retry=0;
       
        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET)                //检查指定的SPI标志位设置与否:接受缓存非空标志位
        {
                retry++;
                if(retry>200)return 0;
        }
        return SPI_I2S_ReceiveData(SPI2);                //返回通过SPIx最近接收的数据
}


/*****************************************************************************
* @name       :u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
* @date       :2022-06-22
* @function   :使用STM32的硬件SPI写入一个字节的数据
* @parameters :SPIx:SPI类型,x表示1,2,3
                Byte:要写入的数据
* @retvalue   :总线接收的数据
******************************************************************************/
u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
{
        /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);

  /* Send byte through the SPI1 peripheral */
  SPI_I2S_SendData(SPIx, Byte);

  /* Wait to receive a byte */
  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);

  /* Return the byte read from the SPI bus */
  return SPI_I2S_ReceiveData(SPIx);
}


使用特权

评论回复
9
wangtaohui|  楼主 | 2024-1-31 13:45 | 只看该作者
spi2.h


#ifndef __SPI2_H
#define __SPI2_H


#include "sys.h"
#include "oled.h"


//--------------SPI端口操作定义---------------------

#define SPI2_SCK_PIN                GPIO_Pin_13                                                        //时钟信号
#define SPI2_SCK_PORT                GPIOB                                                                                //时钟信号
#define SPI2_SCK_CLK                RCC_APB2Periph_GPIOB                //时钟信号

#define SPI2_MOSI_PIN                GPIO_Pin_15                                                        //数据发送信号
#define SPI2_MOSI_PORT        GPIOB                                                                                //数据发送信号
#define SPI2_MOSI_CLK                RCC_APB2Periph_GPIOB                //数据发送信号

#define        SPI2_SCK_PIN_SET()          GPIO_SetBits        (SPI2_SCK_PORT,SPI2_SCK_PIN)
#define        SPI2_SCK_PIN_CLR()          GPIO_ResetBits(SPI2_SCK_PORT,SPI2_SCK_PIN)

#define        SPI2_MOSI_PIN_SET()          GPIO_SetBits        (SPI2_MOSI_PORT,SPI2_MOSI_PIN)
#define        SPI2_MOSI_PIN_CLR()          GPIO_ResetBits(SPI2_MOSI_PORT,SPI2_MOSI_PIN)


void SPI2_Init(void);                                                                                                        //初始化SPI口
void SPI2_SetSpeed(u8 SpeedSet);                                                        //设置SPI速度
u8 SPI2_ReadWriteByte(u8 TxData);                                                        //SPI总线读写一个字节
u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte);        //使用STM32的硬件SPI写入一个字节的数据


#endif


使用特权

评论回复
10
wangtaohui|  楼主 | 2024-1-31 13:45 | 只看该作者
oledfont.h


#ifndef __OLEDFONT_H
#define __OLEDFONT_H


//常用ASCII表
//偏移量32
//ASCII字符集
//偏移量32
//大小:6*8
//逐行式,顺向(高位在前)
/************************************6*8的点阵************************************/
const unsigned char F6x8[][8] =
{
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // sp
        0x10,0x10,0x10,0x10,0x00,0x10,0x00,0x00, // !
        0x28,0x28,0x28,0x00,0x00,0x00,0x00,0x00, // "
        0x28,0x28,0x7C,0x28,0x7C,0x28,0x28,0x00, // #
        0x10,0x3C,0x50,0x38,0x14,0x78,0x10,0x00, // $
        0x00,0x4C,0x2C,0x10,0x08,0x60,0x60,0x00, // %
        0x30,0x48,0x50,0x20,0x54,0x48,0x34,0x00, // &
        0x30,0x10,0x20,0x00,0x00,0x00,0x00,0x00, // '
        0x08,0x10,0x20,0x20,0x20,0x10,0x08,0x00, // (
        0x20,0x10,0x08,0x08,0x08,0x10,0x20,0x00, // )
        0x00,0x10,0x54,0x38,0x54,0x10,0x00,0x00, // *
        0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00, // +
        0x00,0x00,0x00,0x00,0x00,0x18,0x08,0x10, // ,
        0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00, // -
        0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00, // .
        0x00,0x04,0x08,0x10,0x20,0x40,0x00,0x00, // /
        0x38,0x44,0x4C,0x54,0x64,0x44,0x38,0x00, // 0
        0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00, // 1
        0x38,0x44,0x04,0x08,0x10,0x20,0x7C,0x00, // 2
        0x7C,0x08,0x10,0x08,0x04,0x44,0x38,0x00, // 3
        0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x00, // 4
        0x7C,0x40,0x78,0x04,0x04,0x44,0x38,0x00, // 5
        0x18,0x20,0x40,0x78,0x44,0x44,0x38,0x00, // 6
        0x7C,0x04,0x08,0x10,0x20,0x20,0x20,0x00, // 7
        0x38,0x44,0x44,0x38,0x44,0x44,0x38,0x00, // 8
        0x38,0x44,0x44,0x3C,0x04,0x08,0x30,0x00, // 9
        0x00,0x30,0x30,0x00,0x30,0x30,0x00,0x00, // :
        0x00,0x30,0x30,0x00,0x30,0x10,0x20,0x00, // ;
        0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x00, // <
        0x00,0x00,0x7C,0x00,0x7C,0x00,0x00,0x00, // =
        0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x00, // >
        0x38,0x44,0x04,0x08,0x10,0x00,0x10,0x00, // ?
        0x38,0x44,0x04,0x34,0x5C,0x44,0x38,0x00, // @
        0x10,0x28,0x44,0x44,0x7C,0x44,0x44,0x00, // A
        0x78,0x44,0x44,0x78,0x44,0x44,0x78,0x00, // B
        0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00, // C
        0x70,0x48,0x44,0x44,0x44,0x48,0x70,0x00, // D
        0x7C,0x40,0x40,0x78,0x40,0x40,0x7C,0x00, // E
        0x7C,0x40,0x40,0x78,0x40,0x40,0x40,0x00, // F
        0x38,0x44,0x40,0x5C,0x44,0x44,0x3C,0x00, // G
        0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x00, // H
        0x38,0x10,0x10,0x10,0x10,0x10,0x38,0x00, // I
        0x1C,0x08,0x08,0x08,0x08,0x48,0x30,0x00, // J
        0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x00, // K
        0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00, // L
        0x44,0x6C,0x54,0x54,0x44,0x44,0x44,0x00, // M
        0x44,0x44,0x64,0x54,0x4C,0x44,0x44,0x00, // N
        0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00, // O
        0x78,0x44,0x44,0x78,0x40,0x40,0x40,0x00, // P
        0x38,0x44,0x44,0x44,0x54,0x48,0x34,0x00, // Q
        0x78,0x44,0x44,0x78,0x50,0x48,0x44,0x00, // R
        0x3C,0x40,0x40,0x38,0x04,0x04,0x78,0x00, // S
        0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x00, // T
        0x44,0x44,0x44,0x44,0x44,0x44,0x38,0x00, // U
        0x44,0x44,0x44,0x44,0x44,0x28,0x10,0x00, // V
        0x44,0x44,0x44,0x54,0x54,0x54,0x28,0x00, // W
        0x44,0x44,0x28,0x10,0x28,0x44,0x44,0x00, // X
        0x44,0x44,0x44,0x28,0x10,0x10,0x10,0x00, // Y
        0x7C,0x04,0x08,0x10,0x20,0x40,0x7C,0x00, // Z
        0x38,0x20,0x20,0x20,0x20,0x20,0x38,0x00, // [
        0x00,0x40,0x20,0x10,0x08,0x04,0x00,0x00, // '\'
        0x38,0x08,0x08,0x08,0x08,0x08,0x38,0x00, // ]
        0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00, // ^
        0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00, // _
        0x20,0x10,0x08,0x00,0x00,0x00,0x00,0x00, // '
        0x00,0x00,0x38,0x04,0x3C,0x44,0x3C,0x00, // a
        0x40,0x40,0x58,0x64,0x44,0x44,0x78,0x00, // b
        0x00,0x00,0x38,0x40,0x40,0x44,0x38,0x00, // c
        0x04,0x04,0x34,0x4C,0x44,0x44,0x3C,0x00, // d
        0x00,0x00,0x38,0x44,0x7C,0x40,0x38,0x00, // e
        0x38,0x24,0x20,0x70,0x20,0x20,0x20,0x00, // f
        0x00,0x00,0x3C,0x44,0x44,0x3C,0x04,0x38, // g
        0x40,0x40,0x58,0x64,0x44,0x44,0x44,0x00, // h
        0x10,0x00,0x30,0x10,0x10,0x10,0x38,0x00, // i
        0x08,0x00,0x18,0x08,0x08,0x08,0x48,0x30, // j
        0x40,0x40,0x48,0x50,0x60,0x50,0x48,0x00, // k
        0x30,0x10,0x10,0x10,0x10,0x10,0x38,0x00, // l
        0x00,0x00,0x68,0x54,0x54,0x44,0x44,0x00, // m
        0x00,0x00,0x58,0x64,0x44,0x44,0x44,0x00, // n
        0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00, // o
        0x00,0x00,0x58,0x64,0x64,0x58,0x40,0x40, // p
        0x00,0x00,0x34,0x4C,0x4C,0x34,0x04,0x04, // q
        0x00,0x00,0x58,0x64,0x40,0x40,0x40,0x00, // r
        0x00,0x00,0x3C,0x40,0x38,0x04,0x78,0x00, // s
        0x20,0x20,0x70,0x20,0x20,0x24,0x18,0x00, // t
        0x00,0x00,0x44,0x44,0x44,0x4C,0x34,0x00, // u
        0x00,0x00,0x44,0x44,0x44,0x28,0x10,0x00, // v
        0x00,0x00,0x44,0x44,0x54,0x54,0x28,0x00, // w
        0x00,0x00,0x44,0x28,0x10,0x28,0x44,0x00, // x
        0x00,0x00,0x44,0x44,0x44,0x3C,0x04,0x38, // y
        0x00,0x00,0x7C,0x08,0x10,0x20,0x7C,0x00, // z
        0x10,0x20,0x20,0x40,0x20,0x20,0x10,0x00, // {
        0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00, // |
        0x20,0x10,0x10,0x08,0x10,0x10,0x20,0x00, // }
        0x00,0x00,0x00,0x20,0x54,0x08,0x00,0x00, // ~
};


//常用ASCII表
//偏移量32
//ASCII字符集
//偏移量32
//大小:8*16
//逐行式,顺向(高位在前)
/****************************************8*16的点阵************************************/
const unsigned char F8X16[]=          
{
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
  0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x18,0x18,0x00,0x00,//! 1
  0x00,0x12,0x36,0x24,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
  0x00,0x00,0x00,0x24,0x24,0x24,0xFE,0x48,0x48,0x48,0xFE,0x48,0x48,0x48,0x00,0x00,//# 3
  0x00,0x00,0x10,0x38,0x54,0x54,0x50,0x30,0x1C,0x14,0x14,0x54,0x54,0x38,0x10,0x10,//$ 4
  0x00,0x00,0x00,0x44,0xA4,0xA8,0xA8,0xA8,0x54,0x1A,0x2A,0x2A,0x2A,0x44,0x00,0x00,//% 5
  0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x50,0x6E,0xA4,0x94,0x88,0x89,0x76,0x00,0x00,//& 6
  0x00,0x60,0x60,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
  0x00,0x02,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x02,0x00,//( 8
  0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,0x00,//) 9
  0x00,0x00,0x00,0x00,0x10,0x10,0xD6,0x38,0x38,0xD6,0x10,0x10,0x00,0x00,0x00,0x00,//* 10
  0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x10,0x00,0x00,0x00,//+ 11
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x20,0xC0,//, 12
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//- 13
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,//. 14
  0x00,0x00,0x01,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,/// 15
  0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,//0 16
  0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,//1 17
  0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,//2 18
  0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,//3 19
  0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,//4 20
  0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,//5 21
  0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,//6 22
  0x00,0x00,0x00,0x7E,0x42,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,//7 23
  0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,//8 24
  0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,//9 25
  0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,//: 26
  0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x08,0x30,0x00,//; 27
  0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00,//< 28
  0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,//= 29
  0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x40,0x00,0x00,//> 30
  0x00,0x00,0x00,0x3C,0x42,0x42,0x62,0x02,0x04,0x08,0x08,0x00,0x18,0x18,0x00,0x00,//? 31
  0x00,0x00,0x00,0x38,0x44,0x5A,0xAA,0xAA,0xAA,0xAA,0xB4,0x42,0x44,0x38,0x00,0x00,//@ 32
  0x00,0x00,0x00,0x10,0x10,0x18,0x28,0x28,0x24,0x3C,0x44,0x42,0x42,0xE7,0x00,0x00,//A 33
  0x00,0x00,0x00,0xF8,0x44,0x44,0x44,0x78,0x44,0x42,0x42,0x42,0x44,0xF8,0x00,0x00,//B 34
  0x00,0x00,0x00,0x3E,0x42,0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x44,0x38,0x00,0x00,//C 35
  0x00,0x00,0x00,0xF8,0x44,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x44,0xF8,0x00,0x00,//D 36
  0x00,0x00,0x00,0xFE,0x42,0x48,0x48,0x78,0x48,0x48,0x40,0x42,0x42,0xFE,0x00,0x00,//E 37
  0x00,0x00,0x00,0xFE,0x42,0x48,0x48,0x78,0x48,0x48,0x40,0x40,0x40,0xE0,0x00,0x00,//F 38
  0x00,0x00,0x00,0x3C,0x44,0x44,0x80,0x80,0x80,0x8E,0x84,0x44,0x44,0x38,0x00,0x00,//G 39
  0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,//H 40
  0x00,0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,//I 41
  0x00,0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x88,0xF0,//J 42
  0x00,0x00,0x00,0xEE,0x44,0x48,0x50,0x70,0x50,0x48,0x48,0x44,0x44,0xEE,0x00,0x00,//K 43
  0x00,0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0xFE,0x00,0x00,//L 44
  0x00,0x00,0x00,0xEE,0x6C,0x6C,0x6C,0x6C,0x54,0x54,0x54,0x54,0x54,0xD6,0x00,0x00,//M 45
  0x00,0x00,0x00,0xC7,0x62,0x62,0x52,0x52,0x4A,0x4A,0x4A,0x46,0x46,0xE2,0x00,0x00,//N 46
  0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x44,0x38,0x00,0x00,//O 47
  0x00,0x00,0x00,0xFC,0x42,0x42,0x42,0x42,0x7C,0x40,0x40,0x40,0x40,0xE0,0x00,0x00,//P 48
  0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x82,0x82,0x82,0xB2,0xCA,0x4C,0x38,0x06,0x00,//Q 49
  0x00,0x00,0x00,0xF8,0x44,0x44,0x44,0x78,0x48,0x48,0x44,0x44,0x42,0xE3,0x00,0x00,//R 50
  0x00,0x00,0x00,0x3E,0x42,0x42,0x40,0x20,0x18,0x04,0x02,0x42,0x42,0x7C,0x00,0x00,//S 51
  0x00,0x00,0x00,0xFE,0x92,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,//T 52
  0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,//U 53
  0x00,0x00,0x00,0xE7,0x42,0x42,0x44,0x24,0x24,0x28,0x28,0x18,0x10,0x10,0x00,0x00,//V 54
  0x00,0x00,0x00,0xD6,0x92,0x92,0x92,0x92,0xAA,0xAA,0x6C,0x44,0x44,0x44,0x00,0x00,//W 55
  0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x18,0x18,0x18,0x24,0x24,0x42,0xE7,0x00,0x00,//X 56
  0x00,0x00,0x00,0xEE,0x44,0x44,0x28,0x28,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00,//Y 57
  0x00,0x00,0x00,0x7E,0x84,0x04,0x08,0x08,0x10,0x20,0x20,0x42,0x42,0xFC,0x00,0x00,//Z 58
  0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1E,0x00,//[ 59
  0x00,0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x04,0x04,0x02,0x02,0x02,0x01,0x01,//\ 60
  0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,0x00,//] 61
  0x00,0x08,0x14,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,//_ 63
  0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x1E,0x22,0x42,0x42,0x3F,0x00,0x00,//a 65
  0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x64,0x58,0x00,0x00,//b 66
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x40,0x40,0x40,0x22,0x1C,0x00,0x00,//c 67
  0x00,0x00,0x00,0x06,0x02,0x02,0x02,0x1E,0x22,0x42,0x42,0x42,0x26,0x1B,0x00,0x00,//d 68
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x40,0x40,0x42,0x3C,0x00,0x00,//e 69
  0x00,0x00,0x00,0x0F,0x11,0x10,0x10,0x7E,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,//f 70
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x44,0x44,0x38,0x40,0x3C,0x42,0x42,0x3C,//g 71
  0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,//h 72
  0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,//i 73
  0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x44,0x78,//j 74
  0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x4E,0x48,0x50,0x68,0x48,0x44,0xEE,0x00,0x00,//k 75
  0x00,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,//l 76
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF6,0x49,0x49,0x49,0x49,0x49,0xED,0x00,0x00,//m 77
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x62,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,//n 78
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,//o 79
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD8,0x64,0x42,0x42,0x42,0x64,0x58,0x40,0xE0,//p 80
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x22,0x42,0x42,0x42,0x26,0x1A,0x02,0x07,//q 81
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEE,0x32,0x20,0x20,0x20,0x20,0xF8,0x00,0x00,//r 82
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x42,0x40,0x3C,0x02,0x42,0x7C,0x00,0x00,//s 83
  0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x10,0x10,0x10,0x0C,0x00,0x00,//t 84
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x42,0x42,0x42,0x42,0x46,0x3B,0x00,0x00,//u 85
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x28,0x10,0x10,0x00,0x00,//v 86
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD7,0x92,0x92,0xAA,0xAA,0x44,0x44,0x00,0x00,//w 87
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6E,0x24,0x18,0x18,0x18,0x24,0x76,0x00,0x00,//x 88
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x28,0x18,0x10,0x10,0xE0,//y 89
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x44,0x08,0x10,0x10,0x22,0x7E,0x00,0x00,//z 90
  0x00,0x03,0x04,0x04,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x00,//{ 91
  0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,//| 92
  0x00,0x60,0x10,0x10,0x10,0x10,0x10,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x60,0x00,//} 93
  0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x52,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
};


typedef struct
{
        unsigned char Index[2];       
        char Msk[32];
}typFNT_GB16;

/*
输出格式:C51
数据排列:从左到右从上到下
取模方式:横向8点左高位
黑白取反:正常
字体种类:[HZK1616宋体]
强制转角:ASCII自动转全角
*/
const typFNT_GB16 cfont16[] =
{
        "系",0x00,0xF8,0x3F,0x00,0x04,0x00,0x08,0x20,0x10,0x40,0x3F,0x80,0x01,0x00,0x06,0x10,
        0x18,0x08,0x7F,0xFC,0x01,0x04,0x09,0x20,0x11,0x10,0x21,0x08,0x45,0x04,0x02,0x00,
       
        "统",0x10,0x40,0x10,0x20,0x20,0x20,0x23,0xFE,0x48,0x40,0xF8,0x88,0x11,0x04,0x23,0xFE,
        0x40,0x92,0xF8,0x90,0x40,0x90,0x00,0x90,0x19,0x12,0xE1,0x12,0x42,0x0E,0x04,0x00,
       
        "设",0x00,0x00,0x21,0xF0,0x11,0x10,0x11,0x10,0x01,0x10,0x02,0x0E,0xF4,0x00,0x13,0xF8,
        0x11,0x08,0x11,0x10,0x10,0x90,0x14,0xA0,0x18,0x40,0x10,0xA0,0x03,0x18,0x0C,0x06,
       
        "置",0x7F,0xFC,0x44,0x44,0x7F,0xFC,0x01,0x00,0x7F,0xFC,0x01,0x00,0x1F,0xF0,0x10,0x10,
        0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0xFF,0xFE,0x00,0x00,
       
        "音",0x02,0x00,0x01,0x00,0x3F,0xF8,0x00,0x00,0x08,0x20,0x04,0x40,0xFF,0xFE,0x00,0x00,
        0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,
       
        "量",0x00,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0xFF,0xFE,0x00,0x00,0x1F,0xF0,
        0x11,0x10,0x1F,0xF0,0x11,0x10,0x1F,0xF0,0x01,0x00,0x1F,0xF0,0x01,0x00,0x7F,0xFC,
       
        "颜",0x10,0x00,0x08,0xFE,0x7F,0x10,0x22,0x20,0x14,0x7C,0x7F,0x44,0x44,0x54,0x48,0x54,
        0x52,0x54,0x44,0x54,0x48,0x54,0x51,0x54,0x42,0x28,0x44,0x24,0x88,0x42,0x30,0x82,
       
        "色",0x08,0x00,0x08,0x00,0x1F,0xE0,0x20,0x20,0x40,0x40,0xBF,0xF8,0x21,0x08,0x21,0x08,
        0x21,0x08,0x3F,0xF8,0x20,0x00,0x20,0x02,0x20,0x02,0x20,0x02,0x1F,0xFE,0x00,0x00,
       
        "网",0x00,0x00,0x7F,0xFC,0x40,0x04,0x40,0x04,0x42,0x14,0x52,0x94,0x4A,0x54,0x44,0x24,
        0x44,0x24,0x4A,0x54,0x4A,0x54,0x52,0x94,0x61,0x04,0x40,0x04,0x40,0x14,0x40,0x08,
       
        "络",0x10,0x80,0x10,0x80,0x20,0xF8,0x21,0x08,0x4B,0x10,0xFC,0xA0,0x10,0x40,0x20,0xA0,
        0x41,0x18,0xFA,0x06,0x45,0xF8,0x01,0x08,0x19,0x08,0xE1,0x08,0x41,0xF8,0x01,0x08,
       
        "小",0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x40,0x05,0x20,0x09,0x10,
        0x09,0x08,0x11,0x04,0x21,0x04,0x41,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
       
        "星",0x00,0x08,0x3F,0xFC,0x20,0x08,0x3F,0xF8,0x20,0x08,0x3F,0xF8,0x01,0x00,0x21,0x08,
        0x3F,0xFC,0x21,0x00,0x41,0x10,0xBF,0xF8,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00,
       
        "戴",0x08,0x20,0x7F,0x28,0x08,0x24,0xFF,0xFE,0x00,0x20,0x7F,0x20,0x49,0x24,0x7F,0x24,
        0x49,0x24,0x7F,0x28,0x22,0x28,0x7F,0x10,0x22,0x12,0xFF,0xAA,0x22,0x46,0x41,0x82,

        "创",0x08,0x04,0x08,0x04,0x14,0x04,0x12,0x24,0x21,0xA4,0x20,0xA4,0x7E,0x24,0xA2,0x24,
        0x22,0x24,0x2A,0x24,0x24,0x24,0x20,0x04,0x21,0x04,0x21,0x04,0x1F,0x14,0x00,0x08,

        "昆",0x00,0x08,0x3F,0xFC,0x20,0x08,0x20,0x08,0x3F,0xF8,0x20,0x08,0x20,0x08,0x3F,0xF8,
        0x00,0x80,0x20,0x84,0x24,0x98,0x3E,0xE0,0x20,0x80,0x20,0x82,0x2E,0x82,0x70,0x7E,
};
/


typedef struct
{
        unsigned char Index[2];
        char Msk[72];
}typFNT_GB24;

//宋体
//24*24大小
//逐行式,顺向(高位在前)
const typFNT_GB24 cfont24[] =
{
        "戴",0x01,0x02,0x00,0x01,0xC3,0xA0,0x01,0x9B,0x30,0x1F,0xFB,0x10,0x01,0x83,0x00,0x01,
        0x83,0x0C,0x7F,0xFF,0xFE,0x00,0x01,0x80,0x1F,0xF9,0x80,0x19,0x99,0x90,0x1F,0xF9,
        0x9C,0x19,0x99,0x98,0x1F,0xF9,0xB0,0x06,0x61,0xB0,0x06,0x69,0xB0,0x3F,0xFD,0xE0,
        0x06,0x60,0xE4,0x06,0x68,0xC4,0x7F,0xFC,0xC4,0x04,0x81,0xE4,0x0E,0x63,0x34,0x18,
        0x36,0x1C,0x30,0x04,0x0E,0x40,0x18,0x06,
       
        "创",0x02,0x00,0x00,0x03,0x80,0x08,0x03,0x80,0x0E,0x06,0x60,0x0C,0x06,0x31,0x0C,0x0C,
        0x19,0xCC,0x0C,0x0D,0x8C,0x18,0x0D,0x8C,0x18,0x31,0x8C,0x2F,0xF9,0x8C,0x2C,0x31,
        0x8C,0x4C,0x31,0x8C,0x0C,0x31,0x8C,0x0C,0x31,0x8C,0x0C,0x61,0x8C,0x0F,0xE1,0x0C,
        0x0C,0xC8,0x0C,0x0C,0x08,0x0C,0x0C,0x08,0x0C,0x0C,0x0C,0x0C,0x0F,0xFC,0x0C,0x07,
        0xF8,0xFC,0x00,0x00,0x38,0x00,0x00,0x10,

        "昆",0x00,0x00,0x00,0x08,0x00,0x60,0x0F,0xFF,0xF0,0x0C,0x00,0x60,0x0C,0x00,0x60,0x0C,
        0x00,0x60,0x0F,0xFF,0xE0,0x0C,0x00,0x60,0x0C,0x00,0x60,0x0C,0x00,0x60,0x0F,0xFF,
        0xE0,0x08,0x08,0x40,0x10,0x0E,0x10,0x1C,0x0C,0x38,0x18,0xCC,0x60,0x1F,0xED,0x80,
        0x18,0x0E,0x04,0x18,0x0C,0x04,0x18,0x0C,0x04,0x18,0x0C,0x04,0x1F,0xCC,0x06,0x3E,
        0x0F,0xFE,0x10,0x07,0xFC,0x00,0x00,0x00,
};
/


typedef struct
{
        unsigned char Index[2];
        char Msk[128];
}typFNT_GB32;

//宋体
//32*32大小
//逐行式,顺向(高位在前)
const typFNT_GB32 cfont32[] =
{
        "戴",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x00,0x00,0x30,0x0E,0x80,
0x00,0x30,0x8C,0x40,0x0F,0xFF,0xCC,0x70,0x00,0x30,0x0C,0x30,0x00,0x30,0x0C,0x30,
0x00,0x30,0x0C,0x18,0x3F,0xFF,0xFF,0xFC,0x08,0x00,0x4C,0x00,0x0F,0xFF,0xEC,0x00,
0x0C,0x30,0xCC,0x00,0x0C,0x30,0xCC,0x00,0x0F,0xFF,0xC4,0x38,0x0C,0x30,0xC4,0x30,
0x0C,0x30,0xC6,0x30,0x0F,0xFF,0xC6,0x70,0x0C,0x84,0xC6,0x60,0x00,0x87,0x06,0x60,
0x00,0x86,0x03,0xC0,0x0F,0xFF,0xC3,0xC0,0x00,0x86,0x03,0x80,0x00,0x86,0x21,0x82,
0x3F,0xFF,0xF3,0xC4,0x00,0x88,0x0E,0xC4,0x01,0xC6,0x04,0x64,0x03,0x03,0x08,0x3C,
0x06,0x01,0x90,0x1C,0x18,0x01,0x20,0x0C,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,/*"戴",0*/
/* (32 X 32 , 宋体 )*/

"创",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x70,0x00,0x18,
0x00,0xE0,0x00,0x18,0x00,0xD8,0x00,0x18,0x01,0x8E,0x00,0x18,0x01,0x83,0x00,0x18,
0x01,0x01,0x84,0x18,0x03,0x01,0xC6,0x18,0x02,0x00,0x84,0x18,0x04,0x00,0x04,0x18,
0x0C,0x02,0x04,0x18,0x0F,0xFF,0x04,0x18,0x16,0x06,0x04,0x18,0x26,0x06,0x04,0x18,
0x46,0x06,0x04,0x18,0x06,0x06,0x04,0x18,0x06,0x06,0x04,0x18,0x06,0x06,0x04,0x18,
0x06,0x06,0x04,0x18,0x06,0x3C,0x04,0x18,0x06,0x18,0x04,0x18,0x06,0x00,0x40,0x18,
0x06,0x00,0x40,0x18,0x06,0x00,0x40,0x18,0x06,0x00,0x40,0x18,0x02,0x00,0xC0,0x18,
0x03,0xFF,0xE3,0xF8,0x03,0xFF,0xC0,0xF0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,/*"创",1*/
/* (32 X 32 , 宋体 )*/

"昆",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
0x01,0xFF,0xFF,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,
0x01,0x80,0x01,0x80,0x01,0xFF,0xFF,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,
0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0xFF,0xFF,0x80,0x01,0x80,0x01,0x80,
0x00,0x00,0x40,0x00,0x03,0x00,0x70,0x00,0x03,0x00,0x60,0x20,0x03,0x00,0x60,0x70,
0x03,0x04,0x61,0xC0,0x03,0xFE,0x63,0x00,0x03,0x00,0x7C,0x00,0x03,0x00,0x60,0x08,
0x03,0x00,0x60,0x08,0x03,0x00,0x60,0x08,0x03,0x01,0x60,0x08,0x03,0x1E,0x60,0x0C,
0x03,0xE0,0x77,0xFC,0x07,0x80,0x7F,0xFC,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"昆",2*/
/* (32 X 32 , 宋体 )*/
};
/


unsigned char BMP2[] =
{
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x7F,0xE0,0x03,0x91,0x1C,0x38,0x18,0x00,0x70,0x00,0xFF,0xFC,0x00,0x07,0xFF,0xFE,
        0x66,0x60,0x04,0x5B,0x22,0x44,0x14,0x01,0x8C,0x01,0x7F,0xFA,0x00,0x04,0x00,0x02,
        0x36,0xC0,0x08,0x15,0x40,0x80,0x52,0x02,0x02,0x01,0xBF,0xF6,0x00,0x3D,0xB6,0xDA,
        0x1F,0x80,0x88,0x11,0x40,0x80,0x34,0x04,0x71,0x01,0xDF,0xEE,0x00,0x25,0xB6,0xDA,
        0x0F,0x02,0x88,0x11,0x40,0x80,0x18,0x00,0x88,0x01,0xE0,0x1E,0x00,0x25,0xB6,0xDA,
        0x06,0x0A,0x88,0x11,0x40,0x80,0x34,0x01,0x04,0x01,0xDF,0xEE,0x00,0x25,0xB6,0xDA,
        0x06,0x2A,0x88,0x11,0x40,0x80,0x52,0x00,0x20,0x01,0xBF,0xF6,0x00,0x3D,0xB6,0xDA,
        0x06,0xAA,0x84,0x51,0x22,0x44,0x14,0x00,0x70,0x01,0x7F,0xFA,0x00,0x04,0x00,0x02,
        0x06,0xAA,0x83,0x91,0x1C,0x38,0x18,0x00,0x20,0x00,0xFF,0xFC,0x00,0x07,0xFF,0xFE,
        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,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,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x1F,0xFC,0x00,0x3F,0xFC,0x7F,0xF0,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x07,0x3F,0xFE,0x00,0x7F,0xFC,0xFF,0xF8,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x0F,0x30,0x06,0x00,0x60,0x00,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x1B,0x30,0x06,0x00,0x60,0x00,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x33,0x30,0x06,0x00,0x60,0x00,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x63,0x30,0x06,0x18,0x60,0x00,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0xC3,0x30,0x06,0x18,0x7F,0xFC,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x83,0x30,0x06,0x00,0x7F,0xFC,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x3F,0xFE,0x00,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x3F,0xFE,0x00,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x00,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x18,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x18,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x00,0x00,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x00,0x60,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x30,0x06,0x00,0x60,0x0C,0xC0,0x18,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x3F,0xFE,0x00,0x7F,0xFC,0xFF,0xF8,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x1F,0xFC,0x00,0x3F,0xF8,0x7F,0xF0,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,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,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,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0xF9,0xE3,0x0F,0x00,0xF1,0xE0,0x1E,0x3C,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x01,0x0A,0x15,0x10,0x81,0x0A,0x10,0x21,0x42,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x12,0x11,0x10,0x81,0x0A,0x00,0x21,0x40,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x22,0x11,0x1F,0x81,0x0B,0xE0,0x21,0x7C,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x42,0x11,0x10,0x81,0x0A,0x10,0x21,0x42,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x82,0x11,0x10,0x99,0x0A,0x13,0x21,0x42,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x01,0xF9,0xE7,0xCF,0x18,0xF1,0xE3,0x1E,0x3C,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,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,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,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,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x41,0x1C,0x41,0x41,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x82,0x7C,0x82,
        0x63,0x22,0x61,0x41,0x00,0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x00,0xC6,0x82,0xC2,
        0x55,0x41,0x51,0x41,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0xAA,0x80,0xA2,
        0x49,0x7E,0x49,0x41,0x00,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x00,0x92,0x7C,0x92,
        0x41,0x40,0x45,0x41,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x82,0x02,0x8A,
        0x41,0x21,0x43,0x22,0x00,0x00,0x00,0x00,0xF1,0x00,0x00,0x00,0x00,0x82,0x82,0x86,
        0x41,0x1E,0x41,0x1C,0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x82,0x7C,0x82,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};


unsigned char BMP3[] =
{
        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,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,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,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,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,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,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,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,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,0x00,0x03,0xF8,0x03,0xFF,0xF8,0x03,0xC0,0xF0,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x0F,0xFE,0x03,0xFF,0xF8,0x07,0xF3,0xFC,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x18,0x03,0x03,0x00,0x00,0x0F,0xFF,0xFE,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x30,0x01,0x83,0x00,0x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x60,0x00,0xC3,0x00,0x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x60,0x00,0xC3,0x00,0x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x60,0x00,0xC3,0x00,0x00,0x0F,0xFF,0xFE,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x60,0x00,0xC3,0x00,0x00,0x0F,0xFF,0xFE,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x30,0x01,0x83,0x7F,0xC0,0x07,0xFF,0xFC,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x30,0x03,0x03,0xFF,0xF0,0x03,0xFF,0xF8,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x18,0x06,0x03,0x80,0x38,0x01,0xFF,0xF0,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x0F,0xFC,0x03,0x00,0x18,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x1F,0xFF,0x00,0x00,0x0C,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x30,0x01,0x80,0x00,0x0C,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x60,0x00,0xC0,0x00,0x0C,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x60,0x00,0xC0,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x60,0x00,0xC0,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x60,0x00,0xC0,0x00,0x0C,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x60,0x00,0xC0,0x00,0x0C,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x60,0x00,0xC6,0x00,0x0C,0x1E,0x38,0xCC,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x60,0x00,0xC7,0x00,0x1C,0x11,0x45,0x32,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x30,0x01,0x83,0x80,0x38,0x11,0x45,0x22,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x1F,0xFF,0x01,0xFF,0xF0,0x11,0x45,0x22,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x0F,0xFE,0x00,0x7F,0xC0,0x11,0x45,0x22,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x79,0x22,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,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,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,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x22,0x00,0x90,0x04,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x42,0x00,0x90,0x04,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x06,0x40,0x41,0x01,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x04,0x20,0x81,0x01,0x08,0x08,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x08,0x20,0x81,0x02,0x04,0x10,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x08,0x20,0x80,0x82,0x04,0x10,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x10,0x21,0x00,0x82,0x02,0x10,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x20,0x11,0x00,0x84,0x02,0x10,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x40,0x12,0x00,0x44,0x02,0x20,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x80,0x12,0x00,0x48,0x01,0x20,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x48,0x01,0x20,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x30,0x01,0x20,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x30,0x00,0xC0,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,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};



unsigned char BMP4[] =
{
        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,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,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x01,0x00,0x0C,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x01,0x00,0x0F,0xC0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x00,0x1F,0xFE,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x00,0x3F,0xFF,0xFF,0x00,0x00,0x10,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x07,0x00,0x7F,0xFF,0xFF,0xFF,0xC0,0x10,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x06,0x00,0xFF,0xFF,0xFF,0xFF,0xE0,0x10,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x06,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x20,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x06,0x0F,0xFF,0xFF,0xFF,0xFF,0xE0,0x60,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x06,0x3F,0xFF,0xFF,0xFF,0xFF,0xF0,0xC0,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x07,0x3C,0x3F,0xFF,0xF8,0x7F,0xF1,0x80,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x07,0x3F,0xFF,0xFF,0xFF,0xFF,0xF1,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x3F,0xFF,0xFF,0xFF,0xFF,0xF3,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x03,0x20,0x00,0xFF,0x00,0x07,0xF2,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x01,0x0F,0xFF,0x7E,0xFF,0xFB,0xE7,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x01,0x9F,0x7F,0x81,0xFD,0xFC,0x0F,0x80,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x01,0xBE,0x3F,0x9D,0xF8,0xFD,0xFF,0x80,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0xDF,0x7F,0xBC,0xFD,0xFB,0xFF,0x80,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x67,0xFE,0x7E,0x7F,0xE3,0xFF,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x38,0x01,0xFF,0x80,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x07,0xFE,0x00,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xC7,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x01,0x83,0x80,0x61,0xC0,0x00,0x00,0x00,
        0x00,0x00,0x00,0x0F,0x80,0xF0,0x00,0x00,0x07,0x82,0xE3,0xE1,0xB0,0x00,0x00,0x00,
        0x00,0x00,0x00,0x0F,0x80,0x1C,0x00,0x00,0x0C,0x6C,0x02,0x3F,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x0E,0x00,0x03,0x00,0x00,0x00,0xFE,0x00,0x3F,0x80,0x00,0x00,0x00,
        0x00,0x00,0x00,0x06,0x00,0xF1,0x80,0x00,0x0F,0x81,0xF7,0xC0,0x7C,0x00,0x00,0x00,
        0x00,0x00,0x00,0x03,0x80,0x18,0x80,0x00,0x03,0xFF,0x80,0xFF,0xE0,0x00,0x00,0x00,
        0x00,0x00,0x00,0x01,0xC0,0x0C,0x40,0x00,0x02,0x18,0x81,0x8C,0x60,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0xE1,0x84,0x40,0x00,0x02,0x18,0x81,0x8C,0x60,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x7F,0xC2,0x40,0x00,0x03,0xFF,0x81,0xFF,0xE0,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x3F,0xE2,0x40,0x00,0x02,0x00,0x31,0x80,0x0C,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x03,0xFF,0xF0,0xFF,0xFC,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xC0,0x7F,0xF0,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};


//         
//
//存储图片数据,图片大小为51*32像素
//逐行式,顺向(高位在前)
//
/
unsigned char BMP5[] =
{
        0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,
        0x0E,0x00,0x00,0x00,0x00,0x01,0x80,0x0E,0x00,0x20,0x00,0x00,0x01,0xC0,0x00,0x00,
        0x70,0x00,0x00,0x00,0xC0,0x00,0x00,0xE0,0x00,0x00,0x00,0xE0,0x3F,0x81,0xC0,0x00,
        0x00,0x00,0x61,0xFF,0xF0,0x80,0x00,0x00,0x00,0x03,0xC0,0xF8,0x00,0x00,0x00,0x00,
        0x07,0x00,0x1C,0x00,0x00,0x00,0x00,0x1E,0x00,0x0F,0x00,0x00,0x00,0x7C,0x1C,0x00,
        0x03,0x1F,0x80,0x00,0x7C,0x1C,0x07,0xFF,0x1F,0x80,0x00,0x7C,0x1C,0x1F,0xFF,0x9F,
        0x80,0x00,0x00,0x1C,0x7C,0x03,0xF8,0x00,0x00,0x00,0x0F,0xF0,0x00,0x7C,0x00,0x00,
        0x03,0xFF,0x00,0x00,0x0F,0xE0,0x00,0x0F,0xF2,0x00,0x00,0x07,0xFE,0x00,0x1F,0x80,
        0x00,0x00,0x00,0x7F,0x80,0x3C,0x00,0x00,0x00,0x00,0x03,0x80,0x7C,0x00,0x00,0x00,
        0x00,0x03,0xC0,0x70,0x00,0x00,0x00,0x00,0x01,0xC0,0x70,0x00,0x00,0x00,0x00,0x01,
        0xC0,0x78,0x00,0x00,0x00,0x00,0x01,0xC0,0x7C,0x00,0x00,0x00,0x00,0x03,0xC0,0x3C,
        0x00,0x00,0x00,0x00,0x07,0x80,0x3E,0x00,0x00,0x00,0x00,0x3F,0x80,0x0F,0xE1,0xC0,
        0x00,0x1F,0xFC,0x00,0x03,0xFF,0xFC,0x03,0xFF,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
        0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x00,0x00,
};



#endif


使用特权

评论回复
11
wangtaohui|  楼主 | 2024-1-31 13:47 | 只看该作者
效果











源码
链接:https://pan.baidu.com/s/1_zuSjLBjeIckoJaUDEGWWg?pwd=1234
提取码:1234

模拟SPI控制方式
模拟SPI通信主要特点是方便移植,任意IO口输出即可。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

251

帖子

0

粉丝