第十四章:0.96寸OLED12864显示屏

news/2025/2/12 8:55:43/

MCU Interface Selection

----------------------这里说下通过字模软件来提取库

 

                        ---------6800

                        ---------8080

                        ---------4线制的SPI

                        ----------3线制的SPI

                       -----------IIC接口

/**********************************************
//IIC Start
**********************************************/
void IIC_Start()
{OLED_SCL=1;OLED_SDIN=1;OLED_SDIN=0;OLED_SCL=0;
}/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{OLED_SCL=1;OLED_SDIN=0;OLED_SDIN=1;}/**********************************************
// IIC Write byte
**********************************************/void Write_IIC_Byte(unsigned char IIC_Byte)
{unsigned char i;unsigned char m,da;da=IIC_Byte;OLED_SCL=0;for(i=0;i<8;i++)		{m=da;m=m&0x80;if(m==0x80){OLED_SDIN=1;}else OLED_SDIN=0;da=da<<1;OLED_SCL=1;OLED_SCL=0;}
}void IIC_Wait_Ack()
{//  GPIOB->CRH &= 0XFFF0FFFF;	//设置PB12为上拉输入模式//  GPIOB->CRH |= 0x00080000;//	OLED_SDA = 1;//	delay_us(1);//  OLED_SCL = 1;//  delay_us(50000);/*	while(1){if(!OLED_SDA)				//判断是否接收到OLED 应答信号{//GPIOB->CRH &= 0XFFF0FFFF;	//设置PB12为通用推免输出模式//GPIOB->CRH |= 0x00030000;return;}}*/OLED_SCLK_Set() ;OLED_SCLK_Clr();}

1--应用层

/**********************************************
// IIC Write Command
**********************************************/
void Write_IIC_Command(unsigned char IIC_Command)
{IIC_Start();Write_IIC_Byte(0x78);            //Slave address,SA0=0IIC_Wait_Ack();	Write_IIC_Byte(0x00);			 //write commandIIC_Wait_Ack();	Write_IIC_Byte(IIC_Command); IIC_Wait_Ack();	IIC_Stop();
}/**********************************************
// IIC Write Data
**********************************************/
void Write_IIC_Data(unsigned char IIC_Data)
{IIC_Start();Write_IIC_Byte(0x78);			//D/C#=0; R/W#=0IIC_Wait_Ack();	Write_IIC_Byte(0x40);			//write dataIIC_Wait_Ack();	Write_IIC_Byte(IIC_Data);IIC_Wait_Ack();	IIC_Stop();
}/***********************************************
/***********************************************
void OLED_WR_Byte(unsigned dat,unsigned cmd)
{if(cmd){Write_IIC_Data(dat);}else {Write_IIC_Command(dat);}}

2---上层

#define OLED_CMD  0			// 写命令//坐标设置
void OLED_Set_Pos(unsigned char x, unsigned char y) 
{ 	OLED_WR_Byte(0xb0+y, OLED_CMD);OLED_WR_Byte(((x&0xf0)>>4)|0x10, OLED_CMD);OLED_WR_Byte((x&0x0f), OLED_CMD); 
}//开启OLED显示    
void OLED_Display_On(void)
{OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ONOLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
}//关闭OLED显示     
void OLED_Display_Off(void)
{OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFFOLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
}	//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!	  
void OLED_Clear(void)  
{  u8 i,n;		    for(i=0;i<8;i++)  {  OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); } //更新显示
}//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!	  
void OLED_Clear(void)  
{  u8 i,n;		    for(i=0;i<8;i++)  {  OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); } //更新显示
} //在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示				 
//size:选择字体 16/12 
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
{      	unsigned char c = 0, i = 0;c = chr - ' ';		//得到偏移后的值			if (x > Max_Column-1){x = 0;y = y + 2;}if (Char_Size == 16){OLED_Set_Pos(x, y);	for(i=0; i<8; i++)OLED_WR_Byte(F8X16[c*16+i], OLED_DATA);OLED_Set_Pos(x, y + 1);for(i=0; i<8; i++)OLED_WR_Byte(F8X16[c*16+i+8], OLED_DATA);}else {	OLED_Set_Pos(x, y);for(i=0; i<6; i++)OLED_WR_Byte(F6x8[c][i], OLED_DATA);	}
}//显示一个字符号串
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
{unsigned char j=0;while (chr[j]!='\0'){		OLED_ShowChar(x,y,chr[j],Char_Size);x+=8;if(x>120){x=0;y+=2;}j++;}
}//显示汉字
void OLED_ShowCHinese(u8 x, u8 y, u8 no)
{      			    u8 t, adder = 0;OLED_Set_Pos(x, y);	for(t=0;t<16;t++){OLED_WR_Byte(Hzk[no][t], OLED_DATA);adder += 1;}	OLED_Set_Pos(x, y+1);	for(t=0; t<16; t++){	OLED_WR_Byte(Hzk[no][t+16], OLED_DATA);adder += 1;}					
}/***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/
void OLED_DrawBMP(u8 x0, u8 y0, u8 x1, u8 y1, u8 BMP[])
{ 	unsigned int j = 0;unsigned char x, y;for (y=y0; y<y1; y++){OLED_Set_Pos(x0, y);for (x=x0; x<x1; x++){      OLED_WR_Byte(BMP[j++], OLED_DATA);	    	}}
} 

3----初始化

//初始化SSD1306					    
void OLED_Init(void)
{ 	OLED_WR_Byte(0xAE,OLED_CMD);//--display offOLED_WR_Byte(0x00,OLED_CMD);//---set low column addressOLED_WR_Byte(0x10,OLED_CMD);//---set high column addressOLED_WR_Byte(0x40,OLED_CMD);//--set start line address  OLED_WR_Byte(0xB0,OLED_CMD);//--set page addressOLED_WR_Byte(0x81,OLED_CMD); // contract controlOLED_WR_Byte(0xFF,OLED_CMD);//--128   OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverseOLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 dutyOLED_WR_Byte(0xC8,OLED_CMD);//Com scan directionOLED_WR_Byte(0xD3,OLED_CMD);//-set display offsetOLED_WR_Byte(0x00,OLED_CMD);//OLED_WR_Byte(0xD5,OLED_CMD);//set osc divisionOLED_WR_Byte(0x80,OLED_CMD);//OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode offOLED_WR_Byte(0x05,OLED_CMD);//OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge PeriodOLED_WR_Byte(0xF1,OLED_CMD);//OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartionOLED_WR_Byte(0x12,OLED_CMD);//OLED_WR_Byte(0xDB,OLED_CMD);//set VcomhOLED_WR_Byte(0x30,OLED_CMD);//OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enableOLED_WR_Byte(0x14,OLED_CMD);//OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
}  

主函数:


http://www.ppmy.cn/news/301419.html

相关文章

显示器3d测试软件,IPS显示屏/裸眼3D显示原理及3D应用

● IPS屏幕显示效果还算满意 LG 3D Cube采用一块4.3英寸的IPS屏&#xff0c;屏幕分辨率为480x800&#xff0c;在目前来说也还算是主流的。 正面 手机正面的清晰度和可视角度都还是比较不错的&#xff0c;屏幕比较透亮也还算比较细腻。 侧面 侧面 低角度 在侧面和较低角度的测试…

NT35310 - LCD显示屏

NT35310 - LCD显示屏 芯片介绍\引脚介绍 NT35310 是一个低功耗、26 万色、单芯片的 TFT-LCD 控制器/驱动器&#xff0c;分辨率 480*320&#xff0c;它有一个 345600 字节的显示 RAM 和一整套控制功能。NT35310 支持数字接口&#xff08;MDDI&#xff09;&#xff0c;MIPI 接口…

电子琴OLED显示屏

一、项目说明 ​ 利用Arduino、蜂鸣器、矩阵键盘制作简易的电子琴&#xff0c;可以利用矩阵键盘实现蜂鸣器以特定频率发出声响&#xff0c;并在OLED显示屏上显示相关信息。 二、连线图 没有在Fritzing上找到有源蜂鸣器模块和矩阵键盘模块&#xff0c;所以用无源蜂鸣器PNP三极…

香橙派orangepi pc plus h3驱动spi fbtft显示屏

前言 环境介绍&#xff1a; 1.编译环境 Ubuntu 18.04.5 LTS 2.SDK orangepi Linux 5.4 SDK 3.uboot v2020.04 4.gcc gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf 5.单板 orangepi pc plus 6.spi fbtft显示屏 淘宝中景园买的 1.3寸st7789 ips显示屏 一、…

LCD LED TN IPS等常见的显示器技术名称

LCD就是液晶显示器的简称&#xff08;LC Display&#xff09;&#xff0c;就是液晶材料型的显示器。 TN和STN是被动显示模式的&#xff0c;相对之说的是TFT&#xff08;薄膜电晶体&#xff09;是主动式的显示&#xff0c;TN mode 屏和STN mode 屏的区别是液晶旋转角度不同&…

IPS屏幕

求助编辑百科名片 IPS屏幕&#xff08;In-Plane Switching&#xff0c;平面转换&#xff09;技术是日立公司于2001推出的液晶面板技术&#xff0c;俗称“Super TFT”。从名字中我们也能看出&#xff0c;其实IPS屏幕就是基于TFT的一种技术&#xff0c;其实质还是TFT屏幕。 目录…

ROC-RK3566-PC使用10.1寸IPS触摸屏显示

问题背景 我买了ROC-RK3566-PC的开发板回来&#xff0c;先看了下开发板的产品规格书&#xff0c;了解下硬件接口的使用。因为我还买了10.1寸的触摸屏&#xff0c;想用这款屏作为输出设备&#xff0c;它是MIPI接口&#xff0c;接好后上电没有反应&#xff0c;然后开机依然没有反…

7脚0.96寸OLED使用方法及程序

0.96寸OLED显示屏&#xff0c;控制芯片是SSD1306使用STM32F103CC8T6模拟显示屏通信时序。 使用STM32F103C8T6控制屏幕显示字符、汉字、数字。 标准库编写 汉字只能显示16X16大小的 字符只能显示8*16大小的 如何显示一个字符 0.96寸OLED分辨率是128X64&#xff0c;即X轴上有12…