关于 最后一句 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);
} |