制作出来的电路实物图如下:
STC15F2K60S2单片机源程序如下:
oled12864.h
- /*********************************************************************************************************************
- *1.oled12864模块头文件( SSD1306驱动IC)
- *2.文件:oled12864.h
- *4.版本: V1.0
- *************************************************说明事项*****************************************************************
- * ssd1306本身支持多种总线驱动方式包括SPI以及并口等,通过芯片的相应IO口拉低拉高来选择哪一种接口,0x78为IIC接口,0x7A为SOI接口
- *使用I2C接口时,SSD1306允许有最多两个7位的I2C地址,同样通过相应的IO口拉低拉高来切换,一般默认是0x3c,在屏幕模块的背面,
- *可以看到一个I2C地址切换提示,需要改变模块I2C地址时,只需要把提示位置的电阻取下焊接到另外一端即可。
- *要注意的是板上的I2C地址是加上了第零位读写位后的数值,即0x78 = 0x3c<<1 0x7A = 0x3d<<1,
- *SSD1306支持多种控制方式,I2C、6800、8080、4线SPI、3线SPI,通过SSD1306的3个引脚 BS0、BS1、BS2接不同的电平来选择控制方式,
- *I2C控制:BS0=0、BS1=1、BS2=0;
- *6800控制:BS0=0、BS1=0、BS2=1;
- *8080控制:BS0=0、BS1=1、BS2=1;
- *4线SPI控制:BS0=0、BS1=0、BS2=0;
- *3线SPI控制:BS0=1、BS1=0、BS2=0;
- *从机地址是由七个位组成的,如上图框起来的高七位,这里说明了SSD1306的从地址高六位是固定的,只有第七位受SA0控制,
- *如果这个位为逻辑0,地址则是0x78,如果为逻辑1则是0x7A。一般情况下看一下背面就可以了,厂家一般会默认选择搞成0x78
- ***********************************************************************************************************************/
- #ifndef _OLED12864_H_
- #define _OLED12864_H_
- #include "IIC.h"
- #include "Font.h"
- #define BIRGTHNESS //OLED的亮度 00~255,0xcf;
- #define X_WIDTH 128 //屏幕宽度
- #define Y_HIGH (8*8) //屏幕高度
- #define IIC_OLED_ADDR_W 0x78 //OLED器件地址,7位地址,高位为0表示写,为1表示读,//通过调整0R电阻,屏可以0x78和0x7A两个地址 -- 默认0x78
- #define Brightness 0xCF
- //void OLED_Write_Command(unsigned char IIC_Command);
- //void OLED_Write_Data(unsigned char IIC_Data);
- void OLED_Init(void);
- void OLED_Clear(void);
- void OLED_ON(void);
- void OLED_OFF(void);
- //void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[]);
- void OLED_ShowChinese(unsigned char x, unsigned char y, unsigned char Num);
- void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize);
- /****************************************************************************
- *函数名称:void OLED_Write_Command(unsigned char IIC_Command)
- *函数功能:写OLED命令; 此函数实测OK
- *输入: unsigned char IIC_Command
- *输出: 无
- *****************************************************************************/
- /***************/
- void OLED_Write_Command(unsigned char IIC_Command)
- {
-
- IIC_Start(); //启动I2C
- IIC_Send_Byte(IIC_OLED_ADDR_W); //D/C #=0; R/W #=0;写IIC器件地址
- IIC_Wait_Ack();
- IIC_Send_Byte(0x00); //寄存器地址,告诉指令解析器,接下来的是一个指令
- IIC_Wait_Ack();
- IIC_Send_Byte(IIC_Command); //写命令
- IIC_Wait_Ack();
- IIC_Stop();
-
- }
- /****************************************************************************
- *函数名称:bit OLED12864_Write_Commmand(unsigned char cmd, bit start, bit stop)
- *函数功能:写指令函数,第一个参数为指令,第二、三个参数选择是否需要通信开始和结束函数,=1有,=0没有
- *输入: unsigned char IIC_Command
- *输出: 无
- *****************************************************************************/
- /***************/
- /*****************************************************
- bit OLED12864_Write_Commmand(unsigned char cmd, bit start, bit stop)
- {
- if(start)
- {
- IIC_Start(); //启动I2C
- IIC_Send_Byte(IIC_OLED_ADDR_W);//写从机地址,并且加上读写标志位(最后一位)
- if(!Test_ack())
- {
- return 0;
- } //执行从机应答检测函数,如果从机发送了非应答信号,那么就退出数据发送函数
- }
- }
- **********************************************************/
- /*********************************************************
- unsigned char OLED_Write_Command(unsigned char IIC_Command)
- {
-
- I2C_Start(); //启动I2C
- IIC_Send_Byte(I2C_OLED_ADDR_W); //D/C #=0; R/W #=0;写IIC器件地址
- if(IIC_Wait_Ack())
- return 1;
- IIC_Send_Byte(0x00); // 告诉指令解析器,接下来的是一个指令
- if(IIC_Wait_Ack())
- return 2;
- IIC_Send_Byte(IIC_Command); //写命令
- if(IIC_Wait_Ack())
- return 3;
- I2C_Stop();
- return 0;
- }
- ***********************************************************/
- /****************************************************************************
- *函数名称:unsigned char OLED_Write_Data(unsigned char IIC_Data)
- *函数功能:写OLED数据; 此函数实测OK
- *输入: unsigned char IIC_Data
- *输出: 无
- *****************************************************************************/
- /***************/
- void OLED_Write_Data(unsigned char IIC_Data)
- {
-
- IIC_Start(); //启动I2C
- IIC_Send_Byte(IIC_OLED_ADDR_W); //D/C #=0; R/W #=0;写IIC器件地址
- IIC_Wait_Ack();
- IIC_Send_Byte(0x40); //寄存器地址告诉指令解析器,接下来的是一个数据
- IIC_Wait_Ack();
- IIC_Send_Byte(IIC_Data); //写数据
- IIC_Wait_Ack();
- IIC_Stop();
-
- }
- /*****************************************************
- static unsigned char OLED_Write_Data(unsigned char IIC_Data)
- {
- I2C_Start(); //启动I2C
- IIC_Send_Byte(I2C_OLED_ADDR_W); //D/C #=0; R/W #=0;写IIC器件地址
- if(IIC_Wait_Ack());
- return 1;
- IIC_Send_Byte(0x40); //告诉指令解析器,接下来的是一个指令
- if(IIC_Wait_Ack());
- return 2;
- IIC_Send_Byte(IIC_Data); //写数据
- if(IIC_Wait_Ack());
- return 3;
- I2C_Stop();
- return 0;
- }
- *******************************************************/
- /****************************************************************************
- *函数名称:void OLED_SetCursor(unsigned char x,unsigned char y)
- *函数功能:设置行列的起始地址位置;此函数实测OK
- *输入: unsigned char x,unsigned char y;;// x列,y行
- *输出: 无
- *****************************************************************************/
- /***************/
- void OLED_SetCursor(unsigned char x,unsigned char y)// x列,y行
- {
- //x += 4;
- OLED_Write_Command(0xb0|y); //y就是第y页,也就是第y行
- OLED_Write_Command(((x&0xf0)>>4)|0x10); //x的高4位
- OLED_Write_Command((x&0x0f)); //x的低4位
- // OLED_Write_Command((x&0x0f)|0x01);
- //列起始地址由指令0x1m和0x0n来确定,m是高四位,n是低四位,使用12864,则m,n合起来的8位数数值范围在0-127之间
- }
- /****************************************************************************
- *函数名称:void OLED_Clear(void)
- *函数功能:OLED清屏函数,复位清屏;;此函数实测OK
- *输入: 无
- *输出: 无
- *****************************************************************************/
- /***************/
- void OLED_Clear(void)
- {
- unsigned char x,y;
- for(y=0;y<Y_HIGH/8;y++) //OLED_HIGH=8*8
- {
- OLED_Write_Command(0xb0+y); // 从0 ~ 7页依次写入
- OLED_Write_Command(0x00); // 低位列地址
- OLED_Write_Command(0x10); // 高位列地址
- for(x=0; x<X_WIDTH; x++) //OLED_WIDTH=128
- OLED_Write_Data(0x00);
- }
-
- }
- /****************************************************************************
- *函数名称:void OLED_Fill(unsigned char bmp_dat)
- *函数功能:OLED全屏函数, 此函数实测OK
- *输入: unsigned char bmp_dat, 0XFF为全屏亮,0X00为全屏灭
- *输出: 无
- *****************************************************************************/
- /***************/
- void OLED_Fill(unsigned char bmp_dat)
- {
- unsigned char x,y;
- for(y=0;y<Y_HIGH/8;y++) //OLED_HIGH=8*8
- {
- OLED_Write_Command(0xb0+y);
- OLED_Write_Command(0x00);
- OLED_Write_Command(0x10);
- for(x=0; x<X_WIDTH; x++)//OLED_WIDTH=128
- OLED_Write_Data(bmp_dat);
- }
-
- }
- /****************************************************************************
- *函数名称:void OLED_ON(void)
- *函数功能:打开显示
- *输入: 无
- *输出: 无
- *****************************************************************************/
- /***************/
- /*********
- void OLED_ON(void)
- {
- OLED_Write_Command(0x8D); //设置电荷泵
- OLED_Write_Command(0x14); //开启电荷泵
- OLED_Write_Command(0xAF); //oled唤醒
- }
- *****************/
- /****************************************************************************
- *函数名称:void OLED_OFF(void)
- *函数功能:打开显示
- *输入: 无
- *输出: 无
- *****************************************************************************/
- /***************/
- /*****************
- void OLED_OFF(void)
- {
- OLED_Write_Command(0x8D);//设置电荷泵
- OLED_Write_Command(0x10); //开启电荷泵
- OLED_Write_Command(0xAE); //oled休眠
- }
- ********************/
- /****************************************************************************
- *函数名称:void OLED_Init(void)
- *函数功能:OLED12864初始化,此函数实测OK
- *输入: 无
- *输出: 无
- *****************************************************************************/
- /***************/
- void OLED_Init(void)
- {
- //IIC_Init(); //iic初始化SDA,SCL的IO口的函数,可要可不要
- delay_ms(100); //从上电到下面开始初始化要有足够的时间,即等待RC复位完毕
- /* Init LCD */
-
- //A3H,垂直滚动区域,A是固定区域的顶行号,B是行数
- OLED_Write_Command(0xAE); //0xAE为SSD1306关闭显示,
-
- OLED_Write_Command(0x20); //设置存储地址的模式,水平、竖直、页、[无效],四种,复位页模式
- OLED_Write_Command(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid(无效)
-
- OLED_Write_Command(0xB0); //设置页地址,0-7
- OLED_Write_Command(0x00); //设置起始列地址的低位,00H~0F,只在页地址模式有效
- OLED_Write_Command(0x10); //设置起始列地址的高位,10H~1F,只在页地址模式有效
- OLED_Write_Command(0x40); //设置显示的起始行,(0x00~0x3F),40H~7FH总共64行
-
- OLED_Write_Command(0x81); //设置对比度控制,实际取值是A[] + 1
- OLED_Write_Command(Brightness); // 这里Brightness=0xcf,Set SEG Output Current Brightness, 256
-
- OLED_Write_Command(0xA1); //设置段(SEG)重映射,A0H/A1H,A1H是列翻转, 0xa0左右反置 0xa1正常
- OLED_Write_Command(0xC8); //设置COM输出扫描方向C0H/C8H,C8H是行反转。 0xc0上下反置 0xc8正常,// 重映射模式,COM[N-1]~COM0扫描
- OLED_Write_Command(0xA6); //设置反白显示,A6h --- “1”点亮像素点,//A7h --- “0”点亮像素点,A6H/A7H,0xa7逆显示,
-
- OLED_Write_Command(0xA4); //A4/A5设置全局显示,A5H强制全局显示
-
- OLED_Write_Command(0xA8); //设置驱动路数,起始也就是命令为0xA8,参数取值16~63,效果是垂直方向显示的范围
- OLED_Write_Command(0x3F); //// 64duty
- OLED_Write_Command(0xD3); //设置显示偏移,图像竖直向上偏移,复位是00H,(0x00~0x3F)
- OLED_Write_Command(0x00); // 无偏移
- OLED_Write_Command(0xD5); //设置震荡器分频,默认值80H
- OLED_Write_Command(0xF0); //--set divide ratio
- OLED_Write_Command(0xD9); //设置预充电周期,同步亮度的,复位22H
- OLED_Write_Command(0x22); //默认值22H,官方推荐值0xF1,/将预充电设置为15个时钟加上其放电设置为1个时钟
- OLED_Write_Command(0xDA); //设置COM引脚硬件配置,复位是12H,加上重映射总共八种玩法,
- OLED_Write_Command(0x12); //使用默认值
- OLED_Write_Command(0xDB); //设置Vcomh取消选择等级,可调节亮度(默认)
- OLED_Write_Command(0x20); //默认值0x20,0x00:0.65*Vcc,0x10:0.71*Vcc,0x20:0.77*Vcc,0x30:0.83*Vcc
- OLED_Write_Command(0x8D); //电荷泵设置,复位是0B,启用电荷泵需要配置成1B
- OLED_Write_Command(0x14); //开显示 set(0x10) disable
- OLED_Write_Command(0xAF); //0xAF为SSD1306打开显示
-
-
- //OLED_Fill(0x00); //初始屏幕填充数据0
- //OLED_SetCursor(0,0); //
- OLED_Clear();//初始必须清屏
-
- }
- /****************************************************************************
- *函数名称:void OLED_P6x8Str(unsigned char x, y,unsigned char ch[]);此函数实测OK
- *函数功能:显示6*8一组标准宽度x高度=6x8,ASCII字符串 显示的坐标(x,y),x为列范围,y为页范围0~7*
- *输入: unsigned char x, x为列,unsigned char y,y为行, unsigned char ch[]为字体数组
- *输出: 无
- *****************************************************************************/
- /***************/
- void OLED_P6x8Str(unsigned char x, y,unsigned char ch[])
- {
- unsigned char c=0,i=0,j=0;
- while (ch[j]!='\0')
- {
- c =ch[j]-32; //减去前面字符串有32个字符,第33个字符为A
- if(x>126){x=0;y++;}
- OLED_SetCursor(x,y);
- for(i=0;i<6;i++) //写6列数据
- OLED_Write_Data(OLED_F6x8[c][i]);//如果要显示第1个6列,则为
- x+=6; //列数+6
- j++; //行数加1
- }
- }
- //每行显示数据:生成数组的大小,字符的长(页)x字符的宽(如8*16字体,2页*8列 = 16;如12*24字体,3页*12列 = 36;如16*32字体,4页*16列 = 64)
- /****************************************************************************
- *函数名称:void OLED_Font8x16Str(unsigned char x, unsigned char y, unsigned char ch[])
- *函数功能:显示8*16一组标准ASCII字符串, 显示的坐标(x,y),y为页范围0~7;;此函数实测OK
- *输入: unsigned char x, x为列,unsigned char y,y为行, unsigned char ch[]为字体数组
- *输出: 无
- *****************************************************************************/
- /***************/
- void OLED_P8x16Str(unsigned char x, unsigned char y, unsigned char ch[])
- {
- unsigned char c=0,i=0,j=0;
- while (ch[j] != '\0')
- {
- c = ch[j]-32;
- if (x>120)
- {
- x = 0;
- y++;
- }
- OLED_SetCursor(x,y);
- for(i=0;i<8;i++)
- OLED_Write_Data(OLED_F8x16[c*16+i]);
-
- OLED_SetCursor(x,y+1);
- for(i=0; i<8; i++)
- OLED_Write_Data(OLED_F8x16[c*16+i+8]);
-
- x+=8;
- j++;
- }
- }
- /*****************************************************************************************************
- *函数名称:void OLED_ShowStr(unsigned char x,unsigned char y,unsigned char *chr,unsigned char TextSize)
- *函数功能:显示字符串函数,包括了OLED_P6x8Str(),OLED_P8x16Str()两个函数.
- *使用方法:只需更改后面的TextSize的值,字符大小(1:6*8 ; 2:8*16)
- *输入: unsigned char x,unsigned char y,unsigned char *chr,unsigned char TextSize)
- * : x,y:起点坐标,x为0-127列,y为页0-7,*chr:为要显示的字符串
- * TextSize为字号可以填入1与2,当填入1时,函数调用的为codetab.h中的6*8点阵数组,当填入2时调用的是8*16点阵数组。
- * 所谓6*8,8*16就是在oled上占格的大小,oled分辨率为64*128,所以在应用时要计算好格数,以免oled上显示不全
- * 如果 TextSize为1则为6*8,为2,则为8*16
- *输出: 无
- ********************************************************************************************************/
- /***************/
- void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
- {
- unsigned char c = 0,i = 0,j = 0;
- switch(TextSize)
- {
- case 1:
- {
- while(ch[j] != '\0')
- {
- c = ch[j] - 32;
- if(x > 126)
- {
- x = 0;
- y++;
- }
- OLED_SetCursor(x,y);
- for(i=0;i<6;i++)
- OLED_Write_Data(OLED_F6x8[c][i]);
- x += 6;
- j++;
- }
- }break;
- case 2:
- {
- while(ch[j] != '\0')
- {
- c = ch[j] - 32;
- if(x > 120)
- {
- x = 0;
- y++;
- }
- OLED_SetCursor(x,y);
- for(i=0;i<8;i++)
- OLED_Write_Data(OLED_F8x16[c*16+i]);
- OLED_SetCursor(x,y+1);
- for(i=0;i<8;i++)
- OLED_Write_Data(OLED_F8x16[c*16+i+8]);
- x += 8;
- j++;
- }
- }break;
- }
- }
- /*****************************************************************************************************
- *函数名称:void OLED_ShowChinese(unsigned char x, unsigned char y, unsigned char Num)
- *函数功能:显示 bsp_font.h 中的16*16点阵汉字(宋体), 此函数实测OK
- *输入: unsigned char Line, unsigned char Column, unsigned char Num
- y:起始点行坐标:0 ~ 7,x:起始点列坐标:0 ~127,Num为第几个字
- *输出: 无
- ********************************************************************************************************/
- /***************/
- /****************************
- void OLED_P16x16Ch(unsigned char x, unsigned char y, unsigned int Num)
- {
-
- unsigned char i=0;
- unsigned int wide = 32*Num; //字宽
-
- OLED_SetCursor(x,y); //参数2:把光标设置在第几页. 参数1:把光标设置在第几列
-
- for (i = 0; i < 16; i++)
- {
- OLED_Write_Data(OLED_F16x16[wide]); //显示上半部分内容
- wide+=1;
- }
-
- OLED_SetCursor(x,y+1); //参数2:把光标设置在第几页. 参数1:把光标设置在第几列
- for (i = 0; i < 16 ; i++)
- {
- OLED_Write_Data(OLED_F16x16[wide]); //显示下半部分内容
- wide+=1;
- }
- }
- ******************************
- /*****************************************************************************************************
- *函数名称:void OLED_P16x16Ch(unsigned char x, unsigned char y, unsigned char Num)
- *函数功能:显示 bsp_font.h 中的汉字(宋体)
- *输入: unsigned char Line, unsigned char Column, unsigned char Num
- y:起始点行坐标:1 ~ 8, x:起始点列坐标:1 ~8,Num为第几个字
- *输出: 无
- ********************************************************************************************************/
- /***************/
- void OLED_P16x16Ch(unsigned char x, unsigned char y, unsigned char Num)
- {
-
- unsigned char i=0;
- unsigned char wide = 16; //字宽,如:16x16字体,32x32字体,
-
- OLED_SetCursor((x-1)*wide,(y-1)); //参数1:把光标设置在第几列,参数2:把光标设置在第几页.
-
- for (i = 0; i < wide; i++)
- {
- OLED_Write_Data(OLED_F16x16[Num][i]); //显示上半部分内容
-
- }
-
- OLED_SetCursor((x-1)*wide,(y-1)+1); //参数2:把光标设置在第几页. 参数1:把光标设置在第几列
-
- for (i = 0; i < wide ; i++)
- {
- OLED_Write_Data(OLED_F16x16[Num][i+wide]); //显示下半部分内容
-
- }
- }
- /****************************************************************************
- *函数名称:void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no,unsigned char font_width,unsigned char font_height)
- *函数功能: 显示任意大小汉字
- ******** x1,y1 -- 起点对角线(结束点)的坐标(x1:0~127,y1:0~7)
- *输入: unsigned char x, x为列,unsigned char y,y为行, unsigned char ch[]为字体数组,
- * : *no: 表示要显示的汉字(模组)在hzk[][]数组中的行号,通过行号来确定在数组中要显示的汉字
- * 这里字体的宽font_width的值必须与用字模制作软件生成字模时的点阵值大小一致
- * font_height的值为用字模制作软件生成字模时字体的高,由于我的屏像素为32*128-----0~7共8页,每页4个位
- *输出: 无
- *****************************************************************************/
- /***************/
- void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no,unsigned char font_width,unsigned char font_height)
- {
- unsigned char t, i;
- for(i=0;i<(font_height/8);i++) /*font_height最大值为32,这张屏只有8个页(行),每页4个位*/
- {
- OLED_SetCursor(x,y+i);
-
-
- for(t=0;t<font_width;t++) /*font_width最大值为128,屏幕只有这么大*/
- {
- //OLED_Write_Data(OLED_F32x32[(font_height/8)*no+i][t]);
- if((font_width==16)&(font_height==16)) //16x16字体
- {
- OLED_Write_Data(OLED_F16x16[no][font_width*i+t]);
- }
- else if((font_width==32)&(font_height==16)) //32x16字体
- {
- OLED_Write_Data(OLED_F32x16[no][font_width*i+t]);
- }
-
-
- else if((font_width==32)&(font_height==32)) //32x32字体
- {
- OLED_Write_Data(OLED_F32x32[no][font_width*i+t]);
- }
- else if((font_width==64)&(font_height==32)) //64x32字体
- {
- OLED_Write_Data(OLED_F64x32[no][font_width*i+t]);
- }
-
- else if((font_width==64)&(font_height==64)) //64x64字体
- {
- OLED_Write_Data(OLED_F64x64[no][font_width*i+t]);
- }
-
- }
- }
- }
- /****************************************************************************
- *函数名称:void OLED_DrawBMP(unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1, unsigned char BMP[])
- *函数功能:显示显示BMP图片128×64起始点坐标(x0, y0),x的范围0~127,y为页的范围0~7
- ******** x1,y1 -- 起点对角线(结束点)的坐标(x1:0~127,y1:0~7)
- *输入: unsigned char x, x为列,unsigned char y,y为行, unsigned char ch[]为字体数组
- *输出: 无
- *****************************************************************************/
- /***************/
- void OLED_DrawBMP(unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1, unsigned char BMP[])
- {
- unsigned int j=0;
- unsigned char x, y;
- if(y1%8 == 0)
- y = y1/8;
- else
- y = y1/8+1;
- for (y=y0; y<y1; y++)
- {
- OLED_SetCursor(x0,y);
- for(x=x0; x<x1; x++)
- {
- OLED_Write_Data(BMP[j++]);
- }
- }
- }
- /*****************************************************************************************************
- *函数名称:void OLED_ShowChinese(unsigned char Line, unsigned char Column, unsigned char Num)
- *函数功能:显示 bsp_font.h 中的汉字(宋体)
- *输入: unsigned char Line, unsigned char Column, unsigned char Num
- Line:起始点行坐标:0 ~ 7,Column:起始点列坐标:0 ~127
- *输出: 无
- ********************************************************************************************************/
- /***************/
- /***************************************
- void OLED_ShowChinese(unsigned char Line, unsigned char Column, unsigned char Num)
- {
-
- unsigned char i=0;
- unsigned char wide = 32; //字宽
-
- OLED_SetCursor(( Line - 1 ) * 2, ( Column - 1 )* wide); //参数1:把光标设置在第几页. 参数2:把光标设置在第几列
-
- for (i = 0; i < wide; i++)
- {
- OLED_Write_Data(OLED_F16x16[Num][i]); //显示上半部分内容
- }
-
- OLED_SetCursor(( Line - 1 ) * 2 + 1,( Column - 1) * wide);
- for (i = 0; i < wide ; i++)
- {
- OLED_Write_Data(OLED_F16x16[Num][i+wide]); //显示下半部分内容
- }
- }
- ****************************************/
- /**
- * 描述:显示6*8一组标准ASCII字符串,显示的坐标(x,y),y为页范围0~7
- */
-
- /****************************************************************************
- *函数名称:void OLED_Font6x8Str(unsigned char x, unsigned char y, unsigned char ch[])
- *函数功能:显示6*8一组标准ASCII字符串, 显示的坐标(x,y),y为页范围0~7
- *输入: unsigned char x, x为列,unsigned char y,y为行, unsigned char ch[]为字体数组
- *输出: 无
- *****************************************************************************/
- /***************/
- /****************************
- void OLED_Font6x8Str(unsigned char x, unsigned char y, unsigned char ch[])
- {
- unsigned char c=0, i=0, j=0;
- while (ch[j] != '\0')
- {
- c = ch[j]-32;
- if(x>126) {x=0; y++;}
- OLED_SetCursor(x,y);
- for(i=0; i<6; i++)
- OLED_Write_Data(F6x8[c][i]);
- x += 6;
- j++;
- }
- }
- **************************/
- #endif
-
复制代码 原理图: 无
仿真: 无
STC15F2K60S2单片机完整Keil代码工程文件下载:
STC15F2K60S2 OLED12864任意位置显示字符和汉字.zip
(93.21 KB, 下载次数: 47)
|