标题: LCD12864之前能正常显示,但一段时间后全屏显示“翱”字 [打印本页]

作者: Niefanfan    时间: 2018-5-15 19:45
标题: LCD12864之前能正常显示,但一段时间后全屏显示“翱”字
有检查过硬件电路,测试表明都是通的。软件编程方面请各位大神帮忙纠纠错。


单片机源码:
  1. //****************************************
  2. //lcd12864写命令
  3. //****************************************
  4. void write_12864com(uchar com)
  5. {
  6.    Busy();
  7.    rw=0;
  8.    rs=0;
  9.    delay_50us(1);
  10.    P0=com;
  11.    E=1;
  12.    delay_50us(10);
  13.    E=0;
  14.    delay_50us(2);
  15. }

  16. //****************************************
  17. //lcd12864测忙
  18. //****************************************
  19. void Busy()
  20. {
  21.   uchar busy;
  22.   do
  23.   {
  24.     E=0;
  25.         rs=0;
  26.         rw=1;
  27.         delay_50ms(1);
  28.         E=1;
  29.         busy=P0;
  30.         delay_50ms(1);
  31.         E=0;
  32.   }
  33.    while(busy&0x80);
  34. }

  35. //****************************************
  36. //lcd12864写数据
  37. //****************************************
  38. void write_12864dat(uchar dat)
  39. {
  40.    Busy();
  41.    rw=0;
  42.    rs=1;
  43.    E=0;
  44.    P0=dat;
  45.    delay_50us(1);
  46.    E=1;
  47.    delay_50us(10);
  48.    E=0;
  49.    delay_50us(2);
  50. }

  51. //****************************************
  52. //lcd12864初始化
  53. //****************************************
  54. void initial_LCD()
  55. {
  56.   RST=1;
  57.   delay_50ms(2);
  58.   write_12864com(0x30); //功能设置
  59.   delay_50us(4);
  60.   write_12864com(0x30); //再次设置
  61.   delay_50us(4);
  62.   write_12864com(0x0f); //显示设置,游标设置 0X0C
  63.   delay_50us(4);
  64.   write_12864com(0x01);  //清屏
  65.   delay_50ms(1);
  66.   write_12864com(0x02);  
  67.   delay_50us(10);     
  68. }


  69. //****************************************
  70. //lcd12864初始显示
  71. //****************************************
  72. void display_initial()
  73. {
  74.   uchar i,j;
  75.   write_12864com(0x80); //LCD地址第一行
  76.   for(i=0;i<16;i++)
  77.   {
  78.      write_12864dat(table1[i]);
  79.          delay_50us(1);

  80.   }
  81. write_12864com(0x88);//lcd地址第三行
  82.   for(j=0;j<16;j++)
  83.   {
  84.      write_12864dat(table2[j]);
  85.          delay_50us(1);

  86.   }

  87.   initial_LCD();
  88. }

  89. //****************************************
  90. //lcd12864清屏
  91. //****************************************
  92. void display_clear()
  93. {
  94.    write_12864com(0x01);  //清屏
  95.   delay_50us(2);
  96. }
复制代码



作者: 华夏宇升    时间: 2018-5-31 09:21
我在退出外部中断时候偶尔会发生这个情况。感觉是单片机飞了!尚未找到解决途径!
作者: dengyifenzhong    时间: 2018-5-31 09:30
你这刷新上应该有问题的
作者: 78028048    时间: 2018-5-31 13:53
数组越界了吧
作者: 停车说爱枫林晚    时间: 2019-3-10 16:14
有没解决好,我调出来显示也是这样。
作者: static    时间: 2019-3-14 10:49
你这是字符占的位置不对,造成后面的字型乱码,汉字是16*16,字符是8*16,要显示小数点要空一格(8*16)才能正常。当然这样不好看,因此要写字符显示函数,网上有案例,你看看别人怎么写的
作者: 辑或    时间: 2019-3-14 11:05
字符串位置设置有问题,汉字与字符串串了,建议添加字符显示函数。
作者: 15778423590    时间: 2020-4-28 23:20
辑或 发表于 2019-3-14 11:05
字符串位置设置有问题,汉字与字符串串了,建议添加字符显示函数。

字符显示函数是什么呀

作者: 黄youhui    时间: 2020-4-29 09:09
这种问题一般处在主函数里面。比如while
作者: f556    时间: 2020-4-29 10:42
一般是字库越界造成,字库查找时跑到字库外取的错误点阵。程序问题




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1