×
单片机 > 其他资讯 > 详情

壹拾陆:LCD1602的显示

发布时间:2020-07-10 发布时间:
|

#操作方法




**原理图**

代码


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

*   【课程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 //51头文件,


//---------常用的两个宏定义-------------- 

#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);

}


 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
用于双极性输入的125 MSPS单电源直流耦合型模拟前