登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 1602的静态显示

[复制链接]
发表于 2022-2-17 19:01:44 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 51单片机
学习安排: 学习
开始时间: 2022-02-17
结束时间: 2022-02-17
学习1602的核心就是时序,一共有四种时序,但是常用的一共分为三种。分别是读状态,写指令,写数据
1  读状态
    db要放置0xoo,rs为低电平,rw为高电平,使能e也要高电平,读取p0的高位,看看是否忙,只有不忙才能对液晶进行操作
2 写指令
   rs和rw都为高电平,db写入指令,当e拉高电平再拉低,就能写入指令。
3 写数据
  rs高电平,rw低电平,db写入数据,当e拉高电平再拉低,就能写入数据。
程序如下
#define DB P0
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P1^2;

void initlcd1602();
void lcdshowstr(unsigned char x,unsigned char y,unsigned char *str);
void main()
{
        unsigned char str[] = "kingst xuxinyu";
        initlcd1602();
        lcdshowstr(2,0,str);
        lcdshowstr(0,1,"welcome to hpu");
        while(1);

       
}
void lcdwaitready()
{
        unsigned char sta;
        DB=0XFF;
        RS=0;
        RW=1;
        do{
                E=1;
                sta=DB;
                E=0;
        }while(sta&0x80);
       
}
void lcdwritecmd(unsigned char cmd)
{
        lcdwaitready();
        RS=0;
        RW=0;
        DB=cmd;
        E=1;
        E=0;
}
void lcdwritedat(unsigned char dat)
{
        lcdwaitready();
        RS=1;
        RW=0;
        DB=dat;
        E=1;
        E=0;
       
}
void lcdsetcursor(unsigned x,unsigned y)
{
        unsigned char addr;
        if(y==0)
        {
                addr=0x00+x;
        }
        else
        {
                addr=0x40+x;
        }
        lcdwritecmd(addr|0x80);
}
void lcdshowstr(unsigned char x,unsigned char y,unsigned char *str)
{
        lcdsetcursor(x,y);
        while(*str!='\0')
        {
                lcdwritedat(*str++);
               
        }
       
}
void initlcd1602()
{
        lcdwritecmd(0x38);
        lcdwritecmd(0x0C);
        lcdwritecmd(0x06);
        lcdwritecmd(0x01);
}
QQ图片20220217190055.jpg
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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