lcd.c
来自「本源码是用ARM9 2410开发的OLED液晶驱动开发代码」· C语言 代码 · 共 268 行
C
268 行
/*************************
LCD
**************************/
#include"2410addr.h"
#include"stdio.h"
#include"string.h"
#include <stdarg.h>
#include"Def.h"
#include"Lcd.h"
#define D0 (0x1<<12) //GPC12
#define D1 (0x1<<11) //GPD11
#define D2 (0x1<<11) //GPC11
#define D3 (0x1<<12) //GPD12
#define D4 (0x1<<3) //GPD3
#define D5 (0x1<<13) //GPD13
#define D6 (0x1<<15) //GPD15
#define D7 (0x1<<14) //GPD14
#define RD (0x1<<7) //GPD7
#define WR (0x1<<13) //GPC13
#define RES (0x1<<14 ) //GPC14
#define DC (0x1<<6 ) //GPD6
#define CS (0x1<<15 ) //GPC15
extern void Delay(U32 time);
U8 figer[100][6]={/*宽x高=6x8*/
{0x00,0x00,0xBF,0x00,0x00,0x00},//!
{0x00,0x0C,0x02,0x0C,0x02,0x00},//"
{0x00,0x28,0xF8,0x2E,0xF8,0x2E},//#
{0x00,0xCC,0x92,0xFF,0xE6,0x00},//$
{0x00,0x1E,0x9E,0x70,0xFC,0xF2},//%
{0x00,0x60,0x9E,0xEE,0xB8,0x88},//&
{0x00,0x08,0x06,0x00,0x00,0x00},//'
{0x00,0x3C,0x42,0x81,0x00,0x00},//(
{0x00,0x81,0x42,0x3C,0x00,0x00},//)
{0x00,0x48,0x30,0xFC,0x30,0x48},//*
{0x00,0x10,0x10,0x7C,0x10,0x10},//+
{0x00,0x80,0x60,0x00,0x00,0x00},//,
{0x00,0x00,0x10,0x10,0x10,0x10},//-
{0x00,0x00,0x80,0x00,0x00,0x00},//.
{0x00,0xC0,0x30,0x0E,0x01,0x00},///
{0x7E,0x91,0x89,0x85,0x7E,0x00},//0
{0x00,0x82,0xFF,0x80,0x00,0x00},//1
{0xC6,0xA1,0x91,0x89,0x86,0x00},//2
{0x42,0x81,0x89,0x89,0x76,0x00},//3
{0x10,0x2C,0x22,0xFF,0xA0,0x00},//4
{0x4F,0x89,0x89,0x89,0x71,0x00},//5
{0x7E,0x89,0x89,0x8B,0x70,0x00},//6
{0x03,0x01,0xF9,0x07,0x01,0x00},//7
{0x76,0x89,0x89,0x89,0x76,0x00},//8
{0x0E,0xD1,0x91,0x91,0x7E,0x00},//9
{0x07,0x18,0xE0,0x00,0x00,0x00},//:
{0x00,0x00,0x00,0xC4,0x00,0x00},//;
{0x00,0x10,0x28,0x44,0x82,0x00},//<
{0x48,0x48,0x48,0x48,0x48,0x48},//=
{0x00,0x82,0x44,0x28,0x10,0x00},//>
{0x00,0x06,0xB1,0x09,0x06,0x00},//?
{0x00,0x7C,0x82,0xBA,0x96,0x7C},//@
{0x80,0xF8,0x27,0x3C,0xE0,0x80},//A
{0x81,0xFF,0x89,0x89,0x76,0x00},//B
{0x7E,0x81,0x81,0x81,0x43,0x00},//C
{0x81,0xFF,0x81,0x81,0x7E,0x00},//D
{0x81,0xFF,0x89,0x9D,0xC3,0x00},//E
{0x81,0xFF,0x89,0x1D,0x03,0x00},//F
{0x3C,0x42,0x81,0x91,0x73,0x00},//G
{0x81,0xFF,0x08,0x08,0xFF,0x81},//H
{0x81,0x81,0xFF,0x81,0x81,0x00},//I
{0x40,0x81,0x81,0x7F,0x01,0x01},//J
{0x81,0xFF,0x89,0x34,0xC3,0x81},//K
{0x81,0xFF,0x81,0x80,0x80,0xC0},//L
{0xFF,0x0F,0xF0,0x0F,0xFF,0x00},//M
{0x81,0xFF,0x8C,0x31,0xFF,0x01},//N
{0x7E,0x81,0x81,0x81,0x7E,0x00},//O
{0x81,0xFF,0x89,0x09,0x06,0x00},//P
{0x7E,0xA1,0xA1,0xC1,0x7E,0x00},//Q
{0x81,0xFF,0x89,0x19,0xE6,0x80},//R
{0xC6,0x89,0x89,0x91,0x63,0x00},//S
{0x03,0x81,0xFF,0x81,0x03,0x00},//T
{0x01,0x7F,0x80,0x80,0x7F,0x01},//U
{0x01,0x1F,0xE0,0x38,0x07,0x01},//V
{0x07,0xF8,0x0F,0xF8,0x07,0x00},//W
{0x81,0xE7,0x18,0xE7,0x81,0x00},//X
{0x01,0x87,0xF8,0x87,0x01,0x00},//Y
{0x83,0xE1,0x99,0x87,0xC1,0x00},//Z
{0x00,0x00,0xFF,0x81,0x81,0x00},//[
{0x07,0x18,0xE0,0x00,0x00,0x00},///*\*/
{0x00,0x00,0x81,0x81,0xFF,0x00},//]
{0x00,0x08,0x04,0x08,0x00,0x00},//^
{0x80,0x80,0x80,0x80,0x80,0x80},//_
{0x00,0x00,0x00,0x04,0x00,0x00},//`
{0x00,0x34,0x2C,0x3C,0x20,0x00},//a
{0x00,0x3E,0x28,0x38,0x00,0x00},//b
{0x00,0x18,0x3C,0x24,0x00,0x00},//c
{0x00,0x38,0x28,0x3E,0x00,0x00},//d
{0x00,0x1C,0x2A,0x2A,0x2C,0x00},//e
{0x00,0x24,0x3E,0x25,0x01,0x00},//f
{0x00,0x98,0xA4,0xA4,0x7C,0x00},//g
{0x00,0x3F,0x04,0x3C,0x00,0x00},//h
{0x00,0x28,0x3D,0x20,0x00,0x00},//i
{0x00,0x80,0x88,0xFD,0x00,0x00},//j
{0x00,0x3F,0x08,0x34,0x00,0x00},//k
{0x00,0x22,0x3F,0x20,0x00,0x00},//l
{0x00,0x3C,0x02,0x3E,0x02,0x3C},//m
{0x00,0x00,0x3E,0x02,0x3E,0x00},//n
{0x00,0x18,0x24,0x24,0x18,0x00},//o
{0x00,0xF8,0x28,0x38,0x00,0x00},//p
{0x00,0x38,0x28,0xF8,0x00,0x00},//q
{0x00,0x22,0x3E,0x22,0x06,0x00},//r
{0x00,0x24,0x2A,0x12,0x00,0x00},//s
{0x00,0x04,0x3E,0x24,0x00,0x00},//t
{0x04,0x1C,0x20,0x20,0x1C,0x20},//u
{0x00,0x04,0x0C,0x30,0x0C,0x04},//v
{0x00,0x1C,0x30,0x3C,0x30,0x1C},//w
{0x00,0x24,0x24,0x18,0x24,0x24},//x
{0x00,0x26,0x38,0x0C,0x06,0x00},//y
{0x00,0x24,0x34,0x2C,0x24,0x00},//z
{0x00,0x08,0xFF,0x81,0x00,0x00},//{
{0x00,0x00,0xFF,0x00,0x00,0x00},//|
{0x00,0x00,0x81,0xFF,0x08,0x00},//}
{0x02,0x01,0x02,0x04,0x04,0x02}//~
};
/**************************实现函数********************************************
*函数原型: unsigned char ReadCommand(void);
*功 能: 从oled上读当前命令到控制器。
*******************************************************************************/
void Write(unsigned char data)
{
if(data&0x01)
rGPCDAT|=D0;
else rGPCDAT&=~D0;
if(data>>1&0x01)
rGPDDAT|=D1;
else rGPDDAT&=~D1;
if(data>>2&0x01)
rGPCDAT|=D2;
else rGPCDAT&=~D2;
if(data>>3&0x01)
rGPDDAT|=D3;
else rGPDDAT&=~D3;
if(data>>4&0x01)
rGPDDAT|=D4;
else rGPDDAT&=~D4;
if(data>>5&0x01)
rGPDDAT|=D5;
else rGPDDAT&=~D5;
if(data>>6&0x01)
rGPDDAT|=D6;
else rGPDDAT&=~D6;
if(data>>7&0x01)
rGPDDAT|=D7;
else rGPDDAT&=~D7;
}
void WriteCommand(unsigned char com)
{
rGPCDAT|=CS;//CS=1;
Delay(500);
rGPDDAT&=~DC;//DC=0;
Delay(500);
rGPCDAT&=~WR;//WR=0;
Delay(500);
rGPDDAT|=RD;//RD=1;
Delay(500);
rGPCDAT&=~CS;//CS=0;
Write(com);
Delay(100);
rGPCDAT|=CS;//CS=1;
}
/**************************实现函数********************************************
*函数原型: void WriteData(unsigned dat);
*功 能: 写数据到oled显示屏。
*******************************************************************************/
void WriteData(unsigned char dat)
{
rGPCDAT|=CS;//CS=1;
Delay(5000);
rGPDDAT|=DC;//DC=1;
Delay(5000);
rGPCDAT&=~WR;//WR=0;
Delay(5000);
rGPDDAT|=RD;//RD=1;
Delay(5000);
rGPCDAT&=~CS;//CS=0;
Write(dat);//DAT=dat;
Delay(100);
rGPCDAT|=CS;//CS=1;
}
/**************************实现函数********************************************
*函数原型: void esbusini(void);
*功 能: 总线初始化。
*******************************************************************************/
void esbusini(void)
{
rGPCDAT&=~RES;//RES=0;
Delay(300);
rGPCDAT|=RES;//RES=1;
}
/**************************实现函数********************************************
*函数原型: void ini_dis(void);
*功 能: 显示初始化。
*******************************************************************************/
void ini_dis(void)
{
unsigned char i,j;
for(i=0;i<8;i++)
{
WriteCommand (0xb0+i); //设置显示位置—行
WriteCommand (0x00); //设置显示位置—列低地址
WriteCommand (0x10); //设置显示位置—列高地址
for(j=0;j<128;j++)
WriteData(0x00); //屏幕显示,全亮
}
}
/**************************实现函数********************************************
*函数原型: void ini_oled(void);
*功 能: oled显示的准备工作。
*******************************************************************************/
void ini_oled(void)
{
esbusini();
/*************************************************
// SSD1303 Initialization Command
*************************************************/
// Lower Column Address
WriteCommand(0x00); /* Set Lower Column Address */
// High Column Address
WriteCommand(0x10); /* Set Higher Column Address*/
// Display Start Line
WriteCommand(0x40); /* Set Display Start Line */
// Contrast Control Register
WriteCommand(0x81); /* Set Contrast Control */
WriteCommand(0x20); /* 0 ~ 255 */
// Re-map
WriteCommand(0xA0); /* [A0]:column address 0 is map
to SEG0 , [A1]: columnaddress 131 is map to SEG0*/
// Entire Display ON/OFF
WriteCommand(0xA4); /* A4=ON */
// Normal or Inverse Display
WriteCommand(0XA6); /* Normal Display*/
// Multiplex Ratio
WriteCommand(0xA8); /* Set Multiplex Ratio */
WriteCommand(0x3f); /* Set to 36 Mux*/
// Set DC-DC
WriteCommand(0xAD); /* Set DC-DC */
WriteCommand(0x8A); /* 8B=ON, 8A=Off */
// Display ON/OFF
WriteCommand(0xAE); /* AF=ON , AE=OFF*/
// Display Offset
WriteCommand(0xD3); /* Set Display Offset */
WriteCommand(0x00); /* No offset */
// Display Clock Divide
WriteCommand(0xD5); /* Set Clock Divide */
WriteCommand(0x20); /* Set to 80Hz */
// Area Color Mode
WriteCommand(0xD8); /* Set Area Color On or Off*/
WriteCommand(0x00); /* Mono Mode */
// COM Pins Hardware Configuration
WriteCommand(0xDA); /* Set Pins HardwareConfiguration */
WriteCommand(0x12);
// VCOMH
WriteCommand(0xDB); /* Set VCOMH */
WriteCommand(0x00);
// VP
WriteCommand(0xD9); /* Set VP */
WriteCommand(0x22); /* P1=2 , P2=2 */
WriteCommand(0xc0);//配置成标准应用
ini_dis();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?