📄 oled_ssd1339.c
字号:
#include <LPC214x.h>
#include "oled_ssd1339.h"
/**************************************************************************************
* 名 称: _Nop
* 功 能: 短暂的延时
* 参 数: 无
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void _Nop(void)
{
uint i;
for(i = 10;i > 0;i--);
}
/**************************************************************************************
* 名 称: WriCom
* 功 能: 发送显示数据函数,8080总线方式
* 参 数: Dat : 显示数据
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void WriData(uchar ch)
{
LCD_RS_1;
LCD_CS_1;
LCD_DS_1;
LCD_WR_1;
LCD_CS_0;
LCD_DATA(ch);
LCD_WR_0;
LCD_CS_1;
}
/**************************************************************************************
* 名 称: WriCom
* 功 能: 发送显示指令函数,8080总线方式
* 参 数: Com : 显示指令
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void WriCom(uchar ch)
{
LCD_RS_0;
LCD_CS_1;
LCD_DS_1;
LCD_WR_1;
LCD_CS_0;
LCD_DATA(ch);
LCD_WR_0;
LCD_CS_1;
}
/**************************************************************************************
* 名 称: Oled_Init
* 功 能: OLED的初始化函数
* 参 数: 无
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void Oled_Init(void)
{
//从main移过来的
PINSEL0 = 0x00000000;
PINSEL1 = 0x00000000;
PINSEL2 = 0x00000000|(1<<2);
IODIR1 = IODIR1 | 0x00ff0000;
IODIR0 = IODIR0 | 0x00ffff00;
//==================================================================================
LCD_RESET_0; _Nop(); _Nop(); LCD_RESET_1; _Nop(); _Nop();
WriCom(0xAE); //display off
WriCom(0xCA); //Set MUX ratio
WriData(0x7F); //1/128 duty
WriCom(0xA1); //Display start line
WriData(0x00);
WriCom(0xA2); //Set display offset
WriData(0x00);
WriCom(0xA0); //Set re-map
WriData(0x64); //64
WriCom(0xC7); //Master current control
WriData(0x09);
WriCom(0xC1); //Set contrast level for R,G,B
WriData(0xCA); //Red
WriData(0x66); //Green
WriData(0xA6); //Blue
WriCom(0xB1); //Phase adjust
WriData(0x22);
WriCom(0xB3); //Set frame rate
WriData(0x10); //85Hz
WriCom(0xBB); //Set Pre-charge level for R,G,B
WriData(0x00); //Red
WriData(0x00); //Green
WriData(0x00); //Blue
WriCom(0xAD); //Master configuration
WriData(0x8E);
WriCom(0xB0); //Current saving
WriData(0x00);
WriCom(0xBE); //VCOMH setting
WriData(0x1D);
WriCom(0xA6); //Normal display
WriCom(0xD1);
WriData(0x02);
WriCom(0xAF); //display on
}
/**************************************************************************************
* 名 称: Oled_DispOn
* 功 能: 开显示
* 参 数: 无
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void Oled_DispOn(void)
{
WriCom(0xAF); //display on
}
/**************************************************************************************
* 名 称: Oled_DispOff
* 功 能: 关显示
* 参 数: 无
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void Oled_DispOff(void)
{
WriCom(0xAE); //display off
}
/**************************************************************************************
* 名 称: Oled_DispOneColor
* 功 能: 全屏显示某种颜色
* 参 数: Color : 颜色值
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void Oled_DispOneColor(int Color)
{
int i;
WriCom(0x75);
WriData(0x00);
WriData(127);
WriCom(0x15);
WriData(0x00);
WriData(127);
WriCom(0x5c);
for (i=0;i<16384;i++)
{
WriData((uchar)(Color>>8&0xff));
WriData((uchar)(Color&0x00ff));
}
}
/**************************************************************************************
* 名 称: Oled_DispClear
* 功 能: 清除显示屏的显示内容
* 参 数: 无
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void Oled_DispClear(void)
{
Oled_DispOneColor(BLACK);
}
/**************************************************************************************
* 名 称: DrawLine
* 功 能: 画直线
* 参 数: pPoint0 : 直线的起点坐标
* pPoint0 : 直线的终点坐标
* LineColor : 直线的颜色
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void Oled_DrawLine(Oled_Type_Point *pPoint0, Oled_Type_Point *pPoint1,uint LineColor)
{
WriCom(0x83);
WriData(pPoint0->y);
WriData(pPoint0->x);
WriData(pPoint1->y);
WriData(pPoint1->x);
WriData((uchar)(LineColor>>8&0xff));
WriData((uchar)(LineColor&0x00ff));
}
/**************************************************************************************
* 名 称: DrawRect
* 功 能: 画矩形
* 参 数: pRect : 矩形的四角坐标
* LineColor : 矩形边缘线的颜色
* FillColor : 矩形内部的填充颜色
* FillFlag :矩形内是(非0)否(0)要填充颜色
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void Oled_DrawRect(Oled_Type_Rect *pRect,uint LineColor,uint FillColor,uchar FillFlag)
{
WriCom(0x92);
if (FillFlag > 0)
{
WriData(0x01);
}
else
{
WriData(0x00);
}
WriCom(0x84);
WriData(pRect->y0);
WriData(pRect->x0);
WriData(pRect->y1);
WriData(pRect->x1);
WriData((uchar)(LineColor>>8&0xff));
WriData((uchar)(LineColor&0x00ff));
WriData((uchar)(FillColor>>8&0xff));
WriData((uchar)(FillColor&0x00ff));
}
/**************************************************************************************
* 名 称: DrawCircle
* 功 能: 画圆
* 参 数: pPoint : 圆心坐标
* Radius : 圆阿半径
* LineColor : 圆边缘线的颜色
* FillColor : 圆内部的填充颜色
* FillFlag :圆内是(非0)否(0)要填充颜色
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void Oled_DrawCircle(Oled_Type_Point *pPoint,uchar Radius,uint LineColor,uint FillColor,uchar FillFlag)
{
WriCom(0x92);
if (FillFlag > 0)
{
WriData(0x01);
}
else
{
WriData(0x00);
}
WriCom(0x86);
WriData(pPoint->y);
WriData(pPoint->x);
WriData(Radius);
WriData((uchar)(LineColor>>8&0xff));
WriData((uchar)(LineColor&0x00ff));
WriData((uchar)(FillColor>>8&0xff));
WriData((uchar)(FillColor&0x00ff));
}
/**************************************************************************************
* 名 称: DispPic65K
* 功 能: 全屏显示一张65K色的128*128图片
* 参 数: str : 图片数组名
* 返 回 值: 无
*
* 修改历史:
* 版本 日期 作者 改动内容和原因
* ----------------------------------------------------
* 1.0 2006.8.13 lcf 基本的功能完成
**************************************************************************************/
void Oled_DispPic65K(uchar *str)
{
uchar i,j;
WriCom(0x75);
WriData(0x00);
WriData(127);
WriCom(0x15);
WriData(0x00);
WriData(127);
WriCom(0x5c);
for(i=0;i<128;i++)
{
for(j=0;j<128;j++)
{
WriData(*(str+1));
WriData(*str);
str++;
str++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -