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

📄 16x2字符液晶屏驱动演示程序总线方式.htm

📁 一个各种液晶的C程序库,并且比较标准可读的,供大家参考 12232液晶显示程序在sed1520.rar 122x32液晶显示程序,显示图形及汉字.rar 122x32液晶显示程序显示图形及
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0037)http://www.mcu51.com/list.asp?id=1486 -->
<HTML><HEAD><TITLE>16x2 字符液晶屏驱动演示程序总线方式</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<style>
.small {
	FONT-SIZE: 9pt
}
.smallh20 {
	FONT-SIZE: 12px; LINE-HEIGHT: 20pt
}
.smallh15 {
	FONT-SIZE: 12px; LINE-HEIGHT: 15pt
}
.medium {
	FONT-SIZE: 14px
}
.mediumh15 {
	FONT-SIZE: 14px; LINE-HEIGHT: 15pt
}
.mediumh20 {
	FONT-SIZE: 14px; LINE-HEIGHT: 20pt
}
.big {
	FONT-SIZE: 16px
}
A {
	COLOR: #003399
}
A:link {
	COLOR: #003399
}
A:active {
	COLOR: #cc0000
}
A:visited {
	COLOR: #666666
}
A:hover {
	COLOR: #cc0000
}
TD {
	FONT-SIZE: 12px
}
BODY {
	MARGIN-TOP: 5pt
}
</style>
<META content="MSHTML 6.00.2800.1226" name=GENERATOR></HEAD>
<BODY>
<DIV align=center>
<CENTER></CENTER></DIV>
<DIV align=center>
<CENTER>
    <TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width="97%" 
