51单片机编写lcd1602显示程序,第一行显示自己的姓名,第二行显示学号

51单片机编写lcd1602显示程序,第一行显示自己的姓名,第二行显示学号,第1张

1、首先我们打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并启动器添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。

2、导入51单片机的头文件以及LCD1602的头文件。

3、创建一个延时函数,可以传入想要具体延时的时长,其内部实现是由一个二重循环,两个循环的次数相乘积。

4、然后创建写命令的函数,指定RS和E同时为0时,才可以写入命令,设定完成后,将com写入输出端口,规定写命令时,E为正脉冲,然后空 *** 作一个机器周期等待机器反应。

5、然后创建写数据的函数,规定写数据时,E为正脉冲,规定当RS=1和RW=0时才可以写入数据,然后将数据从输出端口输出,最后让E产生正跳变。

6、然后创建初始化LCD1602的函数,指定显示模式位两行显示,5*7,8位数据、整体显示,无光标,无闪烁、写入一个字符后地址指针加1,最后进行清屏 *** 作。

7、最后在主函数中首先执行LCD1602的初始化函数,首先创建一个无限循环,然后添加两个字符串,这里以两行显示百度经验的网址为例,再进行延时以及使用清屏函数进行刷新。

给你一个我实际的初始化程序,其中前后和命令之间的延时是我实际调试出来的,若延时时间短了也会出现你的现象:

void

cmd1602(unsigned

char

ddata)

{

CTL1602_OUT

=

0

//RS/RW/EN=0

//禁止1602(E=0),选择1602为命令方式(RS=0),将读写口改为写状态(RW=0)

delay_us(50)

//等待BUSY位变低

DAT1602_OUT

=

ddata

//送出数据到数据总线

SET1602_EN

//芯片使能位置1

delay_us(5)

//保持一定宽度

SET1602_DI

//芯片使能位清0,命令被1602读到

delay_us(1)

//保持一定宽度

}

void

init_disp(void)

{

DAT1602_SEL

=

0

//数据总线口定义为I/O方式

DAT1602_DIR

=

0xff

//口定义为输出方式

CTL1602_SEL

&=

~(SEL+RW+ENB)

//各控制位定义为I/O方式

CTL1602_DIR

|=

(SEL+RW+ENB)

//口定义为输出方式

//以上4行为430的I/O口定义 *** 作,具体在头文件中定义

delay_ms(500)//延时500毫秒

cmd1602(0x38)

/*

Two

Lines,

5x7

Font

Style,

No

Cursors,

No

Blink

*/

delay_ms(10)

cmd1602(0x38)

delay_ms(10)

cmd1602(0x38)

delay_ms(10)

cmd1602(0x38)

delay_ms(10)

cmd1602(0x08)

//close

display

delay_ms(10)

cmd1602(0x01)

//clear

display

delay_ms(10)

cmd1602(0x06)

//set

AC

right

move

delay_ms(10)

cmd1602(0x0c)

//open

display

delay_ms(200)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11602017.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存