關于 最后一句 OLED_WrCmd((x&0x0f)|0x01); 引起的第1豎顯示問題解決了.
未解決問題點: 全部點顯示 后 ,再全部滅 有 操作時留有 "鋸齒余暉" 問題, 請教一下大家
解決問題點:
//問題點1: OLED12864 無顯示
這個程序是 STC89C52 的程序 ,
1.1 IO修改
//-STC89C52
sbit SCL=P1^3; //串行時鐘
sbit SDA=P1^2; //串行數據
//-STC8H8K 修改后
sbit SCL=P5^1; //串行時鐘
sbit SDA=P5^0; //串行數據
加
//-STC8H8K 頻率設置 5.55296Mhz
P5M1 &= 0xFE; P5M0 &= 0xFE;; //設置為準雙向口 P5.0
P5M1 &= 0xFD; P5M0 &= 0xFD;; //設置為準雙向口 P5.1
1.2現在測試是 STC8H8K 單片機,燒錄時內部晶振 改5.5296Mhz.
//問題點2: OLED12864 第1列顯示不正常
2.1 修改 LQ12864.h 3個函數
// // *********************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)|0x01); //列的第1行 錯誤,無法清零
// OLED_WrCmd(x&0x0f); //列的第1行 錯誤,無法清零 修改
// }
// // *********************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行 錯誤,無法清零 注銷
//
// OLED_WrCmd(0x10);
// for(x=0;x<X_WIDTH;x++)
// OLED_WrDat(bmp_dat);
// }
// }
// // *********************OLED復位************************************
// void OLED_CLS(void)
// {
// unsigned char y,x;
// for(y=0;y<8;y++)
// {
// OLED_WrCmd(0xb0+y);
// // OLED_WrCmd(0x01); //列的第1行 錯誤,無法清零 注銷
// OLED_WrCmd(0x10);
// for(x=0;x<X_WIDTH;x++)
// OLED_WrDat(0);
// }
// }
//問題點3: OLED12864 時鐘只能6Mhz左右才有顯示,修改后 5~35MHz 可以
3.1 修改 LQ12864.h 3個函數(IO操作加入3個 空操作指令) ,增加系統帶頭文件
void IIC_Start();
void IIC_Stop();
void Write_IIC_Byte(unsigned char IIC_Byte);
4.未解決問題點: 全部點顯示 后 ,再全部滅 有 操作時留有 "鋸齒余暉" 問題, 請教一下大家
while(1)
{
OLED_Fill(0xff); //屏全亮
delay(4000);
OLED_Fill(0x00); //屏全滅 操作時留有 "鋸齒余暉" 問題:
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++)//通過點整顯示漢字 -- i表示字表數組的位置
{
// 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); //圖片顯示(圖片顯示慎用,生成的字表較大,會占用較多空間,FLASH空間8K以下慎用)
delay(8000);
Draw_BMP(0,0,128,8,BMP2);
delay(8000);
} |