学习1602液晶,也是把握要好其初始化的有关知识

1. RS数据命令选择端     我们的板子上连的是P10

  R/W读写选择短端     我们的板子上连的是P11

  E使能信号               我们的板子上连的是P12

  D0-D7                   我们的板子上连的是P20-P27

2. 我们只训练的写命令,所以R/W就可以一直置零

3. 基本时序操作:

  写指令:RS=0  R/W=0  D0-D7=指令码  E=高脉冲

  写数据:RS=1  R/W=0  D0-D7=数据   E=高脉冲

4. 初始化设置

  (1)显示模式设置(通过写指令写入):0x38(设置16×2显示,5×7点,8位数据口)

  (2)显示开/关及光标设置(具体详见老郭的第八节资料里的1602液晶说明.pdf第二页)

5. 数据控制

  数据指针0x80+地址码(第一行是0-0x27,其中0-0x0f可以直接显示出来,后边用的滚屏时候;第二行是0x40-0x67,其中0x40-0x4f可以直接显示出来,后边用滚屏)

  清屏指令(0x01)

清屏指令(0x01)

/*
2012年3月23日15:37:27
只是显示两行数据,如何显示,初始化程序等
显示结果为:第一行显示“HOLY SHIT!”第二行显示“Erra!”

*/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit lcden=P1^2;

void delay(uchar); //声明延时函数
void write_com(uchar com); //声明写命令函数
void write_data(uchar date); //声明写数据函数
void init(); //声明初始化函数

uchar i,j;
uchar code t0[]=”HOLY SHIT!”; //注意此数组当为字符串时候为””,若为单个字母则直接调取写数据函数不过要加\’\’
uchar code t1[]=”Erra!”;

void main()
{
init();
for(i=0;i<10;i++)
{
write_data(t0[i]);
delay(5);
}
write_com(0x80+0x40); //换行写数据,操作指针地址
for(j=0;j<5;j++)
{
write_data(t1[j]);
delay(5);
}

while(1); //等待
}
void delay(uchar z) //延时函数
{
uint x,y;
for(x=z;x>0;x–)
for(y=110;y>0;y–);
}
void init() //1602初始化
{
lcden=0; //使能1602
lcdrw=0; //定为写
write_com(0x38); //显示模式设置
write_com(0x0f); //显示开关及光标设置
write_com(0x06);
write_com(0x01); //所有显示清零
write_com(0x80); //数据指针初始化
}
void write_com(uchar com) //写指令函数
{
lcdrs=0; //写指令
P2=com;
delay(5);
lcden=1; //有时序可以看出,要有一个高脉冲..
delay(5);
lcden=0;

}
void write_data(uchar date) //写数据函数
{
lcdrs=1; //写数据
P2=date;
delay(5);
lcden=1; //有时序可以看出,要有一个高脉冲..
delay(5);
lcden=0;
}

复制代码
  1. /*
    2012年3月23日15:37:27
    只是显示两行数据,如何显示,初始化程序等
    显示结果为:第一行显示“HOLY SHIT!”第二行显示“Erra!”

    */
    #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    sbit lcdrs=P1^0;
    sbit lcdrw=P1^1;
    sbit lcden=P1^2;

    void delay(uchar); //声明延时函数
    void write_com(uchar com); //声明写命令函数
    void write_data(uchar date); //声明写数据函数
    void init(); //声明初始化函数

    uchar i,j;
    uchar code t0[]="HOLY SHIT!"; //注意此数组当为字符串时候为"",若为单个字母则直接调取写数据函数不过要加\'\'
    uchar code t1[]="Erra!";

    void main()
    {
    init();
    for(i=0;i<10;i++)
    {
    write_data(t0[i]);
    delay(5);
    }
    write_com(0x80+0x40); //换行写数据,操作指针地址
    for(j=0;j<5;j++)
    {
    write_data(t1[j]);
    delay(5);
    }

    while(1); //等待
    }
    void delay(uchar z) //延时函数
    {
    uint x,y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);
    }
    void init() //1602初始化
    {
    lcden=0; //使能1602
    lcdrw=0; //定为写
    write_com(0x38); //显示模式设置
    write_com(0x0f); //显示开关及光标设置
    write_com(0x06);
    write_com(0x01); //所有显示清零
    write_com(0x80); //数据指针初始化
    }
    void write_com(uchar com) //写指令函数
    {
    lcdrs=0; //写指令
    P2=com;
    delay(5);
    lcden=1; //有时序可以看出,要有一个高脉冲..
    delay(5);
    lcden=0;

    }
    void write_data(uchar date) //写数据函数
    {
    lcdrs=1; //写数据
    P2=date;
    delay(5);
    lcden=1; //有时序可以看出,要有一个高脉冲..
    delay(5);
    lcden=0;
    }
