单片机小白学习之路(四十二)---LCD1602液晶编码

目标:LCD1602的编码


  • lcd.c
#include "lcd.h"

void Lcd1602_Delay1ms(uint c) //延时'c'ms
{
    uchar a,b;
    for(;c>0;c--){
        for(b=199;b>0;b--){
            for(a=1;a>0;a--);
        }
    }
}

#ifndef          LCD1602_4PINS  //如果定义的不是四位的话
void LcdWriteCom(uchar com){   //传输命令的函数
    LCD1602_E = 0;  //使能端为低,可以进行数据改变,在这时把数据放如数据端口(DATAPINS)
    LCD1602_RS = 0; //命令
    LCD1602_RW = 0; //写入

    LCD1602_DATAPINS = com;   //数据放入数据端
    Lcd1602_Delay1ms(1);     //延迟1ms,也可以不延迟

    LCD1602_E = 1;     //使能端变高,可以把数据输送到液晶
    Lcd1602_Delay1ms(5);  //给数据传输到液晶的时间
    LCD1602_E = 0;     //为下次传输时间做准备
}
#else
void LcdWriteCom(uchar com)
{
    LCD1602_E = 0;
    LCD1602_RS = 0;
    LCD1602_RW = 0;

    LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
    Lcd1602_Delay1ms(1);

    LCD1602_E = 1;                  
    Lcd1602_Delay1ms(5);
    LCD1602_E = 0;

        //Lcd1602_Delay1ms(1);
    LCD1602_DATAPINS = com << 4; //发送低四位
    Lcd1602_Delay1ms(1);

    LCD1602_E = 1;   //写入时序
    Lcd1602_Delay1ms(5);
    LCD1602_E = 0;
}
#endif


#ifndef         LCD1602_4PINS   //如果定义的不是四位的话
void LcdWriteData(uchar dat)  //传输数据的函数
{
    LCD1602_E = 0;
    LCD1602_RS = 1;
    LCD1602_RW = 0;

    LCD1602_DATAPINS = dat;
    Lcd1602_Delay1ms(1);

    LCD1602_E = 1;
    Lcd1602_Delay1ms(5);
    LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat)
{
    LCD1602_E = 0;
    LCD1602_RS = 1;
    LCD1602_RW = 0;

    LCD1602_DATAPINS = dat;
    Lcd1602_Delay1ms(1);

    LCD1602_E = 1;
    Lcd1602_Delay1ms(5);
    LCD1602_E = 0; 
        //  Lcd1602_Delay1ms(1);
    LCD1602_DATAPINS = com << 4; //发送低四位
    Lcd1602_Delay1ms(1);

    LCD1602_E = 1;   //写入时序
    Lcd1602_Delay1ms(5);
    LCD1602_E = 0;
}
#endif


#ifndef            LCD1602_4PINS
void LcdInit()
{
    LcdWriteCom(0x38); //开显示
    LcdWriteCom(0x0c); //开显示不显示光标
    LcdWriteCom(0x06); //写一个指针加1
    LcdWriteCom(0x01); //清屏
    LcdWriteCom(0x80); //设置数据指针的起点
}
#else
void LcdInit()
{
    LcdWriteCom(0x32); //将8位总线转为4位总线
    LcdWriteCom(0x28); //在四位线下的初始化
    LcdWriteCom(0x0c); //开显示不显示光标
    LcdWriteCom(0x06); //写一个指针加1
    LcdWriteCom(0x01); //清屏
    LcdWriteCom(0x80); //设置数据指针的起点
}
#endif

  • main.c
#include "reg52.h"
#include "lcd.h"

typedef unsigned int u16;
typedef unsigned char u8;

u8 Disp1[] = " KAI TUO ZHE V2 ";  //第一排要显示的字符
u8 Disp2[] = "  Hello World!  ";  //第二排要显示的字符

void main()
{     
    u8 i;
    LcdInit();
    for(i=0;i<16;i++){
        LcdWriteData(Disp1[i]); //从指针的起始位置开始传输,自动加1
    }
    LcdWriteCom(0x80+0x40);  //第二排起始地址
    for(i=0;i<16;i++){
        LcdWriteData(Disp2[i]);
    }
    while(1); //数据已经传输过去了,可以一直显示,就保持在这就行了
}

  • lcd.h
#ifndef _LCD_H_
#define _LCD_H_

//#define LCD1602_4PINs  //当使用的四位数据传输的时候定义,使用8位时注释此句话

#include<reg52.h>

#ifndef uint
#define uint unsigned int
#endif

#ifndef uchar
#define uchar unsigned char
#endif

//PIN口定义
#define LCD1602_DATAPINS P0
sbit LCD1602_E = P2^7;  //使能端
sbit LCD1602_RW = P2^5; //选择写还是读
sbit LCD1602_RS = P2^6; //命令数据选择端

//函数定义
void Lcd1602_Delay1ms(uint c); //延时'c'ms 4
void LcdWriteCom(uchar com);   ///*LCD1602写入8位命令子函数*/
void LcdWriteData(uchar dat);  /*LCD1602写入8位数据子函数*/
void LcdInit();    /*LCD1602初始化子程序*/    

#endif
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值