12864 OLED液晶
用STC12C5A60S2在12864OLED液晶上任意显示一个点,用显存的方法,但显示的却是花屏,请问是什么原因?以下是显存的程序:
ucharxdataOLED_GRAM;
//更新显存到LCD
void OLED_Refresh_Gram(void)
{
uchar i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7)
OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址
OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址
for(n=0;n<128;n++)OLED_WR_Byte(~OLED_GRAM,OLED_DATA);
}
}
//画点
//x:0~127
//y:0~63
//t:1 填充 0,清空
void OLED_DrawPoint(uchar x,uchar y,uchar t)
{
uchar pos,bx,temp=0;
if(x>127||y>63)return;//超出范围了.
pos=7-y/8;
bx=y%8;
temp=1<<(7-bx);
if(t)OLED_GRAM|=temp;
else OLED_GRAM&=~temp;
}
OLED是OLED,液晶是液晶 楼主还是上传一个工程吧,这样貌似看不出来问题 这段程序移植到32上完全没有问题!放到51上就不行了。不知道是不是RAM的问题。 注意大小端,数据引脚上下拉,还有内存大小128*8=1024=1K了 whatcanitbe 发表于 2014-4-18 13:18
注意大小端,数据引脚上下拉,还有内存大小128*8=1024=1K了
STC12C5A60S2的FLASH有60K,RAM有1280字节 本帖最后由 lswhome 于 2014-4-19 00:36 编辑
UINT8 DispBuff;
for(y=0;y<8;y++)
{
ST7565_Set_Pos(y,0);
for(x=0;x<128;x++)
ST7565_Write_Data(DispBuff);//写入数据
}
我是这样的,行地址设置自动增加,每一行(页)就设置一次地址,然后循环128次,就写入了一页的数据。目前没问题,使用60s2@24M自带的SPI,3毫秒左右刷满屏一屏 lswhome 发表于 2014-4-19 00:33
我是这样的,行地址设置自动增加,每一行(页)就设置一次地址,然后循环128次,就写入了一页的数据。目前 ...
请问您是用DST7565驱动的么? xz199264 发表于 2014-4-19 02:43
请问您是用DST7565驱动的么?
那个OLED SSD1306 还是SH1106还是啥的,我记不好了,跟这个行列的排列方法是一样的,好像就只是初始化不太一样而已。
ST7565、UC1701X、1306、1106这几个控制器行列的排列方法好像都是一样的,指令也基本一样。。。。我记得我这里都是一个驱动,全都可以,就初始化稍微不同。。。用条件编译就搞定了吧 ram溢出吧 lswhome 发表于 2014-4-19 03:08
那个OLED SSD1306 还是SH1106还是啥的,我记不好了,跟这个行列的排列方法是一样的,好像就只是初始化不 ...
现在我可以任意显示一个点,但再多就不行了,出错,两个点以上就排在一行了,水平没问题,就是高度都一样。能参考一下您的程序么? reynold007 发表于 2014-4-19 06:51
ram溢出吧
我用STC12C5A60S2的FLASH,有60K.应该没有问题吧。 首先,STC默认是弱上拉,高速时候可能向上跳变的速度不够。
其次,请检查编译器结果,是否xdata只消耗了1024?多一字节也不行
页:
[1]