12864显示自定义图像乱码问题

2019-07-15 19:05发布

QQ截图20140722185008.png 用这个图取字模


QQ截图20140722185015.png



但显示出来会出现2道粗线  

就算把CGRAM全部送0  然后显示    那2道粗线还是存在
求教大神这是什么问题   怎么解决?

代码如下:
  1. void delayms(uint z)
  2. {
  3.         uint i,j;
  4.         for(i=z;i>0;i--)
  5.                 for(j=110;j>0;j--);
  6. }

  7. void delayus(uchar z)
  8. {
  9.         uchar i;
  10.         for(i=z;i>0;i--)
  11.         {
  12.                 _nop_();_nop_();
  13.                 _nop_();_nop_();
  14.                 _nop_();_nop_();
  15.         }
  16. }

  17. void check_busy()
  18. {
  19.         rs=0;
  20.         rw=1;
  21.         en=1;
  22.         while(P0&0x80);
  23.         en=0;
  24. }

  25. void LCD12864_write_com(uchar com)
  26. {
  27.         check_busy();
  28.         rs=0;
  29.         rw=0;
  30.         P0=com;
  31.         en=1;
  32.         delayms(1);
  33.         en=0;
  34. }

  35. void LCD12864_write_dat(uchar dat)
  36. {
  37.         check_busy();
  38.         rs=1;
  39.         rw=0;
  40.         P0=dat;
  41.         en=1;
  42.         delayms(1);
  43.         en=0;
  44. }

  45. void LCD12864_init()
  46. {
  47.         delayms(40);
  48.         psb=1;
  49.         delayus(20);
  50.         res=0;
  51.         delayus(20);
  52.         res=1;
  53.         delayus(20);
  54.         LCD12864_write_com(0x30);
  55.         delayus(20);
  56.         LCD12864_write_com(0x30);
  57.         delayus(8);
  58.         LCD12864_write_com(0x0c);
  59.         delayus(20);
  60.         LCD12864_write_com(0x01);
  61.         delayms(10);
  62.         LCD12864_write_com(0x06);
  63.         delayus(20);
  64. }

  65. void clean_screen()
  66. {
  67.         LCD12864_write_com(0x01);
  68.         delayms(10);
  69. }

  70. void clean_cgram()
  71. {
  72.         uchar i,j;
  73.         LCD12864_write_com(0x34);
  74.         for(i=0;i<32;i++)
  75.         {
  76.                 LCD12864_write_com(0x80+i);
  77.                 LCD12864_write_com(0x80);
  78.                 for(j=0;j<16;j++)
  79.                 {
  80.                         LCD12864_write_dat(0x00);
  81.                 }
  82.         }
  83.        
  84.         for(i=0;i<32;i++)
  85.         {
  86.                 LCD12864_write_com(0x88+i);
  87.                 LCD12864_write_com(0x88);
  88.                 for(j=0;j<16;j++)
  89.                 {
  90.                         LCD12864_write_dat(0x00);
  91.                 }
  92.         }
  93.         //LCD12864_write_com(0x36);
  94.         LCD12864_write_com(0x30);
  95. }


  96. void display_pic(uchar *img)
  97. {
  98.         uchar i,j;
  99.         LCD12864_write_com(0x34);
  100.         clean_screen();
  101.         for(i=0;i<32;i++)
  102.         {
  103.                 LCD12864_write_com(0x80+i);
  104.                 LCD12864_write_com(0x80);
  105.                 for(j=0;j<16;j++)
  106.                 {
  107.                         LCD12864_write_dat(*img);
  108.                         img++;
  109.                 }
  110.         }
  111.        
  112.         for(i=0;i<32;i++)
  113.         {
  114.                 LCD12864_write_com(0x88+i);
  115.                 LCD12864_write_com(0x88);
  116.                 for(j=0;j<16;j++)
  117.                 {
  118.                         LCD12864_write_dat(*img);
  119.                         img++;
  120.                 }
  121.         }   
  122.         LCD12864_write_com(0x36);
  123.         LCD12864_write_com(0x30);
  124. }


  125. void main()
  126. {
  127.         dx=1;
  128.         P0=0;
  129.         dx=0;
  130.         wx=1;
  131.         P0=0xff;
  132.         wx=0;
  133.        
  134.         LCD12864_init();
  135.         clean_screen();
  136.         clean_cgram();
  137.         display_pic(pic1);
  138.        
  139.         while(1);
  140.        
  141. }
复制代码


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。