Arduino 4线驱动 LCD1602 初级代码


/***********************端口/引脚定义区域************************/
#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 产生一个下降沿  使数据生效
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值