📄 lcd3.h
字号:
/*****************************************************/
/*---- 1602驱动程序 ----*/
/*---- my1602.h ----*/
/*---- 2008_04_10 ----*/
/*****************************************************/
#ifndef LCM_MY1602_H
#define LCM_MY1602_H
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*---------数据口、端口定义------------*/
sbit RS=P2^6; //数据、命令端
sbit RW=P2^5; //读、写选择
sbit EN=P2^4; //使能端
#define Dataport P1 //数据输入输出口
#define Busy 0x80 //忙检测
/*----------------函数声明-------------*/
void lcm_delay(uint k);
void lcm_init(void);
void lcm_write_command(uchar command,uchar wait);
void lcm_write_data(uchar char_data);
void lcm_wait(void);
void display_char(uchar X,uchar Y,uchar char_data);
void display_string(uchar X,uchar Y,uchar str[]);
void display_stringyd(uchar X,uchar Y,uchar str[]);
/*----------延时1ms,11.0592MHz晶振--------*/
void delay_1ms(void)
{
uint i;
for(i=1;i<(uint)((11.0592*143-2)/12); ++i);
}
/*------------------延时K*ms--------------*/
void lcm_delay(uint k)
{
uint i;
for(i=0;i<k;i++)
delay_1ms();
}
/**********液晶初始化**********/
void lcm_init(void)
{
Dataport=0;
lcm_delay(15);
lcm_write_command(0x38,0);//三次显示模式设置
lcm_delay(5);
lcm_write_command(0x38,0);
lcm_delay(5);
lcm_write_command(0x38,0);
lcm_delay(5);
lcm_write_command(0x38,1);//8bit数据传送,2行显示,5*7字型
lcm_write_command(0x08,1);//显示关闭
lcm_write_command(0x01,1);//显示清屏
lcm_write_command(0x06,1);//显示光标右移设置
lcm_write_command(0x0c,1);//显示屏打开,光标不显示,不闪烁
}
/***************液晶内部等待*******************/
void lcm_wait(void)
{
Dataport=0xff;
EN=1;
RS=0;
RW=1;
_nop_();
while(Dataport&Busy)
{
EN=0;
_nop_();
_nop_();
EN=1;
_nop_();
_nop_();
}
EN=0;
}
/**********写指令函数**********/
void lcm_write_command(uchar command,uchar wait)
{
if(wait)lcm_wait();
Dataport=command;
RS=0; // 选中指令寄存器
RW=0; // 写模式
EN=1;
_nop_();
_nop_();
_nop_();
EN=0;
}
/***************写数据函数*****************/
void lcm_write_data(uchar char_data)
{
lcm_wait( ); //检测忙信号
Dataport=char_data;
RS=1; // 选中数据寄存器
RW=0; // 写模式
EN=1;
_nop_();
_nop_();
_nop_();
EN=0;
}
/**************字符显示函数**************/
void display_char(uchar X,uchar Y,uchar char_data)
{
X&=1;
Y&=15;
if(X)Y|=0x40; //若y为1(显示第二行),地址码+0X40
Y|=0x80; //指令码为地址码+0X80
lcm_write_command(Y,0);
lcm_write_data(char_data);
}
/***************字符串显示函数******************/
void display_string(uchar X,uchar Y,uchar str[])
{
uchar i=0;
X&=0x01;
Y&=0x0f;
while(Y>=0&&Y<16&&str[i]!='\0')
{
display_char(X,Y,str[i]);
i++;
Y++;
}
}
void display_string_yd(uchar X,uchar Y,uchar str[])
{
uchar i=0;
X&=0x01;
Y&=0x0f;
while(Y>=0&&Y<16&&str[i]!='\0')
{
display_char(X,Y,str[i]);
lcm_delay(200);
i++;
Y++;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -