1602字符液晶模块驱动程序

[ 2325 查看 / 0 回复 ]

液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。本人以常用的2行16列液晶模块为例,编写了一个驱动程序,在应用时只需要根据硬件连接方式作适当修改,在主程序中包含其头文件即可以用几个简单的函数实现功能,实现了简化编程。//#pragma src // 产生汇编文件
#ifndef _LCD1602_H_
#define _LCD1602_H_
#include<reg52.h>
//========= 变量类型标识的宏定义,通常做法 ==============
#define Uchar unsigned char
#define Uint unsigned int
//========  定义LCD与MCU的接口,LCD数据线接P1 =============
#define LCD_DATA P1
sbit LCD_EN=P3^5;
sbit LCD_RS=P3^6;
sbit LCD_RW=P3^7;
#endif
/*------------------------------------------------
Public function prototypes  函数原型
-------------------------------------------------*/
void LCD_init(void);/*初始化*/
void LCD_cmd(Uchar cmd);/*写入控制命令*/
void LCD_string(char *s);/*写入要显示的字符串*/
void LCD_char(char str);/*写入要显示的字符*/
void setxy(char x,char y);/*设定显示位置,行x=1/2,列y=1~16的任意整数*/
void wait_until_ready(void);/*检测忙标志,忙则等待*/
void delay(void);
函数实现:
#include"LCD1602.H"
sbit bflag=ACC^7;
void delay(void)                //延时函数
  {
  #pragma asm
    nop
  #pragma endasm
  }
/*产生一个使能脉冲*/
void En_Toggle(void)
{
LCD_EN=1;
        delay();
LCD_EN=0;
        delay();
}
void LCD_init(void)
{
  LCD_cmd(0x38);/*8位数据,2行显示*/
  LCD_cmd(0x08);/*显示关闭*/
  LCD_cmd(0x01);/*清屏*/
    /*清屏和光标归位需要较长的时间*/
  LCD_cmd(0x06);/*写入数据后光标右移*/
  LCD_cmd(0x0c);/*显示开,不显示光标*/
}
void LCD_cmd(Uchar cmd)/*写入控制命令*/
{
  LCD_RS=0;
  LCD_RW=0;
  LCD_DATA=cmd;
  En_Toggle();
  wait_until_ready();
}
void LCD_char(char str)/*写入要显示的字符*/
{
  LCD_RS=1;
  LCD_RW=0;
  LCD_DATA=str;
  En_Toggle();
  wait_until_ready();
}
void setxy(char x,char y) /*设定显示位置,行x=1/2,列y=1~16的任意整数*/
{
    char temp;
    if(x==1)
  {temp=0x80+y-1;
  LCD_cmd(temp);
  }
else
  {temp=0xC0+y-1;
  LCD_cmd(temp);
  }
}
void LCD_string(char *s)
{
for(;*s!='\0';s++)LCD_char(*s);
}
void wait_until_ready(void) /*检测忙标志,忙则等待*/
{
  LCD_RS=0;
  LCD_RW=1;
  LCD_DATA=0x0ff;
  LCD_EN=1;
  delay();
  do{ACC=LCD_DATA;}while(bflag==1);
  LCD_EN=0;
}
应用实例:
#include<reg52.h>
#include"LCD1602.H"
void main(void)
{
LCD_init();
setxy(1,1);
LCD_char('V');
LCD_string("My Blog");
setxy(2,1);
LCD_string("newsword.cublog.cn");
for(;;){}
}
TOP
凌阳教育嵌入式培训