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 + -
显示快捷键?