找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3540|回复: 2
打印 上一主题 下一主题
收起左侧

LCD1602液晶最新资料 说明了具体的时间要求

[复制链接]
跳转到指定楼层
楼主
ID:390416 发表于 2021-4-23 22:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 人人学会单片机 于 2021-4-23 22:16 编辑

15 03 18 01 LCD1602详细中文资料 20210423.pdf (2.35 MB, 下载次数: 114)
//**************************************************/******************祁绪电子---2021年4月 *************
//0、本程序配套视频教程《人人学会单片机》录制时间为:2020年6月25日
//1、本代码和资料最后编辑时间为:2021年4月24日,视频和代码不同之处,以本代码为准。
//2、本代码只适合STC15W单片机。可能不兼容其他单片机。
//**************************************************/*******************祁绪电子---2021年4月 *************

#include "all.h"
u8 xdata LCD1602_Write_Buffer1[16];                //1602 上行数据
u8 xdata LCD1602_Write_Buffer2[16];                //1602 下行数据
u8 code LCD1602_5x8[8]={0x08,0x00,0x07,0x08,0x08,0x08,0x08,0x07};
u8 xdata LCD1602_Write_Cursor_Add;

//**************************************************/*******************祁绪电子---2021年4月 *************
//LCD1602驱动芯片AiP31066要求:两次写入的时间间隔有39us、43us等,为确保稳定好记,周期取50微秒最好。
//LCD1602_Delay函数的参数是工作在STC15W单片机+30M晶振频率,74HC595数据发送时间15us,
//如果74HC595使用bit方式操作,或者直接单片机并口发送到LCD,请将本延迟函数改成50us。
//74HC595使用循环移位方式,那么,执行delay函数的时间 = 50us - 74HC595数据发送时间15us ≈ 35us,既len=1 执行35us
//**************************************************/*******************祁绪电子---2021年4月 *************

void LCD1602_Delay(u8 len)                                //既len=1 执行35us
{
        u8 idata i;
        while(len--)
        {
                i=70;                                                        //经过测量得到的值
                while(i--);
        }
}

//**************************************************/*******************祁绪电子---2021年4月 *************
//向LCD1602液晶里面写入一个命令(既地址),两次调用时间间隔绝对要大于40us。
//**************************************************/******************祁绪电子---2021年4月 *************

void LCD1602_Write_Add(u8 Add)               
{
        LCD1602_RS=0;
        LCD1602_E=0;
        LCD1602_Delay(1);
        LCD1602_E=1;
        HC595_Write_Buffer[0]=Add;               
        HC595_Write_Buffer[1]=0;
        HC595_Write_Data_Drive();
        LCD1602_E=0;
}

//**************************************************/*******************-祁绪电子---2021年4月 *************
//向LCD1602液晶里面写入一个数据(既字符),两次调用时间间隔绝对要大于40us。
//**************************************************/*******************祁绪电子---2021年4月 *************

void LCD1602_Write_Dat(u8 Dat)                        //写内容
{
        LCD1602_RS=1;
        LCD1602_E=0;
        LCD1602_Delay(1);
        LCD1602_E=1;
        HC595_Write_Buffer[0]=Dat;               
        HC595_Write_Buffer[1]=0;
        HC595_Write_Data_Drive();
        LCD1602_E=0;        
}

//**************************************************/*******************--祁绪电子---2021年4月 *************
//LCD1602的硬件初始化,以及写入自定义图像,(特别注意:使用595驱动LCD,则本函数必须写在595初始化后面)
//**************************************************/*******************--祁绪电子---2021年4月 *************

void LCD1602_Init()
{
        u8 i;
        LCD1602_Delay(250);                                        //上电后等待至少15ms,才能往LCD写指令
        LCD1602_Delay(250);                                        //上电后等待至少15ms,才能往LCD写指令
        
        LCD1602_Write_Add(0x38);                        //执行时间40us   设置总线模式为八位        总线
        
        LCD1602_Write_Add(0x01);                        //执行时间1.53ms 清除整个屏幕需要很长时间
        LCD1602_Delay(50);
        
        LCD1602_Write_Add(0x02);                        //执行时间1.53ms 光标地址返回到原点
        LCD1602_Delay(50);
        
        LCD1602_Write_Add(0x06);                        //执行时间40us   字符书写模式
        LCD1602_Write_Add(0x0C);                        //执行时间40us   显示开、关
        LCD1602_Write_Add(0x14);                        //执行时间40us          光标或者字符移动设置                  
        
        LCD1602_Write_Add(0x40);                        //执行时间40us         自定义存储空间起始地址
        for(i=0;i<8;i++)
        {
                LCD1602_Write_Dat(LCD1602_5x8);//每写入一个字节的执行时间是45us
        }
}

//**************************************************/******************* -祁绪电子---2021年4月 *************
//LCD1602 显示字符和光标控制
//**************************************************/******************-祁绪电子---2021年4月 *************

void LCD1602_Display_Ser()
{
        u8 i;
        LCD1602_Write_Add(0x80);                        //40us        设置显示地址
        for(i=0;i<16;i++)
        {
                LCD1602_Write_Dat(LCD1602_Write_Buffer1);//每写入一个字节的执行时间是45us
        }
        LCD1602_Write_Add(0xC0);                        //40us        设置显示地址
        for(i=0;i<16;i++)
        {
                LCD1602_Write_Dat(LCD1602_Write_Buffer2);//每写入一个字节的执行时间是45us
        }
        switch(LCD1602_Write_Cursor_Add)
        {
                case 0:LCD1602_Write_Add(0x0C);break;//不显示也不闪烁光标
                case 1:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xCa);break;
                case 2:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xCd);break;
                case 3:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xC7);break;
                case 4:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xC4);break;
                case 5:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xC1);break;
                case 6:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0xCf);break;
                case 7:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0x89);break;
                case 8:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0x86);break;
                case 9:LCD1602_Write_Add(0x0F);LCD1602_Write_Add(0x83);break;
        }
}

评分

参与人数 1黑币 +5 收起 理由
xjx51 + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:284488 发表于 2021-4-24 11:09 | 只看该作者
好数据,感谢楼主分享!
回复

使用道具 举报

板凳
ID:1096045 发表于 2023-10-15 12:26 | 只看该作者
非常有用,中文比较容易理解
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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