|
12864调用自己写的6*9数字字库,目前的想法是这样的,代码如下:
void shuzidisp(uchar x,uchar y,uchar *p)
{
uchar i;
uchar GDRAM_hbit,GDRAM_lbit;
uchar x_Dyte,x_byte; //定义列地址的字节位,及在字节中的哪1位
uchar y_Dyte,y_byte;
WriteCommand(0x36,0);
x_Dyte=x/16;
x_byte=x%16;
y_Dyte=x/32;
y_byte=x&0x1f;
if(15-x_byte>=5)
{
for(i=0;i<6;i++)
{
WriteCommand(0x80+y_byte+i,0);//设定行地址(y坐标)
Delay(100);
WriteCommand(0x80+x_Dyte+8*y_Dyte,0);//设定列地址(x坐标),并通过8*y_Dyte选定上下屏
Read_data();
GDRAM_hbit=Read_data(); //读取当前显示高8位数据
GDRAM_lbit=Read_data(); //读取当前显示低8位数据
Delay(5);
WriteCommand(0x80+y_byte+i,0);//设定行地址(y坐标)
Delay(100);
WriteCommand(0x80+x_Dyte+8*y_Dyte,0);//设定列地址(x坐标),并通过8*y_Dyte选定上下屏
if(x_byte<8) //判断其在高8位,还是在低8位
{
WriteData(GDRAM_hbit|(p[0]>>(x_byte))); //显示GDRAM区高8位数据
WriteData(GDRAM_lbit|(p[0]<<(8-x_byte))); //显示GDRAM区低8位数据
}
else
{
WriteData(GDRAM_hbit);
WriteData(GDRAM_lbit|(p[0]>>(x_byte-8)));
}
}
}
else
{
for(i=0;i<6;i++)
{
WriteCommand(0x80+y_byte+i,0);//设定行地址(y坐标)
Delay(100);
WriteCommand(0x80+x_Dyte+8*y_Dyte,0);//设定列地址(x坐标),并通过8*y_Dyte选定上下屏
Read_data();
GDRAM_hbit=Read_data(); //读取当前显示高8位数据
GDRAM_lbit=Read_data(); //读取当前显示低8位数据
Delay(5);
WriteCommand(0x80+y_byte+i,0);//设定行地址(y坐标)
Delay(100);
WriteCommand(0x80+x_Dyte+8*y_Dyte,0);//设定列地址(x坐标),并通过8*y_Dyte选定上下屏
WriteData(GDRAM_hbit);
WriteData(GDRAM_lbit|(p[0]>>(x_byte-8)));
WriteCommand(0x80+y_byte+i,0);//设定行地址(y坐标)
Delay(100);
WriteCommand(0x80+x_Dyte+8*y_Dyte+1,0);//设定列地址(x坐标),并通过8*y_Dyte选定上下屏
Read_data();
GDRAM_hbit=Read_data(); //读取当前显示高8位数据
GDRAM_lbit=Read_data(); //读取当前显示低8位数据
Delay(5);
WriteCommand(0x80+y_byte+i,0);//设定行地址(y坐标)
Delay(100);
WriteCommand(0x80+x_Dyte+8*y_Dyte+1,0);//设定列地址(x坐标),并通过8*y_Dyte选定上下屏
WriteData(GDRAM_hbit|(p[0]<<(16-x_byte)));//将数据高八位左移(16-x_byte)位即为写入数据
WriteData(GDRAM_lbit);//低8位不变
}
}
}
有什么建议大家畅所欲言!
|
|