复制代码

 

/*
2012年3月23日16:11:46
只是显示两行数据,如何显示,初始化程序等
显示结果为:第一行显示“HOLY SHIT!”第二行显示“Erra!”
现将数据写到不在屏上直接显示的后边,然后采用整屏左移命令(0x18),
使其整屏左移,具体的命令在老郭的第八节课件里的EN_TC1602.pdf中有说明

*/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit lcden=P1^2;

void delay(uchar); //声明延时函数
void write_com(uchar com); //声明写命令函数
void write_data(uchar date); //声明写数据函数
void init(); //声明初始化函数

uchar i,j,num;
uchar code t0[]=”HOLY SHIT!”; //注意此数组当为字符串时候为””,若为单个字母则直接调取写数据函数不过要加\’\’
uchar code t1[]=”Erra!”;

void main()
{
init();
for(i=0;i<10;i++)
{
write_data(t0[i]);
delay(5);
}
write_com(0x80+0x50); //换行写数据,操作指针地址
for(j=0;j<5;j++)
{
write_data(t1[j]);
delay(5);
}
for(num=0;num<16;num++) //整屏左移16个位置
{
write_com(0x18);
delay(200);
}
while(1); //等待
}
void delay(uchar z) //延时函数
{
uint x,y;
for(x=z;x>0;x–)
for(y=110;y>0;y–);
}
void init() //1602初始化
{
lcden=0; //使能1602
lcdrw=0; //定为写
write_com(0x38); //显示模式设置
write_com(0x0f); //显示开关及光标设置
write_com(0x06);
write_com(0x01); //所有显示清零
write_com(0x80+0x10); //数据指针初始化到第0x80+0x10位
}
void write_com(uchar com) //写指令函数
{
lcdrs=0; //写指令
P2=com;
delay(5);
lcden=1; //有时序可以看出,要有一个高脉冲..
delay(5);
lcden=0;

}
void write_data(uchar date) //写数据函数
{
lcdrs=1; //写数据
P2=date;
delay(5);
lcden=1; //有时序可以看出,要有一个高脉冲..
delay(5);
lcden=0;
}

复制代码
  1. /*
    2012年3月23日16:11:46
    只是显示两行数据,如何显示,初始化程序等
    显示结果为:第一行显示“HOLY SHIT!”第二行显示“Erra!”
    现将数据写到不在屏上直接显示的后边,然后采用整屏左移命令(0x18),
    使其整屏左移,具体的命令在老郭的第八节课件里的EN_TC1602.pdf中有说明

    */
    #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    sbit lcdrs=P1^0;
    sbit lcdrw=P1^1;
    sbit lcden=P1^2;

    void delay(uchar); //声明延时函数
    void write_com(uchar com); //声明写命令函数
    void write_data(uchar date); //声明写数据函数
    void init(); //声明初始化函数

    uchar i,j,num;
    uchar code t0[]="HOLY SHIT!"; //注意此数组当为字符串时候为"",若为单个字母则直接调取写数据函数不过要加\'\'
    uchar code t1[]="Erra!";

    void main()
    {
    init();
    for(i=0;i<10;i++)
    {
    write_data(t0[i]);
    delay(5);
    }
    write_com(0x80+0x50); //换行写数据,操作指针地址
    for(j=0;j<5;j++)
    {
    write_data(t1[j]);
    delay(5);
    }
    for(num=0;num<16;num++) //整屏左移16个位置
    {
    write_com(0x18);
    delay(200);
    }
    while(1); //等待
    }
    void delay(uchar z) //延时函数
    {
    uint x,y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);
    }
    void init() //1602初始化
    {
    lcden=0; //使能1602
    lcdrw=0; //定为写
    write_com(0x38); //显示模式设置
    write_com(0x0f); //显示开关及光标设置
    write_com(0x06);
    write_com(0x01); //所有显示清零
    write_com(0x80+0x10); //数据指针初始化到第0x80+0x10位
    }
    void write_com(uchar com) //写指令函数
    {
    lcdrs=0; //写指令
    P2=com;
    delay(5);
    lcden=1; //有时序可以看出,要有一个高脉冲..
    delay(5);
    lcden=0;

    }
    void write_data(uchar date) //写数据函数
    {
    lcdrs=1; //写数据
    P2=date;
    delay(5);
    lcden=1; //有时序可以看出,要有一个高脉冲..
    delay(5);
    lcden=0;
    }

