⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd1602.c

📁 最常用的LCD1602的C语言驱动,可实现单个字符和字符串显示.驱动MCU为ATMEGA162,编译环境:iccavr6.31.
💻 C
字号:
//**********************************
//*名称: LCD1602显示驱动程序
//*硬件: ATMEGA162,16MHz
//*      MCU --- LCD
//*       PA --- DATA
//*      PB0 --- RS
//*      PB1 --- RW
//*      PB2 --- E
//*编译: ICCAVR6.31
//*版本: 2007-V1.0
//**********************************

#include <iom162v.h>
#include <lcd1602.h>

//**********************************
//*          主函数
//**********************************
void main(void)
{
  unsigned char j;
  SPL=0XFF;                          // 堆栈初始化
  SPH=0X04;
  Lcd1602_init();
  Lcd1602_display_string(0,0,"    LCD-1602    MICRODESIGN 2007");
  while(1)
  {
  }
}

//**********************************
//*    LCD1602硬件接口初始化
//**********************************
void Lcd1602_io_init(void)
{
  LCD_DATA_DIR=0XFF;
  LCD_DATA_PORT=0X00;               // 数据端口设置为输出,初始值为0
  LCD_CN_DIR=0XFF;                  // 控制端口设置为输出
  LCD_CN_PORT&=~(1<<LCD_CS);        // LCD片选E=0,不选中
  LCD_CN_PORT&=~(1<<LCD_RS);        // LCD数据类型RS=0,指令模式
  LCD_CN_PORT&=~(1<<LCD_RW);        // LCD数据读写R/W=0,写模式
  asm("nop");
}

//**********************************
//*    LCD1602初始化
//**********************************
void Lcd1602_init(void)
{
  Lcd1602_io_init();                // 硬件接口初始化
  Delay_us(15000);                  // 延时15ms
  Lcd1602_wr_cmd(0x38);             // 功能设置,8位,2行,5X7字体
  Lcd1602_wr_cmd(0x08);             // 显示关闭
  Lcd1602_wr_cmd(0x01);             // 清屏
  Delay_us(3000);
  Lcd1602_wr_cmd(0x0C);             // 显示打开
  Lcd1602_wr_cmd(0x06);             // 光标移动设置
}

//**********************************
//*    LCD1602显示一个字符
//*    x,y表示第几个,在第几行
//*    data要显示字符的ASCII码 
//**********************************
void Lcd1602_display_char(unsigned char x,unsigned char y,unsigned data)
{
  if(y==0)
    {
	 x&=0x0F;                       // 确保X不超出16
	 Lcd1602_wr_cmd(x|0x80);        // 写入地址指令
	 Lcd1602_wr_data(data);         // 写入字符数据
	}
  else if(y==1)
    {
	 x&=0x0F;                       // 确保X不超出16
	 x+=0x40;                       // 第二行显示地址对应在0x40开始
	 Lcd1602_wr_cmd(x|0x80);        // 写入地址指令
	 Lcd1602_wr_data(data);         // 写入字符数据
	}
}

//**********************************
//*    LCD1602显示字符串
//*    x,y表示第几个,在第几行开始
//*    data要显示字符的ASCII码 
//**********************************
void Lcd1602_display_string(unsigned char x,unsigned char y,unsigned char *data)
{  
   unsigned char counter;
   counter=x;                       // 显示位置指针,用于自动换行
   if(y==0)
    {
	 x&=0x0F;                       // 确保X不超出16
	 Lcd1602_wr_cmd(x|0x80);        // 写入地址指令
	}
  else if(y==1)
    {
	 x&=0x0F;                       // 确保X不超出16
	 x+=0x40;                       // 第二行显示地址对应在0x40开始
	 Lcd1602_wr_cmd(x|0x80);        // 写入地址指令
	}
  while(*data)
    { 
	 if( (y==0)&(counter==16) )     // 判断是否要换行
	 {
	  Lcd1602_wr_cmd(0xC0);         // 写入地址指令
	 }
     Lcd1602_wr_data(*data);        // 写入字符数据
	 data++;
	 counter++;
	}
}

//**********************************
//*    LCD1602写命令
//**********************************
void Lcd1602_wr_cmd(unsigned char data)
{
  LCD_DATA_PORT=data;               // 将命令数据写入
  LCD_CN_PORT&=~(1<<LCD_RS);        // LCD片选RS=0,指令模式
  LCD_CN_PORT&=~(1<<LCD_RW);        // LCD数据读写R/W=0,写模式
  LCD_CN_PORT|=(1<<LCD_CS);         // LCD片选E=1,选中
  asm("nop");
  asm("nop");
  LCD_CN_PORT&=~(1<<LCD_CS);        // LCD片选E=0,不选中
  Delay_us(200);
}

//**********************************
//*    LCD1602写数据
//**********************************
void Lcd1602_wr_data(unsigned char data)
{
  LCD_DATA_PORT=data;               // 将命令数据写入
  LCD_CN_PORT|=(1<<LCD_RS);         // LCD片选RS=1,数据模式
  LCD_CN_PORT&=~(1<<LCD_RW);        // LCD数据读写R/W=0,写模式
  LCD_CN_PORT|=(1<<LCD_CS);         // LCD片选E=1,选中
  asm("nop");
  asm("nop");
  LCD_CN_PORT&=~(1<<LCD_CS);        // LCD片选E=0,不选中
  Delay_us(200);
}

//**********************************
//*    us级延时函数
//**********************************
void Delay_us(unsigned int time)
{
  unsigned int i;
  for(i=0;i<time;++i)
  {
   asm("nop");
   asm("nop");
  }
}







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -