各位大佬,你们好!这是一个无字库屏,
我用12864显示中文的函数,改了一个显示数字的函数,(16*8的点阵)
产生了一个很奇怪的问题,第一个数字可以正常清新显示,横向第二个却无法正常显示,
或者说单数列能正常显示,双数列不能正常显示
如下图所示,
用的显示函数都一样,单片机主函数如下:
void main()
{
u8 i = 128;
Lcd12864_Init(); //初始化12864屏
Lcd12864_ClearScreen(); //清屏
Lcd12864_Write8ascii(0, 0, 16); //显示0
Lcd12864_Write8ascii(8, 0, 16); //显示0,不正常
Lcd12864_Write8ascii(0, 2, 17); //1
Lcd12864_Write8ascii(8, 2, 17); //显示1,不正常
Lcd12864_Write8ascii(0, 4, 18); //2
Lcd12864_Write8ascii(8, 4, 18); //不正常
Lcd12864_Write8ascii(0, 6, 19); //3
Lcd12864_Write8ascii(8, 6, 19); //不正常
Lcd12864_Write8ascii(16, 0, 20); //4
Lcd12864_Write8ascii(24, 0, 20);
Lcd12864_Write8ascii(16, 2, 21); //5
Lcd12864_Write8ascii(24, 2, 21);
Lcd12864_Write8ascii(16, 4, 22); //6
Lcd12864_Write8ascii(24, 4, 22);
Lcd12864_Write8ascii(16, 6, 23); //7
Lcd12864_Write8ascii(24, 6, 23);
Lcd12864_Write8ascii(32, 0, 24); //8
Lcd12864_Write8ascii(40, 0, 24);
Lcd12864_Write8ascii(32, 4, 25); //9
Lcd12864_Write8ascii(40, 4, 25);
while (1)
{
}
}
显示函数如下:
void Lcd12864_Write8ascii(u8 x, u8 y, u8 Num)
{
u8 j, x1, x2;
y += 0xB0; //求取Y坐标的值
for( j=0; j<16; j++) //
{
//--设置Y坐标--//
LcdSt7565_WriteCmd(y);
x1 = (x >> 4) & 0x0F; //由于X坐标要两句命令,分高低4位,所以这里先取出高4位
x2 = x & 0x0F; //去低四位
//--设置X坐标--//
LcdSt7565_WriteCmd(0x10 + x1); //高4位
LcdSt7565_WriteCmd(0x04 + x2); //低4位
if (j == 8) //由于8X16用到两个Y坐标,当大于等于8时,切换坐标
{
y+=1;
x-=8;
}
LcdSt7565_WriteData(ascii_1608[Num][j]);
x ++;
}
}
请教各位大佬,我这哪里出问题了?
对了排除是屏幕坏的可能性,我用扫屏函数都扫过,每个点都能点亮的。
|