复制代码
  1. /*
    2012年3月23日15:37:27
    只是显示两行数据,如何显示,初始化程序等
    显示结果为:第一行显示“HOLY SHIT!”第二行显示“Erra!”

    */
    #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    sbit lcdrs=P1^0;
    sbit lcdrw=P1^1;
    sbit lcden=P1^2;

    void delay(uchar); //声明延时函数
    void write_com(uchar com); //声明写命令函数
    void write_data(uchar date); //声明写数据函数
    void init(); //声明初始化函数

    uchar i,j;
    uchar code t0[]="HOLY SHIT!"; //注意此数组当为字符串时候为"",若为单个字母则直接调取写数据函数不过要加\'\'
    uchar code t1[]="Erra!";

    void main()
    {
    init();
    for(i=0;i<10;i++)
    {
    write_data(t0[i]);
    delay(5);
    }
    write_com(0x80+0x40); //换行写数据,操作指针地址
    for(j=0;j<5;j++)
    {
    write_data(t1[j]);
    delay(5);
    }

    while(1); //等待
    }
    void delay(uchar z) //延时函数
    {
    uint x,y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);
    }
    void init() //1602初始化
    {
    lcden=0; //使能1602
    lcdrw=0; //定为写
    write_com(0x38); //显示模式设置
    write_com(0x0f); //显示开关及光标设置
    write_com(0x06);
    write_com(0x01); //所有显示清零
    write_com(0x80); //数据指针初始化
    }
    void write_com(uchar com) //写指令函数
    {
    lcdrs=0; //写指令
    P2=com;
    delay(5);
    lcden=1; //有时序可以看出,要有一个高脉冲..
    delay(5);
    lcden=0;

    }
    void write_data(uchar date) //写数据函数
    {
    lcdrs=1; //写数据
    P2=date;
    delay(5);
    lcden=1; //有时序可以看出,要有一个高脉冲..
    delay(5);
    lcden=0;
    }
复制代码

 

复制代码
  1. /*
    2012年3月23日16:11:46
    只是显示两行数据,如何显示,初始化程序等
    显示结果为:第一行显示“HOLY SHIT!”第二行显示“Erra!”
    现将数据写到不在屏上直接显示的后边,然后采用整屏左移命令(0x18),
    使其整屏左移,具体的命令在老郭的第八节课件里的EN_TC1602.pdf中有说明

    */
    #include<reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    sbit lcdrs=P1^0;
    sbit lcdrw=P1^1;
    sbit lcden=P1^2;

    void delay(uchar); //声明延时函数
    void write_com(uchar com); //声明写命令函数
    void write_data(uchar date); //声明写数据函数
    void init(); //声明初始化函数

    uchar i,j,num;
    uchar code t0[]="HOLY SHIT!"; //注意此数组当为字符串时候为"",若为单个字母则直接调取写数据函数不过要加\'\'
    uchar code t1[]="Erra!";

    void main()
    {
    init();
    for(i=0;i<10;i++)
    {
    write_data(t0[i]);
    delay(5);
    }
    write_com(0x80+0x50); //换行写数据,操作指针地址
    for(j=0;j<5;j++)
    {
    write_data(t1[j]);
    delay(5);
    }
    for(num=0;num<16;num++) //整屏左移16个位置
    {
    write_com(0x18);
    delay(200);
    }
    while(1); //等待
    }
    void delay(uchar z) //延时函数
    {
    uint x,y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);
    }
    void init() //1602初始化
    {
    lcden=0; //使能1602
    lcdrw=0; //定为写
    write_com(0x38); //显示模式设置
    write_com(0x0f); //显示开关及光标设置
    write_com(0x06);
    write_com(0x01); //所有显示清零
    write_com(0x80+0x10); //数据指针初始化到第0x80+0x10位
    }
    void write_com(uchar com) //写指令函数
    {
    lcdrs=0; //写指令
    P2=com;
    delay(5);
    lcden=1; //有时序可以看出,要有一个高脉冲..
    delay(5);
    lcden=0;

    }
    void write_data(uchar date) //写数据函数
    {
    lcdrs=1; //写数据
    P2=date;
    delay(5);
    lcden=1; //有时序可以看出,要有一个高脉冲..
    delay(5);
    lcden=0;
    }
复制代码

 

版权声明:本文为sunnywh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sunnywh/p/5488810.html