#操作方法
**原理图**
代码
******************************************************************
* 【课程17】 ****LCD1602的实验***********
* 【说 明】 ****
* 【描 述】 ****在LCD1602上显示字符
******************************************************************
---------------------------------------------------------
基本操作:
读状态: RS=0,RW=1,EN=1
输出:D0~D7=状态字;
写指令: RS=0,RW=0,EN=下降沿脉冲
D0~D7=指令码;
读数据: RS=1,RW=1,EN=1
输出: D0~D7=数据;
写数据: RS=1,RW=1,EN=下降沿脉冲
D0~D7=数据;
*********************************************************/
#include
//---------常用的两个宏定义--------------
#define uint8 unsigned char
#define uint16 unsigned int
//--------1602的控制引脚定义-------------
sbit RS = P2^5;
sbit RW = P2^6;
sbit EN = P2^7;
//----------显示的数据------------
uint8 Data1[7]="welcom!";
uint8 Data2[13]="www.yxarm.net";
//-----------函数的声明------------------
void DelayMS(uint16 dly);
//----------液晶模块的声明---------------
bit BUSY(void);
void Write_cmd(uint8 cmd);
void Write_dat(uint8 dat);
void LCD_Init(void);
//---------Main Task---------------------
void main(void)
{
uint8 i;
LCD_Init();
while(1)
{
Write_cmd(0x85); //第一行
for(i=0;i<7;i++)
Write_dat(Data1[i]);
Write_cmd(0xc2); //第二行
for(i=0;i<13;i++)
Write_dat(Data2[i]);
}
}
/********************************************************
** 名称 :void DelayMS(uint16 dly)
** 功能 :毫秒级延时(12M的晶振)
** 入口参数 :dly 用户的延时参数
** 出口参数 :无
*********************************************************/
void DelayMS(uint16 dly)
{
uint16 x,y;
for(x=dly;x>0;x--)
for(y=124;y>0;y--);
}
/********************************************************
** 名称 :bit BUSY(void)
** 功能 :检测LCD1602是否处于忙状态;
** 入口参数 :无
** 出口参数 :bit Bit
返回1,则BUSY
返回0,则OK
*********************************************************/
bit BUSY(void)
{
bit Bit;
RS = 0;
RW = 1;
EN = 1;
DelayMS(1);
Bit = (bit)(P0 & 0x80); //最高位为忙信号位
EN = 0;
return Bit;
}
/********************************************************
** 名称 :void Write_cmd(uint8 cmd)
** 功能 :写命令
** 入口参数 :cmd 控制命令
** 出口参数 :无
*********************************************************/
void Write_cmd(uint8 cmd)
{
while(BUSY()); //测忙
RS = 0;
RW = 0;
EN = 0;
P0 = cmd;
EN = 1;
DelayMS(1);
EN = 0;
}
/********************************************************
** 名称 :void Write_dat(uint8 dat)
** 功能 :写数据
** 入口参数 :dat 要显示的数据
** 出口参数 :无
*********************************************************/
void Write_dat(uint8 dat)
{
while(BUSY()); //测忙
RS = 1;
RW = 0;
EN = 0;
P0 = dat;
EN = 1;
DelayMS(1);
EN = 0;
}
/********************************************************
** 名称 :void LCD_Init(void)
** 功能 :液晶的初始化
** 入口参数 :无
** 出口参数 :无
*********************************************************/
void LCD_Init(void)
{
Write_cmd(0x38); //功能设置
DelayMS(1);
Write_cmd(0x0c); //显示开关控制
DelayMS(1);
Write_cmd(0x06); //输入方式设置
DelayMS(1);
Write_cmd(0x01); //清除LCD的显示内容
DelayMS(1);
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』