野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9054|回复: 4

ILI9341清屏过后,不再显示,如何解决?

[复制链接]
发表于 2022-2-9 15:32:23 | 显示全部楼层 |阅读模式
在原有mini板的LCD显示英文例程上添加一个清屏函数,使得Ili9341输入一串长字符,将整个屏幕占满后,启动清屏函数,进入下一页。但进入下一页后不再显示输入部分:
  1. settextstyle(ASCII24x32);
  2.         DISP_ENString(0,LINE(0),"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000");
复制代码
打印部分:

  1. /***********************************
  2. *函数名称:Clear()
  3. *函数功能:清屏
  4. *输入:
  5. *输出:
  6. ************************************/  
  7. void Clear(void)
  8. {
  9. settextcolor(BACKGROUND);
  10.           ILI9341_Print_retange(0,0,240,320,YES);       
  11. }
  12. /***********************************
  13. *函数名称:DISP_Char_EN
  14. *函数功能:英文字符输入
  15. *输入:uint16_t head, uint16_t line ,char *ENString
  16. *输出:
  17. ************************************/  
  18. void DISP_Char_EN(uint16_t head, uint16_t line ,char *Char)
  19. {
  20.         uint16_t offset;
  21.         uint8_t bitenum;
  22.         uint8_t *pfont;
  23.         uint8_t i,j;
  24. //ascii偏移量
  25.         offset=*Char-' ';
  26.         //字节数
  27.         bitenum=(Font.Heigth*Font.Width)/8;
  28.         //字模库中的位置
  29.                 pfont = (uint8_t *)&Font.table[offset * bitenum];

  30.                  ILI9341_Print_Base(head,line,Font.Width,Font.Heigth);
  31.          ILI9341_WRITE_CMD(CMD_SetPixel);         

  32.        
  33.         for(i=0;i<bitenum;i++)
  34.         for(j=0;j<8;j++)
  35.         {
  36.                                                 if ( pfont[i] & (0x80>>j) )//检测是背景还是图案
  37.                                                 {
  38.                                                 ILI9341_WRITE_DATA ( TEXTCOLOR );               
  39.                                                 }                                                       
  40.                                         else
  41.                                         {
  42.                                                 ILI9341_WRITE_DATA ( BACKCOLOR );
  43.                                         }
  44.         }

  45. }

  46. /***********************************
  47. *函数名称:DISP_ENString
  48. *函数功能:英文输入
  49. *输入:uint16_t head, uint16_t line ,char *ENString
  50. *输出:
  51. ************************************/  
  52. void DISP_ENString(uint16_t head, uint16_t line ,char *ENString)
  53. {
  54. while(*ENString!='\0')
  55. {
  56. if((head-ILI9341_DispWindow_X_Star+Font.Width)>X_LENGTH)//换行
  57. {
  58. head=ILI9341_DispWindow_X_Star;
  59.         line+=Font.Heigth;
  60. }
  61. if((line-ILI9341_DispWindow_Y_Star+Font.Heigth)>Y_LENGTH)//换列
  62. {
  63.           ILI9341_Delay(0xFFFFFF);
  64.           Clear();
  65.               line=ILI9341_DispWindow_Y_Star;
  66.         printf("line=%d\n",line);//检测
  67. }       
  68. DISP_Char_EN(head,line,ENString);
  69.         printf("%d\n",line);//检测
  70. head+=Font.Width;
  71. ENString++;
  72. }

  73. }
复制代码
这是串口返回的检测数据:....
288
288
288
288
288
288
288
288
288//以上是未换页前
line=0//换页标志
0//换页后
0
0
因此字符应该打印了,但并未显示出来,求解惑?


回复

使用道具 举报

发表于 2022-2-10 09:12:35 | 显示全部楼层
应该是没进入标志位吧。
回复 支持 反对

使用道具 举报

发表于 2022-2-10 14:34:02 | 显示全部楼层
没有明白具体什么意思 屏幕显示满后 从头显示line参数也从零开始
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-10 14:48:12 | 显示全部楼层
WishWish 发表于 2022-2-10 14:34
没有明白具体什么意思 屏幕显示满后 从头显示line参数也从零开始

就屏幕显示满后,再用背景色将整个屏幕填充,剩余的数目再继续显示。相当于一页电子书到第二页电子书的样子
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-10 22:25:12 | 显示全部楼层
好吧,在换页的时候head参数没归0
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 03:58 , Processed in 0.027241 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表