[通用型号] 合泰单片机HT66 LCD

[复制链接]
 楼主| wailian1265k 发表于 2023-1-15 14:53 | 显示全部楼层 |阅读模式

本文讲述lcd1602 的基本原理和相关的使用方法。


一、名称分析

lcd1602----16表示一行有16个字符,02表示一共有两行。

二、思路分析1.确实显示的位置
确地位置使用指令8,也为写指令来确实位置,(RS=0)其中D6-D0为可操作位。即通过这7位2进制数表示显示屏中2*16个字符。




评论

版权声明:本文为博主(小郡主最可爱)原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/m0_51910771/article/details/112602301 ———————————————— 版权声明:本文为CSDN博主「小郡主最可爱」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/m0_51910771/artic  发表于 2023-1-15 14:54
 楼主| wailian1265k 发表于 2023-1-15 14:55 | 显示全部楼层
 楼主| wailian1265k 发表于 2023-1-15 14:56 | 显示全部楼层
代码如下(示例):
  1. /******************************************************************************/
  2. // 函数名称:Lcd_Write_Cmd
  3. // 输入参数:myCmd-指令
  4. // 输出参数:无
  5. // 函数功能:LCD1602写指令
  6. /******************************************************************************/
  7. void Lcd1602_Write_Cmd(uint8 cmd){
  8.         Lcd1602_Busy_Check();
  9.         RS = 0;
  10.         RW = 0;
  11.         EN = 0;
  12.         //delay AB 没有说明,取消延时
  13.         lcdPort = cmd;
  14.         _nop_();//delay BC 延时1us
  15.         EN = 1;
  16.         _nop_();//delay CD 延时1us
  17.         EN = 0;
  18.         _nop_();//delay DE 延时1us
  19.         _nop_();//delay EF 延时1us
  20. }
 楼主| wailian1265k 发表于 2023-1-15 15:13 | 显示全部楼层
确实显示内容
确定显示内容,使用写数据 ,(RS=1)。同样,有一个字节可以操作,具体的内容编号可以看下图。
 楼主| wailian1265k 发表于 2023-1-15 15:14 | 显示全部楼层
 楼主| wailian1265k 发表于 2023-1-15 15:15 | 显示全部楼层
代码如下(示例):
  1. /******************************************************************************/
  2. // 函数名称:Lcd_Write_Data
  3. // 输入参数:myData-数据
  4. // 输出参数:无
  5. // 函数功能:LCD1602写数据
  6. /******************************************************************************/
  7. void Lcd1602_Write_Data(uint8 Data){
  8.         Lcd1602_Busy_Check();
  9.         RS = 1;
  10.         RW = 0;
  11.         EN = 0;
  12.         //delay AB 没有说明,取消延时
  13.         lcdPort = Data;
  14.         _nop_();//delay BC 延时1us
  15.         EN = 1;
  16.         _nop_();//delay CD 延时1us
  17.         EN = 0;
  18.         _nop_();//delay DE 延时1us
  19.         _nop_();//delay EF 延时1us
  20. }
 楼主| wailian1265k 发表于 2023-1-15 16:17 | 显示全部楼层
自定义字符显示
1、填空
字库表的第一列为空的,自定义的字符首先被储存在这里,即对这里进行填空,分为三个步骤。
1.那个空格,即8个中选一个。(D5-D3)
2.哪行。显示屏中的每个字符,是由8x5(行x列)个像素点组成的,自定义字符,要确定每行的中的每个点的显示情况。(D2-D0)
3.显示的内容,即5列中那些点需要被点亮。一般采用数组进行显示。
这里使用的是指令7.其中D5-D0为可操作位,


填空之后,就可以同上述的内容的一样,通过调用字库表实现显示。

 楼主| wailian1265k 发表于 2023-1-15 16:18 | 显示全部楼层
最终代码
将上诉代码进行包装和结合,形成最终的两个函数。
 楼主| wailian1265k 发表于 2023-1-15 16:18 | 显示全部楼层
  1. /******************************************************************************/
  2. // 函数名称:Lcd1602_Custom_Char
  3. // 输入参数:row-行 col-列 pos-CGRAM位置 (8个空格中的哪一个)*customValueTable-自定义字符数据(为一个数组,对应上述的3.)
  4. // 输出参数:无
  5. // 函数功能:显示自定义字符
  6. //实例
  7.         //Lcd1602_Custom_Char(1,14,0,lcd1602Table1);
  8. /******************************************************************************/
  9. void Lcd1602_Custom_Char(uint8 row, uint8 col, uint8 pos, uint8 *customValueTable){
  10.         uint8 i = 0;
  11.         for(i=0;i<8;i++){
  12.                 Lcd1602_Write_Cmd(0x40+pos*8+i);
  13.                 Lcd1602_Write_Data(*(customValueTable+i));
  14.         }
  15.         if(row==1){
  16.                 Lcd1602_Write_Cmd(0x00+0x80+col-1);
  17.                 Lcd1602_Write_Data(0x00+pos);
  18.         }else{
  19.                 Lcd1602_Write_Cmd(0x40+0x80+col-1);
  20.                 Lcd1602_Write_Data(0x00+pos);       
  21.         }
  22. }
 楼主| wailian1265k 发表于 2023-1-15 16:19 | 显示全部楼层
  1. /******************************************************************************/
  2. // 函数名称:Lcd1602_Show_String
  3. // 输入参数:row-行 col-列 *str-字符
  4. // 输出参数:无
  5. // 函数功能:LCD1602显示字符
  6. //实例
  7.         //Lcd1602_Show_String(1,1,"Hello,World!^");
  8.         //Lcd1602_Show_String(2,1,"www.ppptalk.com!");
  9. /******************************************************************************/
  10. void Lcd1602_Show_String(uint8 row, uint8 col,uint8 *str){
  11.         uint8 *defaultValue = "parameter error" ;
  12.         switch(row){
  13.                 case 1:
  14.                                 Lcd1602_Write_Cmd(0x00+0x80+col-1);//第一行第y个空格
  15.                                 while(*str!='\0'){
  16.                                         Lcd1602_Write_Data(*str);
  17.                                         str++;
  18.                                 }
  19.                                 break;       
  20.                 case 2:
  21.                                 Lcd1602_Write_Cmd(0x40+0x80+col-1);//第二行第y个空格
  22.                                 while(*str!='\0'){
  23.                                         Lcd1602_Write_Data(*str);
  24.                                         str++;
  25.                                 }
  26.                                 break;

  27.            default:
  28.                                    Lcd1602_Write_Cmd(0x00+0x80);//parameter error
  29.                                 while(*defaultValue!='\0'){
  30.                                         Lcd1602_Write_Data(*defaultValue);
  31.                                         defaultValue++;
  32.                                 }                                       
  33.         }       
  34. }

 楼主| wailian1265k 发表于 2023-1-15 16:20 | 显示全部楼层
总结
使用LCD就是对这两个函数的调用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

413

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部