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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)