打印
[通用型号]

合泰单片机HT66 LCD

[复制链接]
542|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wailian1265k|  楼主 | 2023-1-15 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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


一、名称分析

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

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




使用特权

评论回复
评论
wailian1265k 2023-1-15 14:54 回复TA
版权声明:本文为博主(小郡主最可爱)原创文章,遵循 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/article/details/112602301  

相关帖子

沙发
wailian1265k|  楼主 | 2023-1-15 14:55 | 只看该作者

使用特权

评论回复
板凳
wailian1265k|  楼主 | 2023-1-15 14:56 | 只看该作者
代码如下(示例):
/******************************************************************************/
// 函数名称:Lcd_Write_Cmd
// 输入参数:myCmd-指令
// 输出参数:无
// 函数功能:LCD1602写指令
/******************************************************************************/
void Lcd1602_Write_Cmd(uint8 cmd){
        Lcd1602_Busy_Check();
        RS = 0;
        RW = 0;
        EN = 0;
        //delay AB 没有说明,取消延时
        lcdPort = cmd;
        _nop_();//delay BC 延时1us
        EN = 1;
        _nop_();//delay CD 延时1us
        EN = 0;
        _nop_();//delay DE 延时1us
        _nop_();//delay EF 延时1us
}

使用特权

评论回复
地板
wailian1265k|  楼主 | 2023-1-15 15:13 | 只看该作者
确实显示内容
确定显示内容,使用写数据 ,(RS=1)。同样,有一个字节可以操作,具体的内容编号可以看下图。

使用特权

评论回复
5
wailian1265k|  楼主 | 2023-1-15 15:14 | 只看该作者

使用特权

评论回复
6
wailian1265k|  楼主 | 2023-1-15 15:15 | 只看该作者
代码如下(示例):
/******************************************************************************/
// 函数名称:Lcd_Write_Data
// 输入参数:myData-数据
// 输出参数:无
// 函数功能:LCD1602写数据
/******************************************************************************/
void Lcd1602_Write_Data(uint8 Data){
        Lcd1602_Busy_Check();
        RS = 1;
        RW = 0;
        EN = 0;
        //delay AB 没有说明,取消延时
        lcdPort = Data;
        _nop_();//delay BC 延时1us
        EN = 1;
        _nop_();//delay CD 延时1us
        EN = 0;
        _nop_();//delay DE 延时1us
        _nop_();//delay EF 延时1us
}

使用特权

评论回复
7
wailian1265k|  楼主 | 2023-1-15 16:17 | 只看该作者
自定义字符显示
1、填空
字库表的第一列为空的,自定义的字符首先被储存在这里,即对这里进行填空,分为三个步骤。
1.那个空格,即8个中选一个。(D5-D3)
2.哪行。显示屏中的每个字符,是由8x5(行x列)个像素点组成的,自定义字符,要确定每行的中的每个点的显示情况。(D2-D0)
3.显示的内容,即5列中那些点需要被点亮。一般采用数组进行显示。
这里使用的是指令7.其中D5-D0为可操作位,


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

使用特权

评论回复
8
wailian1265k|  楼主 | 2023-1-15 16:18 | 只看该作者
最终代码
将上诉代码进行包装和结合,形成最终的两个函数。

使用特权

评论回复
9
wailian1265k|  楼主 | 2023-1-15 16:18 | 只看该作者
/******************************************************************************/
// 函数名称:Lcd1602_Custom_Char
// 输入参数:row-行 col-列 pos-CGRAM位置 (8个空格中的哪一个)*customValueTable-自定义字符数据(为一个数组,对应上述的3.)
// 输出参数:无
// 函数功能:显示自定义字符
//实例
        //Lcd1602_Custom_Char(1,14,0,lcd1602Table1);
/******************************************************************************/
void Lcd1602_Custom_Char(uint8 row, uint8 col, uint8 pos, uint8 *customValueTable){
        uint8 i = 0;
        for(i=0;i<8;i++){
                Lcd1602_Write_Cmd(0x40+pos*8+i);
                Lcd1602_Write_Data(*(customValueTable+i));
        }
        if(row==1){
                Lcd1602_Write_Cmd(0x00+0x80+col-1);
                Lcd1602_Write_Data(0x00+pos);
        }else{
                Lcd1602_Write_Cmd(0x40+0x80+col-1);
                Lcd1602_Write_Data(0x00+pos);       
        }
}

使用特权

评论回复
10
wailian1265k|  楼主 | 2023-1-15 16:19 | 只看该作者
/******************************************************************************/
// 函数名称:Lcd1602_Show_String
// 输入参数:row-行 col-列 *str-字符
// 输出参数:无
// 函数功能:LCD1602显示字符
//实例
        //Lcd1602_Show_String(1,1,"Hello,World!^");
        //Lcd1602_Show_String(2,1,"www.ppptalk.com!");
/******************************************************************************/
void Lcd1602_Show_String(uint8 row, uint8 col,uint8 *str){
        uint8 *defaultValue = "parameter error" ;
        switch(row){
                case 1:
                                Lcd1602_Write_Cmd(0x00+0x80+col-1);//第一行第y个空格
                                while(*str!='\0'){
                                        Lcd1602_Write_Data(*str);
                                        str++;
                                }
                                break;       
                case 2:
                                Lcd1602_Write_Cmd(0x40+0x80+col-1);//第二行第y个空格
                                while(*str!='\0'){
                                        Lcd1602_Write_Data(*str);
                                        str++;
                                }
                                break;

           default:
                                   Lcd1602_Write_Cmd(0x00+0x80);//parameter error
                                while(*defaultValue!='\0'){
                                        Lcd1602_Write_Data(*defaultValue);
                                        defaultValue++;
                                }                                       
        }       
}

使用特权

评论回复
11
wailian1265k|  楼主 | 2023-1-15 16:20 | 只看该作者
总结
使用LCD就是对这两个函数的调用。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

383

帖子

0

粉丝