/***********************端口/引脚定义区域************************/
#define LCDRS 9 //LCD1602数据/命令选择端口
#define LCDRW 10 //LCD1602读写控制端口
#define LCDEN 11 //LCD1602使能信号端口
#define LCDDATA PORTD //LCD1602数据端口PORTD的 D0至D7
/***********************用户自定义数据区域***********************/
char table1[]="== Arduino ==";//LCD1602显示字符串数组1
char table2[]="****************";//LCD1602显示字符串数组2
/*************************函数声明区域***************************/
void LCD1602_Write(int cmdordata,int writetype);//写入液晶模组命令或数据
void LCD1602_init();//LCD1602初始化函数
void LCD1602_DIS();//显示字符函数
/**************************主函数区域****************************/
void setup() {
// put your setup code here, to run once:
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
digitalWrite(LCDRW, LOW);//LCDRW 低电平为 写入模式
PORTD=0XFF;
LCD1602_init(); //LCD1602初始化
LCD1602_DIS(); //显示字符
}
void loop() {
// put your main code here, to run repeatedly:
}
/****************************************************************/
//LCD1602初始化函数LCD1602_init(),无形参和返回值
/****************************************************************/
void LCD1602_init()
{
LCD1602_Write(0x28,0);//数据总线为4位,显示2行,5*7点阵/每字符
LCD1602_Write(0x0C,0);//设置开显示,不显示光标
LCD1602_Write(0x06,0);//写入新数据后显示屏整体不移动仅光标右移
LCD1602_Write(0x01,0);//写入清屏命令
}
/****************************************************************/
//显示字符函数LCD1602_DIS(),无形参和返回值
/****************************************************************/
void LCD1602_DIS()
{
int i;//定义控制循环变量i
LCD1602_Write(0x80,0);//选择第一行
for(i=0;i<16;i++)
{
LCD1602_Write(table1[i],1);//写入table1[]内容
delay(5);
}
LCD1602_Write(0xC0,0);//选择第二行
for(i=0;i<16;i++)
{
LCD1602_Write(table2[i],1);//写入table2[]内容
delay(5);
}
}
/****************************************************************/
//写入液晶模组命令或数据函数LCD1602_Write(),有形参cmdordata
//和writetype,无返回值。
/****************************************************************/
void LCD1602_Write(int cmdordata,int writetype)
{
if(writetype==0){
digitalWrite(LCDRS, LOW);
}
if(writetype==1){
digitalWrite(LCDRS, HIGH);
}
//LCDRS=writetype;
//writetype 判断写入 类型writetype=0为写命令 类型writetype=1为写数据
delay(1);
LCDDATA &= 0x0F;
//清高四位 &= 就是按位与运算 PD7-PD4 4线通讯 用的高四位,PD0-PD3未使用
LCDDATA|=cmdordata & 0xF0;
//写高四位 &= 0x0F先按位与保留高四位 然后再或
digitalWrite(LCDEN, HIGH);
delay(5);//使能置“1”
digitalWrite(LCDEN, LOW);
delay(5);//使能清“0” EN 产生一个下降沿 使数据生效
cmdordata=cmdordata << 4; //低四位移到高四位
LCDDATA &= 0x0F; //清高四位
LCDDATA |= cmdordata & 0xF0; //写cmdordata之前的低四位 至LCDDATA的高四位(& 0xF0)
digitalWrite(LCDEN, HIGH);
delay(5); //使能置“1”
digitalWrite(LCDEN, LOW);
delay(5); //使能清“0” EN 产生一个下降沿 使数据生效
}
Arduino 4线驱动 LCD1602 初级代码
于 2024-09-06 00:23:57 首次发布