微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 12864显示自定义图像乱码问题

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

时间:10-02 整理:3721RD 点击:

用这个图取字模



但显示出来会出现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. }

复制代码



是不是显示所有图片都这样啊

对啊。就算全部送0   那2粗线还是会在

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top