开发工具:
文件大小: 8kb
下载次数: 0
上传时间: 2009-05-12
详细说明: /************************ *************************************************** 程序名称:LCD.C 程序功能:LCD1602驱动程序 ****************************************************************************/ #include #include sbit RS = P2^0; sbit RW = P 2^1; sbit E = P2^2; sbit DPORT = P0; const unsigned char NoDisp = 0; //无显示 const unsigned char NoCur = 1; //有显示无光标 const unsigned char CurNoFlash = 2; //有光标但不闪烁 const unsigned char CurFlash = 3; //有光标且闪烁 void LcdPos( unsigned char, unsigned char ); //确定光标位置 void LcdWd(unsigned char); //写字符 void LcdWc(unsigned char); //送控制字(检测忙信号) void LcdWcn(unsigned char); //送控制字子程序(不检测忙信号) void mDelay(unsigned char); //延时,毫秒数由j决定 void WaitIdle(); //正常读写操作之前检测LCD控制器状态 void SetCur(unsigned char para); //设置光标的4种状态 void WriteString(unsigned char *s, unsigned char xPos, unsigned char yPos); //向光标处写字符串 void LcdWc( unsigned char c ); //清屏 void WriteChar(unsigned char c, unsigned char xPos, unsigned char yPos); //向光标出处写字符 void RstLcd(); //LCD复位函数 /************************************************************** 函数名称:void WaitIdle() 功能:正常读写操作之前检测LCD控制器状态 **************************************************************/ void WaitIdle() { unsigned char temp; //定义临时变量 RS = 0; //RS=0输入指令,RS=1输入数据 RW = 1; //RW=1从LCD读取信息,RW=0向LCD写入指令或数据 E = 1; //E=1读取信息,E在下降沿从1到0执行指令 _nop_(); for(; ;) { temp = DPORT; temp &= 0x80; if ( temp == 0 ) //DB0--DB7全都是0 { break; } } E = 0; //执行指令 } /************************************************************** 函数名称:void mDelay(unsigned char j) 功能:延时程序,延时时间有变量j决定 **************************************************************/ void mDelay( unsigned char j ) { unsigned int i = 0; for( ; j>0; j-- ) { for (i=0; i<124; i--) {; ;} } } /************************************************************** 函数名称:void LcdWd(unsigned char c) 功能: 写字符 参数:c 待写字符 **************************************************************/ void LcdWd(unsigned char c) { WaitIdle(); //正常读写之前检测LCD控制器状态 RS = 1; //输入数据 RW = 0; //向LCD写入指令或数据,这里是写入数据 DPORT = c; //将待写字符数据送入LCD端口 E = 1; _nop_(); _nop_(); E = 0; //E的下降沿开始执行指令 } /************************************************************** 函数名称:void LcdWcn(unsigned char c ) 功能:送控制字子程序(不检测忙信号) 参数:c :控制字 **************************************************************/ void LcdWcn( unsigned char c ) { RS = 0; //输入指令 RW = 0; // 写入 DPORT = c; //送LCD端口 E = 1; _nop_(); _nop_(); E = 0; //下降沿执行指令 } /************************************************************** 函数名称:void LcdWc(unisgned char c) 功能:送控制字子程序(检测忙信号) 参数:c: 控制字 **************************************************************/ void LcdWc( unsigned char c ) { WaitIdle(); //正常读写操作之前检测LCD控制器状态 LcdWcn(c); } /************************************************************** 函数名称:void ClrLcd() 功能:清屏 **************************************************************/ void ClrLcd() { LcdWc(0x01); //调用送控制字子程序,令DB0=1,实现清屏,见手册 } /************************************************************** 函数名称:void SetCur(unsigned char para) 函数功能:设置光标 参数:para 对应四种光标类型 **************************************************************/ void SetCur(unsigned char para) { mDelay(2); switch( para ) { case 0: LcdWc(0x08); //关显示 break; case 1: LcdWc(0x0c); //开显示但无光标 break; case 2: LcdWc(0x0f); //开显示有光标但不闪烁 break; case 3: LcdWc(0x0e); //开显示有光标且闪烁 break; default: break; } /************************************************************** 函数名称:void LcdPos(unsigned char xPos, unsigned char yPos) 函数功能:设定第(xPos,yPos)个字符的地址 参数:xPos,yPos 光标所在的地址 **************************************************************/ void LcdPos( unsigned char xPos, unsigned char yPos ) { unsigned char temp; //设置临时变量 xPos &= 0x0f; //保证每行不超过16个。x位置范围是0-15 yPos &= 0x01; //y位置范围是0-1 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH ┊ if ( yPos == 0 ) //显示第一行 40H 41H 42H 43H 44H 45H 46H 47H 48H 49H 4AH 4BH 4CH 4DH 4EH 4FH ┊ temp = xPos; else temp = xPos + 0x40; temp |= 0x80; //根据手册让DB7 = 1 设定DDRAM地址 LcdWc(temp); } /************************************************************** 函数名称:void WriteChar(unsigned char c, unsigned char xPos, unsigned char yPos) 函数功能:在指定的行与列处显示指定的字符 参数:c 待显示的字符;xPos 光标所在行;yPos 光标所在列 **************************************************************/ void WriteChar(unsigned char c, unsigned char xPos, unsigned char yPos) { LcdPos(xPos, yPos); // 设定要显示字符的地址 LcdWd(c); //写字符c } /************************************************************** 函数名称:void WriteString(unsigned char *s,unsigned char xPos, unsigned char yPos) 函数功能:向坐标处写入字符串 参数:*s 指向待显示的字符串,xPos 光标所在行, yPos 光标所在列 说明:如果显示不下,则八字符串多余的截掉 **************************************************************/ void WriteString(unsigned char *s, unsigned char xPos, unsigned char yPos) { unsigned char i; if ( *s == 0 ) return; for(i=0; ; i++) { if ( *(s + i) == 0 ) break; WriteChar(*(s + i), xPos, yPos); xPos++; if ( xPos >= 15 ) break; } } /************************************************************** 函数名称:void RstLcd() 函数功能:LCD复位函数 **************************************************************/ void RstLcd() { mDelay(30); //延时 LcdWc(0x38); //现实模式:数据总线为8位,显示两行,5*7点阵每字符 LcdWc(0x08); //显示关闭,具体见手册 ClrLcd(); //显示清屏,等同与LcdWc(0x01) LcdWc(0x10); //光标光标左移1格,且AC值减1 注:此处与书不同,见手册 LcdWc(0x0c); //显示功能开,无光标 //===========================================================================================// 函数名称:void main() 函数功能:LCD1602驱动程序 //===========================================================================================// void main() { unsigned char xPos; //光标位置 unsigned char yPos; unsigned char *s = "welcome to shenyang!" xPos = 0; yPos = 0; //可以试yPos = 1的情况 RstLcd(); //复位 ClrLcd(); //清屏 SetCur( CurFlash ); //开启光标有闪烁 WriteString(s, xPos, yPos); for(; ;) {;} } ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.