模块是ST7565R。 因为显示字母用16(行)×8(列)的格式,字库这样做的。连续字符本应各占用连续的8个column吧,可函数disps运行后第0、2、4个字符分别被第1、3、5个覆盖。disp1能把所有字符都连续显示出来,各自16列,很难看。 是否该芯片能把column自动按16取整,还是我哪里设置不对? 弄了整半天了唉,多谢!
void disp_16by8(uchar page,uchar column,uchar *str){ uchar i; EA=0;WFEED1=0xA5;WFEED2=0x5A;EA=1; page=page+0xb0; column=column&0x7f; // column<128. write_LCD_command(page); write_LCD_command(0x0f&column); //set start column adress write_LCD_command(0x10|(0x0f&(column>>4))); for(i=0;i<8;i++) write_LCD_data(*(str+i));
page++; write_LCD_command(page); write_LCD_command(0x0f&column); //set start column adress write_LCD_command(0x10|(0x0f&(column>>4))); for(i=8;i<16;i++) write_LCD_data(*(str+i));
void disps(uchar page,uchar column,uchar *str,uchar length){ uchar i; for(i=0;i<length;i++){ disp_16by8(page,column+8*i,asc_to_disp(*str)); str=str+1;// delay_ms(100); } }
void disps1(uchar page,uchar column,uchar *str,uchar length){ uchar i; for(i=0;i<length;i++){ disp_16by8(page,column+16*i,asc_to_disp(*str)); str=str+1;// delay_ms(100); } }
|