12864打点绘制曲线出问题
本帖最后由 ruan18278816371 于 2014-8-7 11:36 编辑最近用STC15F2K60S2在12864液晶上打点绘制曲线,测试打点函数之前需要图像清屏,但是调用这个图像清屏函数耗时很长,一个点打出来差不多要两分钟这明显不科学啊,查了好久没找出原因请各位大牛指教,下面贴出清屏函数和主函数
void gui_clear(void)
{
uchar i,j,k;
write_com(EXTEND_SET);//扩展指令集,8位数据传输
write_com(DRAW_OFF);//绘图显示关闭
for(i=0;i<2;i++)//分上下两屏写
{
for(j=0;j<32;j++)
{
write_com(0x80+j);//写y坐标
//Delay10ms(); //这儿我以为是耗时长的原因把延时注释了,还是解决不了问题
if(i==0)//写x坐标
{
write_com(0x80);
//Delay10ms();
}
else //写下半屏
{
write_com(0x88);
//Delay10ms();
}
for(k=0;k<16;k++)//写一整行数据
{
write_dat(0x00);//写高字节
write_dat(0x00);//写低字节
//Delay10ms();
}
}
}
write_com(DRAW_ON);//打开绘图显示
write_com(BASIC_SET);//打开基本指令集
}
void main()
{
lcd_init();//lcd初始化
lcd_set_dot(2,1);//打点
while(1);
} 检查读写函数,打一个点2分钟不科学。即便是整屏清除,1秒钟也够了。
看是读写函数里面否有忙等待之类的,或者大的延时。 write_com、write_dat内部延时太长了吧 网上有一个12864的库
不过是msp430,改一下就能用 lcw_swust 发表于 2014-8-7 11:53
write_com、write_dat内部延时太长了吧
/*写指令数据到LCD*/
/*RS=1,RW=1,E=高脉冲,D0-D7=指令码。*/
void write_com(uchar cmd)
{
LCD_RS=0;
LCD_RW=0;
//LCD_EN=0;
P0=cmd;
Delay5ms();
LCD_EN=1;
Delay5ms();
LCD_EN=0;
}
/*写显示数据到LCD*/
/*RS=1,RW=0,E=高脉冲,D0-D7=数据。*/
void write_dat(uchar dat)
{
LCD_RS=1;
LCD_RW=0;
//LCD_EN=0;
P0=dat;
Delay5ms();
LCD_EN=1;
Delay5ms();
LCD_EN=0;
} ruan18278816371 发表于 2014-8-7 11:54
/*写指令数据到LCD*/
/*RS=1,RW=1,E=高脉冲,D0-D7=指令码。*/
void write_com(uchar cmd)
竟然Delay5ms!
楼主看看LCD的手册吧,看这个时间究竟取多少合适。 把整个工程文档贴上来看一下呗 lcw_swust 发表于 2014-8-7 11:56
竟然Delay5ms!
楼主看看LCD的手册吧,看这个时间究竟取多少合适。
Delay1ms是比先在快,但点还是要几十秒的时间啊!这样还不科学 ruan18278816371 发表于 2014-8-7 14:39
Delay1ms是比先在快,但点还是要几十秒的时间啊!这样还不科学
改为Delay1us xiaoha_abc 发表于 2014-8-7 13:11
把整个工程文档贴上来看一下呗
源码在这里http://www.amobbs.com/forum.php?mod=viewthread&tid=5590564&page=1#pid7744238 fbestwish 发表于 2014-8-7 14:49
源码在这里http://www.amobbs.com/forum.php?mod=viewthread&tid=5590564&page=1#pid7744238
你的代码我没用,我只是作为参考! lcw_swust 发表于 2014-8-7 14:44
改为Delay1us
Delay1us点就不出来了啊,估计时序乱了 ruan18278816371 发表于 2014-8-7 14:58
Delay1us点就不出来了啊,估计时序乱了
那就Delay2us
同学,你就不能多试几种延时? ruan18278816371 发表于 2014-8-7 14:58
Delay1us点就不出来了啊,估计时序乱了
看手册这个时间需要多久. lcw_swust 发表于 2014-8-7 15:00
那就Delay2us
同学,你就不能多试几种延时?
试了 10US 100us 都不行的 大哥 ruan18278816371 发表于 2014-8-7 15:06
试了 10US 100us 都不行的 大哥
那你这液晶屏可真够慢的,扔了吧。
要不用示波器看看延时准不准? 打点不正常搞得下面画线也不正常,一根线就出现几个点{:sad:} ruan18278816371 发表于 2014-8-7 14:55
你的代码我没用,我只是作为参考!
好吧,那这个源码画点也很慢吗,记得拿这个库做过贪吃蛇呢,应该没有问题吧 fbestwish 发表于 2014-8-7 15:47
好吧,那这个源码画点也很慢吗,记得拿这个库做过贪吃蛇呢,应该没有问题吧 ...
不懂了!我现在的情况是能画竖线,横线就出几个点! 不要delay not more,要用check busy ... rain73 发表于 2014-8-7 16:11
不要delay not more,要用check busy ...
判断忙?理论来说液晶反应的时间比单片机快多了啊。不对!我用的是1T的单片机,有必要判断液晶是否忙? xiaoha_abc 发表于 2014-8-7 13:11
把整个工程文档贴上来看一下呗
这是工程,硬件用的是STC15F2K60S21T的单片机
页:
[1]