×
单片机 > 单片机程序设计 > 详情

51单片机 LCD1602显示

发布时间:2020-05-28 发布时间:
|

引脚图



#include

#include

#define uchar unsigned char

#define uint unsigned int

#define out P0

sbit RS=P2^7;

sbit RW=P2^6;

sbit E=P2^5;

 

void lcd_initial(void); //LCD初始化函数

void check_busy(void);    //检查是否忙碌函数

void write_command(uchar com); //写命令函数

void write_data(uchar dat);   //写数据函数

void string(uchar ad,uchar *s);   //显示字符串函数

void delay(uint); //延时函数

void main(void)

{

    lcd_initial(); //调用初始化函数

while(1)

{

string(0x85,"mzf");

string(0xC2,"185*****5260");

delay(100);

write_command(0x01);

delay(100);

 

}

}

void delay(uint j) //1ms的延时

{

uchar i=250;

for(;j>0;j--)

{

while(--i);

i=249;

while(--i);

i=250;

 

}

}

 

void check_busy(void)

{

uchar dt;

do

{

dt=0xff; //dt为变量单元,初值为0xff

E=0;   

RS=0;   //RS等于0,E=1时,才能够进行读忙碌状态

RW=1;

E=1;  

dt=out;   //out为P0口,将P0口的状态送给dt;

 

}while(dt&0x80);

E=0;

}

void write_command(uchar com)

{

check_busy();   //检查是否忙碌,检查BF标志位,如果BF=1,则繁忙

E=0;

RS=0;    //RS,E同时为零时,才可以写入命令;

RW=0;

out=com; //将命令com写入P0;

E=1; //按规定执行命令时,E应为正脉冲,即正跳变,所以前面应该先直零

_nop_(); //空操作给硬件反应时间,此函数包含在intrins里面

E=0;

delay(1);

 

}

void write_data(uchar dat)

{

check_busy();

E=0;

RS=1;

RW=0;

out=dat;

E=1;

_nop_();

E=0;

delay(1);

 

}

void lcd_initial(void) //液晶显示器初始化函数

{

write_command(0x38);  //两行显示,5x7点阵,8位数据

write_command(0x0C);  //开整体显示,光标关,无闪烁

write_command(0x06);  //写入一个字符后,地址指针加一

write_command(0x01);   //清屏

delay(1);

}

void string(uchar ad,uchar *s)

{

write_command(ad);

while(*s>0)

{

write_data(*s++);

delay(100);

}

}


关键字:51单片机  LCD1602  显示 

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

热门文章 更多
可升级和可配置的PSoC62系列MCU平台架构