![]() |
看各個角的電平 |
建議你買個幾十塊的邏輯分析儀,看看是不是有時鐘出來了。時序對不對。 |
背光有電了沒?晶振對不對 |
用邏輯分析儀或者示波器抓一下串行輸出的波形,以及發出的initial code 是否正確, 點不了要么是串口時序不對,要么是初始化代碼不對。 |
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:"); } } } 我之前程序也不行,用這個就可以了 |
先年芯片手冊,把原理弄懂了,問題基本上就解決了。 原理不懂,弄亮了,對你也無多大幫助。 |