6.显示屏(LCD1602)

1.非标协议外设
1.1 LCD1602 显示
1.1.1 概述
LCD1602 Liquid Crystal Display )是一种工业字符型液晶,能够同时显示 16×02 32 字符 (16 列两行)
引脚说明
1 : VSS 为电源地
2 : VDD 5V 正电源
3 : VL 为液晶显示器对比度调整端 , 接正电源时对比度最弱,接地时对比度最高,对比度
             过高时会产生“鬼影 ,使用时可以通过一个 10K 的电位器调整对比度。
4 RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
5 R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS R/W
              同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信               
号, 当 RS 为高电平 R/W 为低电平时可以写入数据。
6 E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。
7-14 D0 D7 8 位双向数据线。
15 :背光源正极。
16 :背光源负极。
1.2 LCD1602 和51单片机的接线
电源
VSS --  GND
VDD--  5 V
对比度
VO--  GND
控制线
RS--  P2.6
RW--  P2.5
E--  P2.7
背光灯
A--  5 V
K -- GDN
数据线
D0 到D7--  P0 . P0 . 7
1.3 LCD1602 和51单片机的程序

#include "reg52.h"
#include <intrins.h>

#define bufferdata  P0

sbit E = P2^7;
sbit RS = P2^6;
sbit RW = P2^5;

/* 读时序 */
void Check_Busy(void)
{
    char cmd = 0x80;
    bufferdata = 0x80;
    while(cmd & 0x80)
    {
        RS = 0;
        RW = 1;
        E = 0;
        _nop_();
        E = 1;
        _nop_();
        _nop_();
        cmd = bufferdata;
        E = 0;
        _nop_();
    }
}

/* 写数据时序 */
void Write_data_Fuc(char datacmd)
{
    Check_Busy();
    
    RS = 1;
    RW = 0;
    E = 0;
    _nop_();
    bufferdata = datacmd;
    _nop_();
    E = 1;
    _nop_();
    _nop_();
    E = 0;
    _nop_();
}

/* 写指令时序 */
void Write_cmd_Fuc(char cmd)
{
    Check_Busy();
    
    RS = 0;
    RW = 0;
     E = 0;
    _nop_();
    bufferdata = cmd;
    _nop_();
    E = 1;
    _nop_();
    _nop_();
    E = 0;
    _nop_();
}

/* 控制LCD 16列2行显示屏 */
void LCD1602_Showline(char row,char col,char *string)
{
    switch(row)
    {
        case 1:
            Write_cmd_Fuc(0x80 + col);
            while(*string)
            {
                Write_data_Fuc(*string);
                string++;
            }
            break;
        case 2:
            Write_cmd_Fuc(0x80 + 0x40 + col);
            while(*string)
            {
                Write_data_Fuc(*string);
                string++;
            }
            break;
    }
}

void Delay15ms(void)    //@11.0592MHz
{
    unsigned char data i, j;

    i = 27;
    j = 226;
    do
    {
        while (--j);
    } while (--i);
}

void Delay5ms(void)    //@11.0592MHz
{
    unsigned char data i, j;

    i = 9;
    j = 244;
    do
    {
        while (--j);
    } while (--i);
}

/* LCD1602初始化 */
void LCD1602_Init(void)
{
    //(1)延时 15ms
    Delay15ms();
    //(2)写指令 38H(不检测忙信号)
    Write_cmd_Fuc(0x38);
    //(3)延时 5ms
    Delay5ms();
    //(4)以后每次写指令,读/写数据操作均需要检测忙信号
    //(5)写指令 38H:显示模式设置
    Write_cmd_Fuc(0x38);
    //(6)写指令 08H:显示关闭
    Write_cmd_Fuc(0x08);
    //(7)写指令 01H:显示清屏
    Write_cmd_Fuc(0x01);
    //(8)写指令 06H:显示光标移动设置
    Write_cmd_Fuc(0x06);
    //(9)写指令 0CH:显示开及光标设置
    Write_cmd_Fuc(0x0C);
}

/* 主函数 */
void main(void)
{
    LCD1602_Init();
    
    LCD1602_Showline(1,0, "520 happy" );
    LCD1602_Showline(2,0, "I love you" );
    
    while(1)
    {
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值