borderColorLight=#000000 border=1>
      <TBODY>
        <TR> 
          <TD width="100%" bgcolor="#d0d0d0"> <P align=center>KS0070(44780) 16x2 
              字符液晶屏驱动演示程序总线方式</P></TD>
        </TR>
        <TR> 
          <TD width="100%"> <BLOCKQUOTE><BR>
              /*===========================================================================
              <p> KS0070(44780) 16x2 字符液晶屏驱动演示程序总线方式 晓奇<br>
                =============================================================================<br>
                连接线图: LCM-------51 LCM-------51 LCM--------51<br>
                DB0-----P0.0 DB4-----P0.4 RW-------P2.0<br>
                DB1-----P0.1 DB5-----P0.5 RC-------P2.1<br>
                DB2-----P0.2 DB6-----P0.6 E--------P2.7 =&gt;74ls00+wr+rd<br>
                DB3-----P0.3 DB7-----P0.7 VLCD接1K2电阻到GND</p>
              <p>[注]:AT89C51的晶振频率为12MHz<br>
                ============================================================================*/<br>
                //#pragma src <br>
                // 产生汇编文件<br>
                #include &lt;reg51.h&gt;<br>
                #include&lt;intrins.h&gt;</p>
              <p>//========= 变量类型标识的宏定义,大家都喜欢这么做 ==============<br>
                #define Uchar unsigned char<br>
                #define Uint unsigned int</p>
              <p>// ================= LCM1602A端口地址定义 =======================<br>
                char xdata Lcd1602CmdPort _at_ 0x7cff; //E=1 RS=0 RW=0<br>
                char xdata Lcd1602WdataPort _at_ 0x7eff; //E =1 RS=1 RW=0<br>
                char xdata Lcd1602StatusPort _at_ 0x7dff; //CS=1 RS=0 RW=1</p>
              <p>#define Busy 0x80 <br>
                // 忙判别位</p>
              <p><br>
                code char exampl[]=&quot;For an example. - By xiaoqi\n&quot;;</p>
              <p>void Delay400Ms(void);<br>
                void Delay5Ms(void);<br>
                void LcdWriteData( char dataW );<br>
                void LcdWriteCommand( Uchar CMD,Uchar AttribC );<br>
                void LcdReset( void );<br>
                void Display( Uchar dd );<br>
                void DispOneChar(Uchar x,Uchar y,Uchar Wdata);<br>
                void ePutstr(Uchar x,Uchar y, Uchar code *ptr);</p>
              <p>//================ 随便写几句测试主程序 ================<br>
                void main(void)<br>
                {<br>
                Uchar temp;<br>
                <br>
                Delay400Ms(); // 启动时必须的延时,<br>
                等待lcm进入工作状态</p>
              <p> LcdReset(); // 这也是必需<br>
                的....初始化<br>
                temp = 32;<br>
                ePutstr(0,0,exampl); // 上面一行显示一个预定字符串</p>
              <p> Delay400Ms(); // 保留显示内容<br>
                Delay400Ms();<br>
                Delay400Ms();<br>
                Delay400Ms();<br>
                Delay400Ms();<br>
                Delay400Ms();<br>
                Delay400Ms();<br>
                Delay400Ms();</p>
              <p> while(1)<br>
                {<br>
                temp &amp;= 0x7f; // 只显示ASCII字符</p>
              <p> if (temp&lt;32)temp=32; // 屏蔽控制字符,不予显示<br>
                Display( temp++ );<br>
                <br>
                Delay400Ms();<br>
                }<br>
                }</p>
              <p>/*=======================================================<br>
                显示字符串<br>
                =======================================================*/<br>
                void ePutstr(Uchar x,Uchar y, Uchar code *ptr) {<br>
                Uchar i,l=0;<br>
                while (ptr[l] &gt;31){l++;};<br>
                for (i=0;i&lt;l;i++) {<br>
                DispOneChar(x++,y,ptr[i]);<br>
                if ( x == 16 ){<br>
                x = 0; y ^= 1;<br>
                }<br>
                }<br>
                }</p>
              <p>/*=======================================================<br>
                演示一行连续字符串,配合上位程序演示移动字串<br>
                =======================================================*/<br>
                void Display( Uchar dd ) {</p>
              <p>Uchar i;<br>
                <br>
                for (i=0;i&lt;16;i++) {</p>
              <p> DispOneChar(i,1,dd++);<br>
                <br>
                dd &amp;= 0x7f;<br>
                if (dd&lt;32) dd=32;<br>
                }<br>
                }</p>
              <p>/*=======================================================<br>
                显示光标定位<br>
                =======================================================*/<br>
                void LocateXY( char posx,char posy) {</p>
              <p>Uchar temp;</p>
              <p> temp = posx &amp; 0xf;<br>
                posy &amp;= 0x1;<br>
                if ( posy )temp |= 0x40;<br>
                temp |= 0x80;<br>
                LcdWriteCommand(temp,0);<br>
                }</p>
              <p>/*=======================================================<br>
                按指定位置显示数出一个字符<br>
                =======================================================*/<br>
                void DispOneChar(Uchar x,Uchar y,Uchar Wdata) {</p>
              <p> LocateXY( x, y ); // 定位显示地址<br>
                LcdWriteData( Wdata ); // 写字符<br>
                }</p>
              <p>/*=======================================================<br>
                初始化程序, 必须按照产品资料介绍的初始化过程进行<br>
                =======================================================*/<br>
                void LcdReset( void ) {</p>
              <p> LcdWriteCommand( 0x38, 0); // 显示模式设置(不检<br>
                测忙信号)<br>
                Delay5Ms();<br>
                LcdWriteCommand( 0x38, 0); // 共三次<br>
                Delay5Ms();<br>
                LcdWriteCommand( 0x38, 0);<br>
                Delay5Ms();</p>
              <p> LcdWriteCommand( 0x38, 1); // 显示模式设置(以后<br>
                均检测忙信号)<br>
                LcdWriteCommand( 0x08, 1); // 显示关闭<br>
                LcdWriteCommand( 0x01, 1); // 显示清屏<br>
                LcdWriteCommand( 0x06, 1); // 显示光标移动设置<br>
                LcdWriteCommand( 0x0c, 1); // 显示开及光标设置<br>
                }</p>
              <p>/*=======================================================<br>
                写控制字符子程序: E=1 RS=0 RW=0<br>
                =======================================================*/<br>
                void LcdWriteCommand( Uchar CMD,Uchar AttribC ) {</p>
              <p> if (AttribC) while( Lcd1602StatusPort &amp; Busy ); // 检测忙<br>
                信号?<br>
                Lcd1602CmdPort = CMD;<br>
                }<br>
                <br>
                /*=======================================================<br>
                当前位置写字符子程序: E =1 RS=1 RW=0<br>
                =======================================================*/<br>
                void LcdWriteData( char dataW ) {</p>
              <p> while( Lcd1602StatusPort &amp; Busy ); <br>
                // 检测忙信号<br>
                Lcd1602WdataPort = dataW;<br>
                }</p>
              <p>// 短延时<br>
                void Delay5Ms(void)<br>
                {<br>
                Uint i = 5552;<br>
                while(i--);<br>
                }</p>
              <p>//长延时<br>
                void Delay400Ms(void)<br>
                {<br>
                Uchar i = 5;<br>
                Uint j;<br>
                while(i--)<br>
                {<br>
                j=7269;<br>
                while(j--);<br>
                };<br>
                }<br>
              </p>
            </BLOCKQUOTE></TD>
        </TR>
        <TR> 
          <TD width="100%"> <P align=center> </P></TD>
        </TR>
      </TBODY>
    </TABLE>
</CENTER></DIV></BODY></HTML>

⌨️ 快捷键说明

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