手把手教你使用LCD1602(C程序+每个语句的详细说明)

  • 格式:doc
  • 大小:48.00 KB
  • 文档页数:5
#ifndef __LCD_H__
#define __LCD_H__
#include<reg52.h> //包含单片机寄存器的头文件
#include<intrins.h> //包含_nop_()函数定义的头文件
#include<delay.h>
#include<hwjm.h>
//------------------------------------------------------------------------------
extern void LCDINT();//1602LCD初始化
//---------------------------------------------------------------------------------------------------
extern void lcd_set_mode(uchar DL, uchar N, uchar F);//功能设定/*显示设置函数*/
{
write_com(0x02);
}
//-------------------------------------------------------------------------------/*向LCM1602写命令*/
void write_com(uchar dictate)//将指令写入液晶
void lcd_display_mode(uchar D, uchar C,uchar B) //显示设置函数
{
unsigned char mode=0x08;
if(D) mode |= 0x04;//显示功能:0关1开
Байду номын сангаасif(C) mode |= 0x02;//有无光标:0无1有
if(B) mode |= 0x01;//光标是否闪烁:0不闪1闪
//---------------------------------------------------------------------------------------------
extern void lcd_shift(unsigned char SC, unsigned char RLAA);//设置光标和显示屏移动方向/*光标移动设置*/
extern void write_com(uchar dictate);//将指令写入液晶
//-------------------------------------------------------------------------------
extern bit busytest();//判断液晶模块的忙碌状态result=1,忙碌;result=0,不忙
//-----------------------------------------------------------------------------------/*向LCM1602写数据*/
extern void writedata(uchar y);//把数据写到液晶
#endif
#include<LCD.h>
//------------------------------------------------------------------------------------------
extern void lcd_input_mode(uchar id,uchar s);//输入方式设置函数(光标、屏幕)
if(F) mode |= 0x04;//字符点阵F: 0(5*7)0(5*10)
write_com(mode);
}
//---------------------------------------------------------------------------------------------
delay(3);
lcd_input_mode(1,0);//显示模式设置输入模式:光标右移,字符不移
delay(3);
lcd_clear();//清屏幕指令,将以前的显示内容清除
delay(3);
lcd_backhome();
}
//---------------------------------------------------------------------------------------------------
write_com(mode);
}
//------------------------------------------------------------------------------------------
void lcd_input_mode(uchar id,uchar s)//输入方式设置函数(光标、屏幕)
void lcd_put_str(uchar x, uchar y, uchar *str)//字符串写入显示
{
writeaddress(x, y);
while(*str != '\0')
{
writedata(*str++);
}
*str = 0;
}
//----------------------------------------------------------------------------------
void lcd_set_mode(uchar DL, uchar N, uchar F)//功能设定/*显示设置函数*/
{
unsigned char mode=0x20;
if(DL) mode |= 0x10;//数据总线DL: 0(四位) 1(八位)
if(N) mode |= 0x08;//显示行数N: 0(1行)1(2行)
timezq(4);
E=0;//负跳变E被拉低,可以将数据写给液晶并开始执行命令
}
//-------------------------------------------------------------------------------
bit busytest()//判断液晶模块的忙碌状态result=1,忙碌;result=0,不忙
//----------------------------------------------------------------------------------------
extern void lcd_clear(void);//清屏函数
//-------------------------------------------------------------------------------------------
{
while(busytest()==1) ;//如果忙碌就等待
RS=0;//写指令状态
RW=0;
E=0;//正跳变时从总线上读取数据;负跳变时将数据写入液晶内部
timezq(2);
P0=dictate;//将数据送到P0口;即写入指令和地址
timezq(4);
E=1;//正跳变E被拉高,可以读数据
//----------------------------------------------------------------------------------
void LCDINT()//1602LCD初始化
{
delay(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间
lcd_set_mode(1,1,0);//显示模式设置:16×2显示,5×7点阵,8位数据接口
if(RL) mode |= 0x04;// SC:1RL:0显示屏左移1格,且光标不动
write_com(mode);// SC:1RL:1显示屏右移1格,且光标不动
}
//------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
extern void lcd_put_str(uchar x, uchar y, uchar *str);///*字符串写入显示*/
void lcd_shift(unsigned char SC, unsigned char RL)//设置光标和显示屏移动方向/*光标移动设置*/
{
unsigned char mode=0x10;// SC:0RL:0光标左移1格,且AC值减1
if(SC) mode |= 0x08;// SC:0RL:1光标右移1格,且AC值加1
delay(3);
lcd_set_mode(1,1,0);//3次写设置模式使其更稳定
delay(3);
lcd_set_mode(1,1,0);
delay(3);
lcd_shift(0,1);//光标右移1,AC值加1
delay(3);
lcd_display_mode(1,0,0);//显示模式设置显示开关控制:显示开,无光标,光标不闪烁
sbit RS=P2^0;//寄存器选择位,将RS位定义为P2.0引脚
sbit RW=P2^1;//读写选择位,将RW位定义为P2.1引脚
sbit E=P2^2;//使能信号位,将E位定义为P2.2引脚
sbit BF=P0^7;//忙碌标志位,,将BF位定义为P0.7引脚
//----------------------------------------------------------------------------------