zhong_zhiqi 发表于 2023-7-25 14:33:58

记录并分享通过LCD1602液晶屏实验发现的知识点

本帖最后由 zhong_zhiqi 于 2023-7-25 14:51 编辑

开始进入官方视频的下半部了,在完成P24这一节内容后,感觉讲师展示的代码可以从两点完善:
1- LCD1602显示字符串的函数:在开始先进行参数有效性的检查,既然检查的x、y参数的有效性,还应该验证字符串参数的有效性,否则如果主函数调用时提供的实参超出了显示范围,就会丢失显示内容。
    验证的原则是字符串的长度(不包含最后的\0)应该小于、等于“最大显示长度-32”减去“起始偏移量-x”,并入检查语句就是:if((y>1)||(x>15)||((strlen(str)+x)>32)),这样可以防止字符串超出显示范围,因为超界时程序执行是不会报错的,只会显示到最大长度。strlen()函数是调用string库的标准函数,因此还需要在 public.h 中加上 #include "string.h"。

2- 接下来,显示字符串的函数既然有参数有效性检查的步骤,那么通过返回值体现执行结果给调用的主函数是一个应该有的步骤,否则验证失败后退出函数后,屏幕一片空白,让人莫名其妙。
    所以简单的用0、1代表异常推出和正常执行就好,函数改为:

u8 lcd1602_show_string(u8 x, u8 y, u8 *str)
{
      u8 i=0;

      if((y>1)||(x>15)||((strlen(str)+x)>32))      return 0;


      if(y<1)
      {
               while(*str!='\0')
               {
                         if(i<(16-x))
                        {
                                 lcd1602_write_cmd(0x80+x+i);
                        }
                        else
                        {
                              lcd1602_write_cmd(0x80+0x40+x+i-16);
                        }
                        i++;
                        lcd1602_write_data(*str);
                        str++;
               }
      }
      else
      {
               while(*str!='\0')
               {
                         if(i<(16-x))
                        {
                                 lcd1602_write_cmd(0x80+0x40+x+i);
                        }
                        else
                        {
                              // i-=16;
                              lcd1602_write_cmd(0x80+x+i-16);
                        }
                        i++;
                        lcd1602_write_data(*str);
                        str++;
                }               
      }
      return 1;
}


主函数调用过程改为:
....
      if(!lcd1602_show_string(<x>,<y>,"0123456789012345678901234567890"))
                lcd1602_show_string(0,0,"Wrong argument!");

....
3- 补充一点,J24跳线旁边的电位器是控制LCD1602的显示偏压的,也就是显示字符与背光之间对比度。由于板子设计的原因,一旦把LCD1602子卡插上实验板后,刚好把这个电位器就被挡住了,调节时必须拔掉LCD1602子卡。我的经验是:不要放在水平位置,也不要90度垂直,调节到20-30度的时候显示效果最舒适。

页: [1]
查看完整版本: 记录并分享通过LCD1602液晶屏实验发现的知识点