?? ssd1303.h
字號:
#ifndef _SSD1303_H_
#define _SSD1303_H_
//以下為接口定義,根據用戶的實驗板接口不同而自行定義
#define DAT P1
sbit RD=P3^2;
sbit DC=P3^3;
sbit RES=P3^4;
sbit CS=P3^5;
sbit WR=P3^7;
unsigned char code num[10][16]={
{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"0"*/
{0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"1"*/
{0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00},/*"2"*/
{0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00},/*"3"*/
{0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00},/*"4"*/
{0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00},/*"5"*/
{0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00},/*"6"*/
{0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00},/*"7"*/
{0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},/*"8"*/
{0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00} /*"9"*/
};
//****************************主要操作函數************************************
void WriteCommand(unsigned com); //寫命令程序
void WriteData(unsigned dat); //寫數據程序
void esbusini(void); //初始化總線程序
void ini_oled(void); //OLED初始化
void ini_dis(void); //顯示初始化(清除緩沖區)
/**************************實現函數********************************************
*函數原型: unsigned char ReadCommand(void);
*功 能: 從oled上讀當前命令到控制器。
*******************************************************************************/
void WriteCommand(unsigned com)
{
CS=1;
DC=0;
WR=0;
RD=1;
CS=0;
DAT=com;
CS=1;
}
/**************************實現函數********************************************
*函數原型: void WriteData(unsigned dat);
*功 能: 寫數據到oled顯示屏。
*******************************************************************************/
void WriteData(unsigned dat)
{
CS=1;
DC=1;
WR=0;
RD=1;
CS=0;
DAT=dat;
CS=1;
}
/**************************實現函數********************************************
*函數原型: void esbusini(void);
*功 能: 總線初始化。
*******************************************************************************/
void esbusini(void)
{
RES=0;
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();
}
/*******************************function************************************************************/
//*******************顯示X,Y坐標處的一個字符。一行可以顯示16個字符。X為0到15,Y為0到3**************
void disc(unsigned char X,unsigned char Y,unsigned char * c)
{
unsigned char n;
WriteCommand (0xb7-(Y<<1));
if(X%2)
WriteCommand (0x08);
else
WriteCommand (0x00);
WriteCommand (0x10+(X>>1));
for(n=0;n<=15;n+=2)
WriteData(*(c+n));
WriteCommand (0xb7-(Y<<1)-1);
if(X%2)
WriteCommand (0x08);
else
WriteCommand (0x00);
WriteCommand (0x10+(X>>1));
for(n=1;n<=15;n+=2)
WriteData(*(c+n));
}
// X is 0 to 7
void dish(unsigned char X,unsigned char Y,unsigned char * h)
{
unsigned char n;
WriteCommand (0xb7-(Y<<1));
if(X%2)
WriteCommand (0x08);
else
WriteCommand (0x00);
WriteCommand (0x10+(X>>1));
for(n=0;n<=31;n+=2)
WriteData(*(h+n));
WriteCommand (0xb7-(Y<<1)-1);
if(X%2)
WriteCommand (0x08);
else
WriteCommand (0x00);
WriteCommand (0x10+(X>>1));
for(n=1;n<=31;n+=2)
WriteData(*(h+n));
}
void disn(unsigned char X,unsigned char Y,unsigned char n)
{
unsigned char m;
WriteCommand (0xb7-(Y<<1));
if(X%2)
WriteCommand (0x08);
else
WriteCommand (0x00);
WriteCommand (0x10+(X>>1));
//for(n=0;n<=15;n+=2)
// WriteData(*(c+n));
for(m=0;m<=15;m+=2)
WriteData(*(num[n]+m));
WriteCommand (0xb7-(Y<<1)-1);
if(X%2)
WriteCommand (0x08);
else
WriteCommand (0x00);
WriteCommand (0x10+(X>>1));
for(m=1;m<=15;m+=2)
WriteData(*(num[n]+m));
}
/*****************************************************************
*****************file is end here*********************************
*****************************************************************/
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -