找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9163|回复: 0
打印 上一主题 下一主题
收起左侧

学习LCD1602不带转接板和带转接板遇到的那些事。大神指点多多指点

[复制链接]
跳转到指定楼层
楼主
ID:233997 发表于 2017-10-15 14:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的LCD1602是带转接板的,DATA 8PIN 同时 也存在 4PIN接口。开始时只写8PIN状态下的程序,液晶显示是错误的,研究好久才发现要把4PIN的存在
同时写进去,用或不用就用#ifndef #else #endif 来解决。
P0口对应数据总线
一下是我写的

#include<reg52.h>
//#ifndef __LCD_H_
//#define __LCD_H_
/**********************************
当使用的是4位数据传输的时候定义,
使用8位取消这个定义
**********************************/
#define LCD1602_4PINS

//---重定义关键词---//
//#ifndef uchar
#define uchar unsigned char
//#endif

//#ifndef uint
#define uint unsigned int
//#endif

uchar code table[]="I LOVE MCU!";
uchar code table1[]="WWW.XTLCU.COM";

sbit lcde=P2^7;
sbit lcdrs=P2^6;
sbit lcdwr=P2^5;

void delay(uint z);

/*******************************************************************************
* 函 数 名         : Write_Com
* 函数功能                   : 向LCD写入一个字节的命令
* 输    入         : com
* 输    出         : 无
*******************************************************************************/
#ifndef         LCD1602_4PINS         //当没有定义这个LCD1602_4PINS时
void write_com(uchar com)
{               
                lcde=0;
        lcdrs=0;    //选择发送命令
                lcdwr=0;
        P0=com;    //放入命令
                delay(5);
        lcde=1;      //写入时序
        delay(5);   //保持时间
        lcde=0;

}
#else
void write_com(uchar com)
{               
                lcde=0;
        lcdrs=0;    //选择发送命令
                lcdwr=0;
        P0=com;    //放入命令
                delay(5);
        lcde=1;      //写入时序
        delay(5);   //保持时间
        lcde=0;
                P0=com << 4; //发送低四位
                delay(5);

                lcde=1;         //写入时序
                delay(5);
                lcde=0;
}
#endif
/*******************************************************************************
* 函 数 名         : Write_Data
* 函数功能                   : 向LCD写入一个字节的数据
* 输    入         : dat
* 输    出         : 无
*******************************************************************************/                  
#ifndef         LCD1602_4PINS       
void write_data(uchar date)
{                lcde=0;
        lcdrs=1;        //选择输入数据
                lcdwr=0;
        P0=date;  //写入数据
                delay(5);
        lcde=1;   //写入时序
        delay(5); //保持时间
        lcde=0;

}
#else
void write_data(uchar date)
{                lcde=0;
        lcdrs=1;        //选择输入数据
                lcdwr=0;
        P0=date;  //写入数据
                delay(5);
        lcde=1;   //写入时序
        delay(5); //保持时间
        lcde=0;

        P0=date<<4;  //写入低四位
                delay(5);
        lcde=1;   //写入时序
        delay(5); //保持时间
        lcde=0;
}
#endif
/*******************************************************************************
* 函 数 名       : LcdInit()
* 函数功能                 : 初始化LCD屏
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/                  
#ifndef                LCD1602_4PINS
void init()
{
        lcde=0;

        write_com(0x38);//设置16x2显示,5x7点阵,8位数据接口
        write_com(0X0c);//开显示,显示光标,光标闪烁
        write_com(0X06);//写一个字符后地址针加一,光标加一
        write_com(0X01);//数据指针清零,所有显示清零
                write_com(0X80);

}
#else
void init()
{
        lcde=0;

        write_com(0x32);//将8位总线转为4位总线
        write_com(0X28); //在四位线下的初始化
        write_com(0X0c);
        write_com(0X06);
                write_com(0X1);
                write_com(0X80);
}
#endif
void main()
{                uchar num;
        init();
        //write_com(0x80);//设置数据地址指针 液晶显示RAM 有 80个字节 00H~27H 40H~67H,第一行第一个字处
        for(num=0;num<11;num++)
        {
                write_data(table[num]);
                delay(5);
        }
        write_com(0x80+0x40);//第二行第一个字处
        for(num=0;num<13;num++)
        {
                write_data(table1[num]);
                delay(5);
        }

                delay(5);
        while(1);

}

void delay(uint z)
{
        uint i,j;
        for(i=z;i>0;i--)
        for(j=110;j>0;j--);

}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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