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

📄 ks0070(44780) 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=1371 -->
<HTML><HEAD><TITLE>KS0070(44780) 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>文章编号:1371----加入日期:2004-4-7 </P></TD></TR>
  <TR>
    <TD width="100%">
      <P align=right><A href="javascript:self.close()">『关闭窗口』</A></P></TD></TR>
  <TR>
    <TD width="100%">
      <P align=center><B>KS0070(44780) 16x2 字符液晶屏驱动演示程序</B></P></TD></TR>
  <TR>
    <TD width="100%">
      <BLOCKQUOTE><BR>/*===================================================================<BR><BR>&nbsp;&nbsp;KS0070(44780) 
        16x2 
        字符液晶屏驱动演示程序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;晓奇<BR>&nbsp;&nbsp;=====================================================================<BR>&nbsp;&nbsp;连接线图: 
        LCM-------51&nbsp; LCM-------51&nbsp; 
        LCM--------51<BR>&nbsp;&nbsp;DB0-----P0.0&nbsp; DB4-----P0.4&nbsp; 
        RS-------P2.0<BR>&nbsp;&nbsp;DB1-----P0.1&nbsp; DB5-----P0.5&nbsp; 
        RW-------P2.1<BR>&nbsp;&nbsp;DB2-----P0.2&nbsp; DB6-----P0.6&nbsp; 
        E--------P2.7<BR>&nbsp;&nbsp;DB3-----P0.3&nbsp; DB7-----P0.7&nbsp; 
        VLCD接1K2电阻到GND<BR>&nbsp;&nbsp;<BR>[注]:AT89C51的晶振频率为12MHz<BR>====================================================================*/<BR><BR><BR>/*<BR><BR>改写的4bit&nbsp;&nbsp;模拟总线方式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mu<BR>MCU 
        90S8515<BR>连线&nbsp; &nbsp;&nbsp;<BR>PORTA0&nbsp; 
        &nbsp;&nbsp;RS<BR>PORTA1 &nbsp;&nbsp;RW<BR>PORTA2 
        &nbsp;&nbsp;E<BR>PORTC7&nbsp;&nbsp;&nbsp;&nbsp;D7<BR>PORTC6&nbsp;&nbsp;&nbsp;&nbsp;D6<BR>PORTC5&nbsp;&nbsp;&nbsp;&nbsp;D5<BR>PORTC4&nbsp;&nbsp;&nbsp;&nbsp;D4<BR>*/<BR><BR>#include 
        &lt;IO8515v.h&gt;<BR><BR><BR>//变量类型标识的宏定义,大家都喜欢这么做<BR>#define Uchar 
        unsigned char<BR>#define Uint unsigned int<BR><BR>// 
        控制引脚定义,不同的连接必须修改的部分<BR><BR>#define CTLPORT PORTA<BR>#define 
        LCD_RS&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// pin-0 on 
        CTLPORT<BR>#define 
        LCD_RW&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// pin-1 on 
        CTLPORT<BR>#define 
        LCD_E&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 
        pin-2 on CTLPORT<BR><BR>#define 
        SET_LCD_E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTLPORT|=(1&lt;&lt;LCD_E)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 
        LCD: E = 1<BR>#define 
        CLR_LCD_E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTLPORT&amp;=~(1&lt;&lt;LCD_E)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 
        LCD: E = 0<BR>#define 
        SET_LCD_RW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTLPORT|=(1&lt;&lt;LCD_RW)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 
        LCD: R/W = 1 (read)<BR>#define 
        CLR_LCD_RW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTLPORT&amp;=~(1&lt;&lt;LCD_RW)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 
        LCD: R/W = 0 (write)<BR>#define 
        SET_LCD_RS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTLPORT|=(1&lt;&lt;LCD_RS)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 
        LCD: R/S = 1 (data reg)<BR>#define 
        CLR_LCD_RS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTLPORT&amp;=~(1&lt;&lt;LCD_RS)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 
        LCD: R/S = 0 (status reg)<BR><BR>#define DataPortOUT&nbsp; PORTC // 
        数据端口<BR>#define&nbsp;&nbsp;DataPortIN PINC<BR>#define 
        DataPortfx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DDRC<BR>#define Busy 
        0x80<BR><BR><BR>char exampl[]="HELLO WORLD\n";<BR><BR>void 
        Delay400Ms(void);<BR>void Delay5Ms(void);<BR>void WaitForEnable( 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&nbsp;&nbsp;*ptr);<BR><BR>//测试主程序<BR>void 
        main(void)<BR>{<BR>Uchar 
        temp;<BR>DDRA=0XFF;<BR>DDRC=0XFF;<BR>Delay400Ms();<BR><BR>LcdReset();<BR>temp 
        = 32;<BR>ePutstr(0,0,exampl); // 
        上面一行显示一个预定字符串<BR><BR>Delay400Ms();<BR>Delay400Ms();<BR>Delay400Ms();<BR>Delay400Ms();<BR>Delay400Ms();<BR>Delay400Ms();<BR>Delay400Ms();<BR>Delay400Ms();<BR><BR>while(1)<BR>{<BR>temp 
        &amp;= 0x7f; // 只显示ASCII字<BR>符<BR>if (temp&lt;32)temp=32; // 
        屏蔽控制字符,不予显示<BR>Display( temp++ 
        );<BR>Delay400Ms();<BR>}<BR>}<BR><BR>/*=======================================================<BR>显示字符串<BR>=======================================================*/<BR>void 
        ePutstr(Uchar x,Uchar y, Uchar&nbsp;&nbsp;*ptr)<BR>{<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 == 8 ){<BR>x = 0; y ^= 
        1;<BR>}<BR>}<BR>}<BR><BR>/*=======================================================<BR>演示一行连续字符串,配合上位程序演示移动字串<BR>=======================================================*/<BR>void 
        Display( Uchar dd ) <BR>{<BR><BR>Uchar i;<BR><BR>for 
        (i=0;i&lt;8;i++)<BR>{<BR>DispOneChar(i,1,dd++);<BR>dd &amp;= 0x7f;<BR>if 
        (dd&lt;32) 
        dd=32;<BR>}<BR>}<BR><BR>/*=======================================================<BR>显示光标定位<BR>=======================================================*/<BR>void 
        LocateXY( char posx,char posy) <BR>{<BR><BR>Uchar temp;<BR><BR>temp = 
        posx &amp; 0xf;<BR>posy &amp;= 0x1;<BR>if ( posy )temp |= 0x40;<BR>temp 
        |= 
        0x80;<BR>LcdWriteCommand(temp,0);<BR>}<BR><BR>/*=======================================================<BR>按指定位置显示数出一个字符<BR>=======================================================*/<BR>void 
        DispOneChar(Uchar x,Uchar y,Uchar Wdata)<BR>{<BR><BR>LocateXY( x, y ); 
        // 定位显示地址<BR>LcdWriteData( Wdata ); // 
        写字符<BR>}<BR><BR>/*=======================================================<BR>初始化程序, 
        必须按照产品资料介绍的初始化过程进行<BR>=======================================================*/<BR>void 
        LcdReset( void ) <BR>{<BR><BR>&nbsp;&nbsp;&nbsp; LcdWriteCommand( 0x38, 
        0); // 显示模式设置<BR>(不检测忙信号)<BR>Delay5Ms();<BR>LcdWriteCommand( 0x38, 0); 
        // 共三次<BR>Delay5Ms();<BR>LcdWriteCommand( 0x38, 
        0);<BR>Delay5Ms();<BR><BR>LcdWriteCommand( 0x28, 1); // 
        显示模式设置<BR>(以后均检测忙信号)<BR>&nbsp;&nbsp;&nbsp;&nbsp; LcdWriteCommand( 0x08, 
        1); // 显示关闭<BR>&nbsp;&nbsp;&nbsp; LcdWriteCommand( 0x01, 1); // 
        显示清屏<BR>LcdWriteCommand( 0x06, 1); // 显示光标移动<BR>设置<BR>LcdWriteCommand( 
        0x0c, 1); // 
        显示开及光标<BR>设置<BR>}<BR><BR>/*=======================================================<BR>写控制字符子程序: 
        E=1 RS=0 
        RW=0<BR>=======================================================*/<BR>void 
        LcdWriteCommand( Uchar CMD,Uchar AttribC ) <BR>{<BR><BR><BR>if (AttribC) 
        WaitForEnable(); // 检<BR>测忙信号?<BR><BR>CLR_LCD_RS; 
        <BR>CLR_LCD_RW;<BR>asm("nop");<BR>DataPortOUT = CMD;<BR>asm("nop"); // 
        送<BR>控制字子程序<BR>SET_LCD_E;<BR>asm("nop");<BR>asm("nop");<BR>CLR_LCD_E;<BR>asm("nop"); 
        <BR>DataPortOUT = CMD &lt;&lt; 4;<BR>asm("nop");<BR>asm("nop"); // 
        送<BR>控制字子程序<BR>SET_LCD_E;<BR>asm("nop");<BR>asm("nop");<BR>CLR_LCD_E;<BR>}<BR><BR>/*=======================================================<BR>当前位置写字符子程序: 
        E =1 RS=1 
        RW=0<BR>=======================================================*/<BR>void 
        LcdWriteData( char dataW )<BR>{<BR><BR>WaitForEnable(); <BR>// 
        检测忙信号<BR><BR>SET_LCD_RS; <BR>CLR_LCD_RW<BR>asm("nop"); 
        <BR><BR>DataPortOUT = dataW; <BR>asm("nop"); <BR>SET_LCD_E; 
        <BR>asm("nop");<BR>asm("nop");<BR>CLR_LCD_E; // 操作允许脉冲信号<BR>asm("nop"); 
        <BR><BR>DataPortOUT = dataW&lt;&lt;4; <BR>asm("nop"); <BR>SET_LCD_E; 
        <BR>asm("nop");<BR>asm("nop");<BR>CLR_LCD_E; // 
        操作允许脉冲信号<BR><BR>}<BR><BR>/*=======================================================<BR>正常读写操作之前必须检测LCD控制器状态: 
        CS=1 RS=0 RW=1<BR>DB7:&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;LCD控制器空闲; 
        1&nbsp;&nbsp;LCD控制器忙<BR>========================================================*/<BR>void 
        WaitForEnable( void )<BR>{<BR>DDRC=0X00;<BR>CLR_LCD_RS; 
        <BR>SET_LCD_RW;<BR>asm("nop");<BR><BR><BR><BR>SET_LCD_E; 
        <BR>asm("nop");<BR>asm("nop");<BR><BR>while( DataPortIN &amp; Busy 
        );<BR>CLR_LCD_E;<BR><BR>SET_LCD_E; 
        <BR>asm("nop");<BR>asm("nop");<BR>CLR_LCD_E;<BR><BR>DataPortfx=0xff;<BR><BR>} 
        <BR><BR><BR>// 短延时<BR>void Delay5Ms(void)<BR>{<BR>Uint i = 
        25552;<BR>while(i--);<BR>}<BR><BR>//长延时<BR>void 
        Delay400Ms(void)<BR>{<BR>Uchar i = 40;<BR>Uint 
        j;<BR>while(i--)<BR>{<BR>j=7269;<BR>while(j--);<BR>};<BR>}<BR><BR><BR><BR>(文章推荐人:思雨) 
        <BR><BR></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 + -