|
關(guān)于 最后一句 OLED_WrCmd((x&0x0f)|0x01); 引起的第1豎顯示問題解決了.
未解決問題點(diǎn): 全部點(diǎn)顯示 后 ,再全部滅 有 操作時(shí)留有 "鋸齒余暉" 問題, 請(qǐng)教一下大家
解決問題點(diǎn):
//問題點(diǎn)1: OLED12864 無(wú)顯示
這個(gè)程序是 STC89C52 的程序 ,
1.1 IO修改
//-STC89C52
sbit SCL=P1^3; //串行時(shí)鐘
sbit SDA=P1^2; //串行數(shù)據(jù)
//-STC8H8K 修改后
sbit SCL=P5^1; //串行時(shí)鐘
sbit SDA=P5^0; //串行數(shù)據(jù)
加
//-STC8H8K 頻率設(shè)置 5.55296Mhz
P5M1 &= 0xFE; P5M0 &= 0xFE;; //設(shè)置為準(zhǔn)雙向口 P5.0
P5M1 &= 0xFD; P5M0 &= 0xFD;; //設(shè)置為準(zhǔn)雙向口 P5.1
1.2現(xiàn)在測(cè)試是 STC8H8K 單片機(jī),燒錄時(shí)內(nèi)部晶振 改5.5296Mhz.
//問題點(diǎn)2: OLED12864 第1列顯示不正常
2.1 修改 LQ12864.h 3個(gè)函數(shù)
// // *********************OLED 設(shè)置坐標(biāo)************************************
// void OLED_Set_Pos(unsigned char x, unsigned char y)
// {
// OLED_WrCmd(0xb0+y);
// OLED_WrCmd(((x&0xf0)>>4)|0x10);
// // OLED_WrCmd((x&0x0f)|0x01); //列的第1行 錯(cuò)誤,無(wú)法清零
// OLED_WrCmd(x&0x0f); //列的第1行 錯(cuò)誤,無(wú)法清零 修改
// }
// // *********************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); //列的第1行 錯(cuò)誤,無(wú)法清零 注銷
//
// OLED_WrCmd(0x10);
// for(x=0;x<X_WIDTH;x++)
// OLED_WrDat(bmp_dat);
// }
// }
// // *********************OLED復(fù)位************************************
// void OLED_CLS(void)
// {
// unsigned char y,x;
// for(y=0;y<8;y++)
// {
// OLED_WrCmd(0xb0+y);
// // OLED_WrCmd(0x01); //列的第1行 錯(cuò)誤,無(wú)法清零 注銷
// OLED_WrCmd(0x10);
// for(x=0;x<X_WIDTH;x++)
// OLED_WrDat(0);
// }
// }
//問題點(diǎn)3: OLED12864 時(shí)鐘只能6Mhz左右才有顯示,修改后 5~35MHz 可以
3.1 修改 LQ12864.h 3個(gè)函數(shù)(IO操作加入3個(gè) 空操作指令) ,增加系統(tǒng)帶頭文件
void IIC_Start();
void IIC_Stop();
void Write_IIC_Byte(unsigned char IIC_Byte);
4.未解決問題點(diǎn): 全部點(diǎn)顯示 后 ,再全部滅 有 操作時(shí)留有 "鋸齒余暉" 問題, 請(qǐng)教一下大家
while(1)
{
OLED_Fill(0xff); //屏全亮
delay(4000);
OLED_Fill(0x00); //屏全滅 操作時(shí)留有 "鋸齒余暉" 問題:
delay(4000);
OLED_P16x16Ch(24,0,1);
OLED_P16x16Ch(40,0,2);
OLED_P16x16Ch(57,0,3);
OLED_P16x16Ch(74,0,4);
OLED_P16x16Ch(91,0,5);
for(i=0; i<8; i++)//通過點(diǎn)整顯示漢字 -- i表示字表數(shù)組的位置
{
// OLED_P16x16Ch(i*16,0,i);
OLED_P16x16Ch(i*16,2,i+8);
OLED_P16x16Ch(i*16,4,i+16);
OLED_P16x16Ch(i*16,6,i+24);
}
delay(4000);
OLED_CLS();//清屏
OLED_P8x16Str(0,0,"HelTec");//第一行 -- 8x16的顯示單元顯示ASCII碼
OLED_P8x16Str(0,2,"OLED Display");
OLED_P8x16Str(0,4,"helte");
OLED_P6x8Str(0,6,"12345");
OLED_P6x8Str(0,7,"heltec");
delay(4000);
OLED_CLS();
Draw_BMP(0,0,128,8,BMP1); //圖片顯示(圖片顯示慎用,生成的字表較大,會(huì)占用較多空間,F(xiàn)LASH空間8K以下慎用)
delay(8000);
Draw_BMP(0,0,128,8,BMP2);
delay(8000);
} |
|