单片机控制LCD1602显示字符(测试通过)

本次测试的是常用LCD1602显示屏,操作流程很简单,但有些小问题要注意,如该LCD处理速度有些慢,单片机在发送控制指令时需要适当延时,否则可能操作失败。

一、硬件简介

1>引脚介绍

                  单片机控制LCD1602显示字符(测试通过)_第1张图片

具体引脚如下:

单片机控制LCD1602显示字符(测试通过)_第2张图片

单片机需要操作的引脚有:RS、RW、E及DB0~7

****************************************************************************************************************

详情请咨询:                                                 http://shop108408772.taobao.com/

**************************************************************************************************************

2>指令介绍

单片机控制LCD1602显示字符(测试通过)_第3张图片单片机控制LCD1602显示字符(测试通过)_第4张图片单片机控制LCD1602显示字符(测试通过)_第5张图片单片机控制LCD1602显示字符(测试通过)_第6张图片单片机控制LCD1602显示字符(测试通过)_第7张图片单片机控制LCD1602显示字符(测试通过)_第8张图片单片机控制LCD1602显示字符(测试通过)_第9张图片

****************************************************************************************************************

详情请咨询:                                                 http://shop108408772.taobao.com/

**************************************************************************************************************

在这里,仅仅介绍下什么是CGRAM、什么是DDRAM?

CGRAM:是用户自定义字符存放存储器,可以自己在指定地址定义字符

DDRAM:是对应屏幕位置的存储器,设定了该地址,就确定了从屏幕什么位置开始显示字符

二、软件部分

#include
#include
#define DATA P0
sbit RS=P2^6;
sbit RW=P2^5;
sbit EN=P2^7;
unsigned char zifu[]={"Hello,World!0"};
unsigned char wangzhi[]={"http://shop108408772.taobao.com/"};
void delayms(unsigned char m) //适当延时
{unsigned char i;
while(m--)
{
for(i=0;i<=250;i++)
{_nop_();
}
}
}
void WRITE_BYTE(unsigned char canshu)  //写1个字节
{
RW=0;
_nop_();
_nop_();
EN=1;
_nop_();
DATA=canshu;
EN=0;
_nop_();
_nop_();
}

****************************************************************************************************************

详情请咨询:                                                 http://shop108408772.taobao.com/

**************************************************************************************************************

/*********************************************************
unsigned char READ_BYTE()   //读一个字节
{ unsigned char temp;
RW=1;
_nop_();
EN=1;
_nop_();
EN=0;
temp=DATA;
_nop_();
return temp;
}
*****************************************/
void main()
{
unsigned char *point;
RS=0;
WRITE_BYTE(1); //清屏
delayms(10); //约延时23ms
WRITE_BYTE(2); //光标归位
delayms(10);
WRITE_BYTE(6);  //  AC自动增1,屏幕不动
delayms(10);
WRITE_BYTE(0x0F); //光标显示闪烁
delayms(10);
WRITE_BYTE(0x14);  //光标右移
delayms(10);
WRITE_BYTE(0x38); //两行显示,5X7字符
delayms(10);
WRITE_BYTE(0x80);   //设定DDRAM地址
delayms(10);
_nop_();
point=wangzhi;
while(*point!='\0') //Hello,world! ,http://shop108408772.taobao.com
{RS=1;
_nop_();
WRITE_BYTE(*point);
point=point+1;
delayms(10);
if(point==wangzhi+16)
{RS=0;
WRITE_BYTE(0xC0);   //设定DDRAM地址为下行第一个字符处
delayms(10);
}   
}
while(1);
}

****************************************************************************************************************

详情请咨询:                                                 http://shop108408772.taobao.com/

**************************************************************************************************************

三、测试中问题

1>在每条指令之后注意适当延时,不然操作出错

2>本次测试中就不读忙标志位了,直接延时再操作基本能通过

四、测试结果

单片机控制LCD1602显示字符(测试通过)_第10张图片

****************************************************************************************************************

详情请咨询:                                                 http://shop108408772.taobao.com/

**************************************************************************************************************


你可能感兴趣的:(单片机测试)