MCU_51单片机外设驱动学习之1602液晶时序学习笔记

/*****************************************************************************************************************************************

*Author:JYW

*Time:2019_02_12

*Describe:学而习之

**************************************************************************************************************************************/

时序,根据字面意思就是时间和顺序

s  ms  us  ns   之间都是1000的倍数。

以一般的51单片机的11059200来说,时钟周期就是其倒数,就是

单位是ns,一个机器周期就是

大约就是1ms;

扫描二维码关注公众号,回复: 5346227 查看本文章

在MDK下的89C51,时钟配置为11059200:

unsigned char temp;

计算得到是2.17us,即执行一行的时间大约是2us,以unsigned char 的temp测试了一下一行代码执行所需要的时间;

#include<reg52.h>

#define Lcd1602_DB   P0
sbit  Lcd1602_RS = P1^0;
sbit  Lcd1602_RW = P1^1;
sbit  Lcd1602_E = P1^5;

/*等待1602准备好即STA7为0*/

void LcdYorN()
{
    unsigned char buf;
    Lcd1602_DB = 0x00;
    Lcd1602_RS = 0;
    Lcd1602_RW = 1;
    do{
        Lcd1602_E = 1;
        buf = Lcd1602_DB;
        Lcd1602_E = 0;
    }while(buf & 0x80);
}//对1602进行检测确保STA7为0;


//向1602液晶中写入命令
void LcdWriteCmd(unsigned char cmd)
{
    LcdYorN();
    Lcd1602_RS = 0;
    Lcd1602_RW= 0;
    Lcd1602_DB= cmd; 
    Lcd1602_E= 1;//高脉冲
    Lcd1602_E= 0;
}


//向1602中写入数据
void   LcdWriteDat(unsigned char dat)
{
    LcdYorN();
    Lcd1602_RS = 1;
    Lcd1602_RW= 0;
    Lcd1602_DB= dat;
    Lcd1602_E=1;
    Lcd1602_E=0;
}

//设置显示的位置((一个位置)(x,y)对应坐标
void LcdStartAdr(unsigned char x,unsigned char y)
{
    unsigned char addr;
    if(y == 0)
        {    addr = 0x00 + x;}
    else
        {    addr = 0x40+x;}
    LcdWriteCmd(addr | 0x80);
    //设置地址;
}


//(x,y)指的是显示的开始位置
//str字符串指针,len显示的长度
void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str, unsigned char len)
{
    LcdStartAdr(x, y);
    while(len--)
    {
        LcdWriteDat(*str++);
        //先取数值然后地址加1;
    }
}

//1602初始化
void LcdInit()
{
    LcdWriteCmd(0x38);
    LcdWriteCmd(0x0C);//开显示关光标
    LcdWriteCmd(0x06);//文字不动地址加1
    LcdWriteCmd(0x01);//清屏
}


*str++:指的是首先取数值,然后地址加1;

16进制的字符码:

数据指针的设置,也就是说当写的代码显示第一行的话,但是液晶第一行的16个显示的位置还有剩余,当再进行显示并且

要在第二行显示时,要重新设置数据地址指针。

下面的代码就是分两行显示;

整屏移动指令:

每执行一次指令就仅仅只整屏移动1个字符;

整屏左移16次;

猜你喜欢

转载自blog.csdn.net/jiangxiaoweijxw/article/details/87079823