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

📄 1602lcmʦ

📁 常用的单击片接口液晶模块驱动程序。里面包括了大量的各种液晶模块和单击片接口的应用例子。对入门的GGJJ极具实用参考价值。
💻
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0057)file://F:\Temporary\1602LCM液晶显示屏的驱动函数和实例.htm -->
<!-- saved from url=(0047)http://www.cdle.net/alldata/mywz/04022901_1.htm --><HTML><HEAD><TITLE>1602LCM液晶显示屏的驱动函数和实例</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1226" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff leftMargin=0 topMargin=0>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 width="80%" align=center border=1>
  <TBODY>
  <TR>
    <TD height=10>
      <DIV class=title1 align=center><FONT 
      size=2>1602LCM液晶显示屏的驱动函数和实例</FONT></DIV></TD></TR>
  <TR>
    <TD height=10>
      <DIV align=center><FONT size=2>作 者: 明浩 出 处: 磁动力工作室 <A 
      href="http://www.cdle.net/" target=_blank>http://www.cdle.net/</A> <A 
      href="mailto:pnzwzw@cdle.net">mailto:pnzwzw@cdle.net</A> (ID189)</FONT></DIV></TD></TR>
  <TR>
    <TD vAlign=top>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" align=center border=0>
        <TBODY>
        <TR vAlign=top>
          <TD class=l12r height=42>
            <DIV align=center>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD>
                  <DIV align=center><FONT size=2><IMG height=360 
                  src="1602LCM液晶显示屏的驱动函数和实例.files/04022901_1_P1.jpg" 
                  width=480><BR>实例中显示本站的网址和站长的EMail</FONT></DIV></TD></TR>
              <TR>
                <TD><FONT size=2><A 
                  href="http://www.cdle.net/wzadmin/download.asp?autoid=199" 
                  target=_blank>SMC1602A液晶显示屏资料</A> <A 
                  href="http://www.cdle.net/alldata/data/04030701_SMC1602A.pdf" 
                  target=_blank><IMG height=41 alt=点击下载PDF文件 
                  src="1602LCM液晶显示屏的驱动函数和实例.files/pdf.gif" width=30 
                  border=0></A></FONT></TD></TR>
              <TR>
                <TD><FONT 
                  size=2>/*============================================================<BR>使用1602液晶显示的实验例子 
                  明浩 
                  2004/2/27<BR>============================================================== 

                  <P>SMC1602A(16*2)模拟口线接线方式<BR>连接线图: 
                  <BR>---------------------------------------------------<BR>|LCM-----51 
                   | LCM-----51  | LCM------51 
                  |<BR>---------------------------------------------|<BR>|DB0-----P1.0 
                  | DB4-----P1.4 | RW-------P2.0 |<BR>|DB1-----P1.1 | 
                  DB5-----P1.5 | RS-------P2.1 |<BR>|DB2-----P1.2 | DB6-----P1.6 
                  | E--------P2.2 |<BR>|DB3-----P1.3 | DB7-----P1.7 | 
                  VLCD接1K电阻到GND|<BR>---------------------------------------------------</P></FONT>
                  <P></P>
                  <P><FONT 
                  size=2>[注:AT89S51使用12M晶振]<BR>=============================================================*/</FONT></P>
                  <P><FONT size=2>#define LCM_RW P2_0 //定义引脚<BR>#define LCM_RS 
                  P2_1<BR>#define LCM_E P2_2<BR>#define LCM_Data P1<BR>#define 
                  Busy 0x80 //用于检测LCM状态字中的Busy标识</FONT></P>
                  <P><FONT size=2>#include &lt;at89x51.h&gt;</FONT></P>
                  <P><FONT size=2>void WriteDataLCM(unsigned char 
                  WDLCM);<BR>void WriteCommandLCM(unsigned char 
                  WCLCM,BuysC);<BR>unsigned char ReadDataLCM(void);<BR>unsigned 
                  char ReadStatusLCM(void);<BR>void LCMInit(void);<BR>void 
                  DisplayOneChar(unsigned char X, unsigned char Y, unsigned char 
                  DData);<BR>void DisplayListChar(unsigned char X, unsigned char 
                  Y, unsigned char code *DData);<BR>void Delay5Ms(void);<BR>void 
                  Delay400Ms(void);</FONT></P>
                  <P><FONT size=2>unsigned char code cdle_net[] = 
                  {"www.cdle.net"};<BR>unsigned char code email[] = 
                  {"pnzwzw@cdle.net"};</FONT></P>
                  <P><FONT size=2>void main(void)<BR>{<BR>Delay400Ms(); 
                  //启动等待,等LCM讲入工作状态<BR>LCMInit(); //LCM初始化<BR>Delay5Ms(); 
                  //延时片刻(可不要)</FONT></P>
                  <P><FONT size=2>DisplayListChar(0, 0, 
                  cdle_net);<BR>DisplayListChar(0, 1, 
                  email);<BR>ReadDataLCM();//测试用句无意义<BR>while(1);<BR>}</FONT></P>
                  <P><FONT size=2>//写数据<BR>void WriteDataLCM(unsigned char 
                  WDLCM)<BR>{<BR>ReadStatusLCM(); //检测忙<BR>LCM_Data = 
                  WDLCM;<BR>LCM_RS = 1;<BR>LCM_RW = 0;<BR>LCM_E = 0; 
                  //若晶振速度太高可以在这后加小的延时<BR>LCM_E = 0; //延时<BR>LCM_E = 
                  1;<BR>}</FONT></P>
                  <P><FONT size=2>//写指令<BR>void WriteCommandLCM(unsigned char 
                  WCLCM,BuysC) //BuysC为0时忽略忙检测<BR>{<BR>if (BuysC) 
                  ReadStatusLCM(); //根据需要检测忙<BR>LCM_Data = WCLCM;<BR>LCM_RS = 
                  0;<BR>LCM_RW = 0; <BR>LCM_E = 0;<BR>LCM_E = 0;<BR>LCM_E = 1; 
                  <BR>}</FONT></P>
                  <P><FONT size=2>//读数据<BR>unsigned char 
                  ReadDataLCM(void)<BR>{<BR>LCM_RS = 1; <BR>LCM_RW = 1;<BR>LCM_E 
                  = 0;<BR>LCM_E = 0;<BR>LCM_E = 
                  1;<BR>return(LCM_Data);<BR>}</FONT></P>
                  <P><FONT size=2>//读状态<BR>unsigned char 
                  ReadStatusLCM(void)<BR>{<BR>LCM_Data = 0xFF; <BR>LCM_RS = 
                  0;<BR>LCM_RW = 1;<BR>LCM_E = 0;<BR>LCM_E = 0;<BR>LCM_E = 
                  1;<BR>while (LCM_Data &amp; Busy); 
                  //检测忙信号<BR>return(LCM_Data);<BR>}</FONT></P>
                  <P><FONT size=2>void LCMInit(void) //LCM初始化<BR>{<BR>LCM_Data = 
                  0;<BR>WriteCommandLCM(0x38,0); 
                  //三次显示模式设置,不检测忙信号<BR>Delay5Ms(); 
                  <BR>WriteCommandLCM(0x38,0);<BR>Delay5Ms(); 
                  <BR>WriteCommandLCM(0x38,0);<BR>Delay5Ms(); </FONT></P>
                  <P><FONT size=2>WriteCommandLCM(0x38,1); 
                  //显示模式设置,开始要求每次检测忙信号<BR>WriteCommandLCM(0x08,1); 
                  //关闭显示<BR>WriteCommandLCM(0x01,1); 
                  //显示清屏<BR>WriteCommandLCM(0x06,1); // 
                  显示光标移动设置<BR>WriteCommandLCM(0x0C,1); // 
                  显示开及光标设置<BR>}</FONT></P>
                  <P><FONT size=2>//按指定位置显示一个字符<BR>void DisplayOneChar(unsigned 
                  char X, unsigned char Y, unsigned char DData)<BR>{<BR>Y &amp;= 
                  0x1;<BR>X &amp;= 0xF; //限制X不能大于15,Y不能大于1<BR>if (Y) X |= 0x40; 
                  //当要显示第二行时地址码+0x40;<BR>X |= 0x80; 
                  //算出指令码<BR>WriteCommandLCM(X, 0); 
                  //这里不检测忙信号,发送地址码<BR>WriteDataLCM(DData);<BR>}</FONT></P>
                  <P><FONT size=2>//按指定位置显示一串字符<BR>void DisplayListChar(unsigned 
                  char X, unsigned char Y, unsigned char code 
                  *DData)<BR>{<BR>unsigned char ListLength;</FONT></P>
                  <P><FONT size=2>ListLength = 0;<BR>Y &amp;= 0x1;<BR>X &amp;= 
                  0xF; //限制X不能大于15,Y不能大于1<BR>while (DData[ListLength]&gt;0x20) 
                  //若到达字串尾则退出<BR>{<BR>if (X &lt;= 0xF) 
                  //X坐标应小于0xF<BR>{<BR>DisplayOneChar(X, Y, DData[ListLength]); 
                  //显示单个字符<BR>ListLength++;<BR>X++;<BR>}<BR>}<BR>}</FONT></P>
                  <P><FONT size=2>//5ms延时<BR>void 
                  Delay5Ms(void)<BR>{<BR>unsigned int TempCyc = 
                  5552;<BR>while(TempCyc--);<BR>}</FONT></P>
                  <P><FONT size=2>//400ms延时<BR>void 
                  Delay400Ms(void)<BR>{<BR>unsigned char TempCycA = 
                  5;<BR>unsigned int 
                  TempCycB;<BR>while(TempCycA--)<BR>{<BR>TempCycB=7269;<BR>while(TempCycB--);<BR>};<BR>}</FONT></P>
                  <P></P>
                  <P></P></TD></TR></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE>
      <DIV></DIV></TR></TBODY></DIV></BODY></HTML>

⌨️ 快捷键说明

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