sbit OLED_SCL=P1^2; //D0OLEDCLK) ,時鐘腳,由MCU控OLED
sbit OLED_SDA=P1^3; //D1(MOSI) ,主輸出從輸入數據腳,OLEDCU控制
sbit OLED_RST=P3^6; //RES 模塊復位管腳 OLED
sbit OLED_DC =P3^7; //DC 命令數據選擇管腳
sbit OLED_CS =P2^7;
#define XLevelL 0x00
#define XLevelH 0x10
#define XLevel ((XLevelH&0x0F)*16+XLevelL)
#define Max_Column 128
#define Max_Row 64
#define Brightness 0xCF
#define X_WIDTH 128
#define Y_WIDTH 64
/*
4線SPI使用說明:
VBT 供內部DC-DC電壓,3.3~4.3V,如果使用5V電壓,為保險起見串一個100~500歐的電阻
VCC 供內部邏輯電壓 1.8~6V
GND 地
BS0 低電平
BS1 低電平
BS2 低電平
CS 片選管腳
DC 命令數據選擇管腳
RES 模塊復位管腳
D0(SCLK) ,時鐘腳,由MCU控制
D1(MOSI) ,主輸出從輸入數據腳,由MCU控制
D2 懸空
D3-D7 , 低電平 , 也可懸空,但最好設為低電平
RD 低電平 ,也可懸空,但最好設為低電平
RW 低電平 ,也可懸空,但最好設為低電平
RD 低電平 ,也可懸空,但最好設為低電平
*/
//======================================
//****************************函數說明*******************************************
//
//函數功能: 128X64I液晶底層驅動[6X8]字體庫
//參數說明:[6X8]西文字符的字模數據 (縱向取模,字節倒序)
//作 者:晨啟&★☆⑦☆★待☆★
//*******************************************************************************
const unsigned char code F6x8[][6] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
{ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // %
{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
{ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
{ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // ,
{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // -
{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
{ 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
{ 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
{ 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
{ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
{ 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
{ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
{ 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
{ 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
{ 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
{ 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
{ 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
{ 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
{ 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
{ 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
{ 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
{ 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
{ 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
{ 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
{ 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
{ 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
{ 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
{ 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
{ 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
{ 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
{ 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
{ 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
{ 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
{ 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
{ 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
{ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
{ 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
{ 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
{ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
{ 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
{ 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g
{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j
{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p
{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y
{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z
{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines
};
//****************************函數說明*******************************************
//
//函數功能: 128X64I液晶底層驅動[14X16]字體庫
//參數說明:[14X16]中文字符的字模數據 取模方式:陰碼-列行式-逆向-C51
//作 者:晨啟&★☆⑦☆★待☆★
//*******************************************************************************
const unsigned char F7x8[] = {
0xC0,0x38,0x08,0x38,0xC0,0x07,0x18,0x20,0x18,0x07,/*"0",0*/
0x00,0x00,0xF8,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,/*"1",0*/
0x00,0x38,0x08,0xF8,0x00,0x00,0x3C,0x22,0x31,0x00,/*"2",0*/
0x00,0x18,0x08,0xF8,0x00,0x00,0x30,0x20,0x1F,0x00,/*"3",0*/
0x00,0xC0,0x20,0xF8,0x00,0x06,0x05,0x24,0x3F,0x24,/*"4",0*/
0x00,0xF8,0x88,0x88,0x00,0x00,0x30,0x20,0x1F,0x00,/*"5",0*/
0xC0,0x30,0x88,0x98,0x00,0x07,0x19,0x20,0x31,0x0E,/*"6",0*/
0x00,0x18,0x88,0x78,0x00,0x00,0x00,0x3F,0x00,0x00,/*"7",0*/
0x30,0xC8,0x08,0xF8,0x00,0x1E,0x21,0x21,0x1F,0x00,/*"8",0*/
0xE0,0x18,0x08,0xF8,0x00,0x00,0x33,0x22,0x1F,0x00,/*"9",0*/
};
//****************************函數說明*******************************************
//函數功能: OLED數據寫入函數
//參數說明:
//作 者:晨啟&★☆⑦☆★待☆★
//********************************************************OLED********************
void OLED_WrDat(unsigned char dat)
{
unsigned char i=8;
OLED_CS=0;;
OLED_DC=1;;
OLED_SCL=0;;
while(i--)
{
if(dat&0x80)
{
OLED_SDA=1;
}
else
{
OLED_SDA=0;
}
OLED_SCL=1;
;;;
//;;
OLED_SCL=0;;
dat<<=1;
}
OLED_CS=1;
}
//****************************函數說明*******************************************
//函數功能: OLED命令寫入函數
//參數說明:
//作 者:晨啟&★☆⑦☆★待☆★
//********************************************************OLED********************
void OLED_WrCmd(unsigned char cmd)
{
unsigned char i=8;
OLED_CS=0;;
OLED_DC=0;;
OLED_SCL=0;;
while(i--)
{
if(cmd&0x80)
{
OLED_SDA=1;
}
else
{
OLED_SDA=0;;
}
OLED_SCL=1;;
OLED_SCL=0;;
cmd<<=1;;
}
OLED_CS=1;
}
//****************************函數說明*******************************************
//函數功能: 坐標設置
//參數說明:
//作 者:晨啟&★☆⑦☆★待☆★
//********************************************************OLED********************
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
OLED_WrCmd(0xb0+y);
OLED_WrCmd(((x&0xf0)>>4)|0x10); //
OLED_WrCmd((x&0x0f)|0x00); //
}
//****************************函數說明*******************************************
//函數功能: 全屏
//參數說明:
//作 者:晨啟&★☆⑦☆★待☆★
//**********************************************************OLED******************
void OLED_Fill(unsigned char bmp_dat)
{
unsigned char y,x;
for(y=0;y<8;y++)
{
OLED_WrCmd(0xb0+y);
OLED_WrCmd(0x01);
OLED_WrCmd(0x10);
for(x=0;x<X_WIDTH;x++)
OLED_WrDat(bmp_dat);
}
}
//****************************函數說明*******************************************
//函數功能: OLED復位函數
//參數說明:
//作 者:晨啟&★☆⑦☆★待☆★
//********************************************************OLED********************
void OLED_CLS(void)
{
unsigned char y,x;
for(y=0;y<8;y++)
{
OLED_WrCmd(0xb0+y);
OLED_WrCmd(0x01);
OLED_WrCmd(0x10);
for(x=0;x<X_WIDTH;x++)
OLED_WrDat(0);
}
}
//****************************函數說明*******************************************
//函數功能: OLED延時函數
//參數說明:
//********************************************************OLED********************
void OLED_DLY_ms(unsigned int ms)
{
unsigned int a;
while(ms)
{
a=1335;
while(a--);
ms--;
}
return;
}
//****************************函數說明*******************************************
//函數功能: OLED初始化函數
//參數說明:
//作 者:晨啟&★☆⑦☆★待☆★
//*******************************************************OLED*********************
void OLED_Init(void)
{
OLED_SCL=1;
OLED_CS=1; //預制SLK和SS為高電?
OLED_RST=0;
OLED_DLY_ms(50);
OLED_RST=1;
//從上電到下面開始初始化要有足夠的時間,糘LED待RC復位完畢
OLED_WrCmd(0xae);//--- 關閉OLED屏幕OLED
OLED_WrCmd(0x00);//--- 設置低位地OLED
OLED_WrCmd(0x10);//--- 設置高位地OLED
OLED_WrCmd(0x40);//--- 設置起始行地址和映射RAM顯示起始行?x00~0x3F)
OLED_WrCmd(0x81);//-- 設置對比度控制糘LED器
OLED_WrCmd(0xcf); // 設置SEG輸出電流罯LED
OLED_WrCmd(0xa1);//-- 設置SEG/列映射 0xa0左右反置 0OLED正常
OLED_WrCmd(0xc8);// 設置COM/行掃描方向 0xc0上下反置OLEDc8正常
OLED_WrCmd(0xa6);//-- 設置正常顯?
OLED_WrCmd(0xa8);//-- 設置多路復用比率(1OLED)
OLED_WrCmd(0x3f);//-- 1/64 duty
OLED_WrCmd(0xd3);//- 設置顯示偏移移位映射RAM計數器(0OLED~0x3F)
OLED_WrCmd(0x00);//- 不偏移OLED
OLED_WrCmd(0xd5);//-- 設置顯示時鐘分頻比/OLED雌髕德蔕LED
OLED_WrCmd(0x80);//-- 設置分頻比,將時鐘設置OLED00幀/秒
OLED_WrCmd(0xd9);//-- 設置預充電諳LED
OLED_WrCmd(0xf1);// 將預充電設置為15個時鐘,放OLED柚夢?個時OLED
OLED_WrCmd(0xda);//-- set com pins hardware configuration
OLED_WrCmd(0x12);
OLED_WrCmd(0xdb);//-- set vcomh
OLED_WrCmd(0x40);// Set VCOM Deselect Level
OLED_WrCmd(0x20);//- Set Page Addressing Mode (0x00/0x01/0x02) 設置頁面地址腛LED
OLED_WrCmd(0x02);//
OLED_WrCmd(0x8d);//-- set Charge Pump enable/disable
OLED_WrCmd(0x14);//-- set(0x10) disable
OLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
OLED_WrCmd(0xaf);//-- turn on oled panel 打開OLED屏幕OLED
OLED_Fill(0x00); // 初始清屏OLED
OLED_Set_Pos(0,0);
}
//****************************函數說明*******************************************
//函數功能: 寫入一組標準ASCII字符串 6*8
//參數說明:顯示的位置(x,y),y為頁范圍0~7,要顯示的字符串
//作 者:晨啟&★☆⑦☆★待☆★
//******************************OLED**********************************************
void OLED_P6x8Str(unsigned char x,unsigned char y,unsigned char ch[])
{
unsigned char c=0,i=0,j=0;
while (ch[j]!='\0')
{
c =ch[j]-32;
if(x>126){x=0;y++;}
OLED_Set_Pos(x,y);
for(i=0;i<6;i++)
OLED_WrDat(F6x8[c][i]);
x+=6;
j++;
}
}
//****************************函數說明*******************************************
//函數功能: 輸出漢字字符串
//參數說明:顯示的位置(x,y),y為頁范圍0~7,顯示的漢字位置
//作 者:晨啟&★☆⑦☆★待☆★
//********************************OLED********************************************
void OLED_P7x8Ch(unsigned char x,unsigned char y,unsigned char N)
{
unsigned char wm=0,ii = 0;
unsigned int adder=10*N;
OLED_Set_Pos(x , y);
for(wm = 0;wm < 5;wm++)
{
OLED_WrDat(F7x8[adder]);
adder += 1;
} //第一頁顯示
OLED_Set_Pos(x,y + 1);
for(wm = 0;wm < 5;wm++)
{
OLED_WrDat(F7x8[adder]);
adder += 1;
} //第二頁顯示
}
void delay(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<500;jj++);
}
unsigned char code hao[10]={0,1,2,3,4,5,6,7,8,9};
void dig_scan(unsigned char x,unsigned char y,unsigned int dat )
{
unsigned char i=0;
switch(i)
{
case 0:
{
OLED_P7x8Ch(x,y,hao[dat]);
break;
}
case 1:
{
OLED_P7x8Ch(x,y,hao[dat]);
break;
}
}
delay(5);
++i;
if(i>1)
i=0;
}
//****************************函數說明*******************************************
//
//函數功能: BMP圖片顯示函數
//參數說明:x0 ,y0:初始坐標(默認0,0);x1:水平128個點(默認),y1:8頁(默認寫8);BMP:圖片序號;
//作 者:晨啟&★☆⑦☆★待☆★
//*******************************************************************************
/*void Draw_BMP(unsigned char x0, y0,x1, y1,unsigned char BMP[])
{
unsigned int j=0;
unsigned char x,y;
//if(y1%8==0) y=y1/8;
//else y=y1/8+1;
for(y=y0;y<y1;y++)
{
OLED_Set_Pos(x0,y);
for(x=x0;x<x1;x++)
{
OLED_WrDat(BMP[j++]);
}
}
}*/
void main(void)
{
OLED_Init();
while(1)
{
OLED_P6x8Str(2,2,"count down:");
}
}
}
我之前程序也不行,用這個就可以了 |