EDN首页   博客首页

日志档案

发表于 2008-1-12 22:50:29

2

标签: LCD1602驱动函数  

LCD1602驱动函数

/***************************************
LCD OCMC2X16A驱动模块
****************************************/
#include<reg52.h>
#define uchar unsigned char

#define LCD
#define LCD_DB P1  //LCD数据线pin7~14
sbit LCD_WR=P3^1; //读写控制线pin5
sbit LCD_RS=P3^2; //数据指令控制线pin4
sbit LCD_E=P3^0; //使能端pin6
//查忙函数
void busy(void)

 LCD_RS=0;
 LCD_WR=1;
 LCD_E=1;
 LCD_E=1;
 LCD_E=1;
#ifdef LCD
 while(LCD_DB&0x80);
#endif
 LCD_E=0;
}
//读AC函数
/*uchar rd_ac(void)

 uchar ac;
 LCD_RS=0;
 LCD_WR=1;
 LCD_E=1;
 LCD_E=1;
 LCD_E=1;
 ac=LCD_DB&0x7f;
 LCD_E=0;
 return ac;
}*/
//写指令函数
void w_com(char com)
{  
 busy();
 LCD_RS=0;
 LCD_WR=0;
 LCD_DB=com;
 LCD_E=1;
 LCD_E=0;
 LCD_DB=0XFF;
}
//写数据函数
void w_dat(uchar dat)
{  busy();
 LCD_RS=1;
 LCD_WR=0;
 LCD_DB=dat;
 LCD_E=1;
 LCD_E=0;
 LCD_DB=0XFF;
}
//定位函数
void LCD_gotoxy(char x,char y)
{ uchar code line[]={0x80,0xc0}; //行首地址
 w_com(line[x]+y);
}
//显示一个字符串
void LCD_puts(char *s)
{
 while(*s!='\0')
  {
  w_dat(*s++);
  }
}
//自定义字符
void def_char(void)
{ uchar code ch[]=
 {
 0x00,0x0E,0x11,0x11,0x11,0x0A,0x1B,0x00,  //1.欧姆符号
 0x00,0x04,0x04,0x1F,0x04,0x04,0x1F,0x00   //2.正负号
 };
 uchar i;
 w_com(0x48);  //设置CGRAM地址
 for(i=0;i<sizeof(ch);i++)
  {
  w_dat(ch[i]);
  }
 w_com(0x80);
}
//初始化函数
void LCD_init(void)
{
  unsigned i;
 for(i=0;i<2000;i++);
 w_com(0x38); //8位数据总线,2行显示模式,5*7点阵
 def_char();  //自定义字符
 w_com(0x06); //AC自动加1,显示不移位
 w_com(0x0c); //开显示,不显示光标
 w_com(0x01);
 LCD_gotoxy(0,2);
 LCD_puts("OCM2X16A LCD."); 
 for(i=0;i<50000;i++);
 w_com(0x01); //清屏
}

系统分类: 单片机   |   用户分类: 单片机   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(383)    回复(1)  

投一票您将和博主都有获奖机会!

最新评论

  • redgui

    2008-3-29 11:52:48

    驱动程序,是不是连到那款单片机都能用呢