STM8 LCD液晶

思修电子工作室"祥云小王子"开发版

定义引脚

/***********************端口/引脚定义区域************************/
#define  LCDRS          PF_ODR_ODR0     //LCD1602数据/命令选择端口
#define  LCDRW          PF_ODR_ODR3     //LCD1602读写控制端口
#define  LCDEN          PF_ODR_ODR4     //LCD1602使能信号端口
#define  LCDDATA        PB_ODR          //LCD1602数据端口D0至D7

初始化

/****************************************************************/
//LCD1602初始化函数LCD1602_init(),无形参和返回值
/****************************************************************/
void LCD1602_init(void)
{
  LCD1602_Write(0x38,0);//配置16*2显示,5*7点阵,8位数据接口
  LCD1602_Write(0x0C,0);//设置开显示,不显示光标
  LCD1602_Write(0x06,0);//写字符后地址自动加1
  LCD1602_Write(0x01,0);//显示清0,数据指针清0
}

写入液晶模组命令或数据函数

void LCD1602_Write(u8 cmdordata,u8 writetype)
{
  if(writetype==0)//判断写入类型
    LCDRS=0;//写入命令信息
  else
    LCDRS=1;//写入数据信息
  LCDDATA=cmdordata;//向数据线端口写入信息
  delay(5);//延时等待稳定
  LCDEN=1;//模块使能
  delay(5);//延时等待写入
  LCDEN=0;//模块不使能
}

显示字符函数

void LCD1602_DIS(void)
{
  u8 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);
  }
}

移屏

void LCD1602_MOV(void)
{
  u8 i;
  LCD1602_Write(0x01,0);//清屏
  LCD1602_Write(0x90,0);//选择第一行的末尾(不可见)
  for(i=0;i<16;i++)
  {
      LCD1602_Write(table1[i],1);//写入table1[]内容
      delay(2);
  }
  LCD1602_Write(0xD0,0);//选择第二行的末尾(不可见)
  for(i=0;i<16;i++)
  {
      LCD1602_Write(table2[i],1);//写入table2[]内容
      delay(2);
  }
  for(i=0;i<16;i++)
  {
      LCD1602_Write(0x18,0);//循环16次逐一左移屏幕
      delay(100);
  }
}

设定地址写入字符

/****************************************************************/
//设定地址写入字符函数LCD1602_DIS_CHAR(),有形参x、y、z无返回值
//x表示1602液晶的行,y表示列地址,z表示欲写入的字符
/****************************************************************/
void LCD1602_DIS_CHAR(u8 x,u8 y,u8 z)
{
  u8 address;
  if(x==1)//若欲显示在第一行
    address=0x80+y;//第一行的行首地址+列地址
  else
    address=0xC0+y;//第二行的行首地址+列地址
  LCD1602_Write(address,0);//设定显示地址
  LCD1602_Write(z,1);//写入字符数据
}
/****************************************************************/
//组合图形显示函数LCD1602_DIS_FACE(),无形参和返回值
/****************************************************************/
void LCD1602_DIS_FACE(void)
{
  LCD1602_DIS_CHAR(1,1,'*');
  LCD1602_DIS_CHAR(2,2,'.');
  LCD1602_DIS_CHAR(1,3,'*');
  LCD1602_DIS_CHAR(1,4,'|');
  LCD1602_DIS_CHAR(2,4,'|');
  LCD1602_DIS_CHAR(1,5,'*');
  LCD1602_DIS_CHAR(2,6,'_');
  LCD1602_DIS_CHAR(1,7,'*');
  LCD1602_DIS_CHAR(1,8,'|');
  LCD1602_DIS_CHAR(2,8,'|');
  LCD1602_DIS_CHAR(1,9,'*');
  LCD1602_DIS_CHAR(2,10,'x');
  LCD1602_DIS_CHAR(1,11,'*');
  LCD1602_DIS_CHAR(1,12,'|');
  LCD1602_DIS_CHAR(2,12,'|');
  LCD1602_DIS_CHAR(1,13,'*');
  LCD1602_DIS_CHAR(2,14,'v');
  LCD1602_DIS_CHAR(1,15,'*'); 
}

你可能感兴趣的:(STM8)