关于RA8835作图功能的问题!!
刚接触RA8835不久,发现其中的设置有许多搞不清,但现在想问下关于作图功能,以下程序调试时更改 @ 出就能在整屏上显示,不过我如果只在屏幕的某一个地方显示该这么写?例如我只在屏上显示 “大” 字???当我把 “大”的代码取出,然后写到ARM中,显示却不正确?/* --- 清显示 32K RAM区(清屏)子程序 --- */
void Lcd_Clear(void)
{
uint i = 32768;
//uint i = 9600;
uchar j=0;
writecommand(SystemSet); //System Set
writedata(0x31); //不用内部字符发生器
writecommand(HdotScr); //写入点位移指令代码
writedata(0x00); //写入P1参数
writecommand(Ovlay); //显示合成方式设置
writedata(0x0C); //0000 1100 显示一区三区图形属性
delay_ms(100);
writecommand(DispOn); //写入指令代码
writedata(0x54); //54
writecommand(CsrDirR); //光标移动方向定义:自动右移
writecommand(CsrW); //光标Locate,定位
writedata(0x00); //写入参数CSRL设置参数光标指针低8位
writedata(0x00); //写入参数CSRH设置参数光标指针高8位
writecommand(mWrite); //数据写入指令,代码0x42
while(i--)
{
writedata(0X00); //注:程序不断更改此值,得到不同的显示图 @
}
}
程序修改 @ 出时,若写0x00,能清屏,写0xff,整屏都写满,写0x80,整屏的竖线。这样证明我其他的设置都没有错,并且以上的作图程序也没问题,为什么在我只写一部分的时候就出现错误呢?(注:本人用ATmega16) 先自个顶下!!! 上面程序是全屏写,你需要对指定位置写。写16*16的“大”字需要32字节,每写2个字节需要转一行。 谢谢楼上的解答,当我换行的时候,是不是需要重新定义光标地址?也就是需要把下一行的首地址写入? 问题已解决,修改程序如下:
/* --- 清显示 32K RAM区(清屏)子程序 --- */
void Lcd_Clear(void)
{
uint i = 32768;
//uint i = 9600;
uchar j=0;
writecommand(CsrDirR); //光标移动方向定义:自动右移
writecommand(CsrW); //光标Locate,定位
writedata(0x00); //写入参数CSRL设置参数光标指针低8位
writedata(0x00); //写入参数CSRH设置参数光标指针高8位
writecommand(mWrite); //数据写入指令,代码0x42
while(i--)
{
writedata(0X00); //清屏
}
writecommand(CsrW); //光标Locate,定位
writedata(0x50); //写入参数CSRL设置参数光标指针低8位
writedata(0x00);
writecommand(mWrite); //数据写入指令,代码0x42
while(a)
{
writedata(a); //a数组中存放要显示的代码
}
}
但我又发现了新问题,我用320*240的液晶屏,设置一行显示40个字符,那么相应的第二行的首地址应该是0x28H(40),才对啊,为什么我设置成0X50它才从第二行显示?
希望也有困惑的奋斗者把你遇到的问题拿出来晒晒,希望用RA8835作图的前辈给点意见,鄙人先在此谢过! mark 应为你写的16X16的字,占用了两行。不知道这个解释对不对。 MARK mark 取模方式和程序不对应
页:
[1]