请教前辈,我的LCD屏怎么不显示,这样的程序可行吗?

[复制链接]
2743|6
 楼主| gmgmgm 发表于 2008-12-29 10:34 | 显示全部楼层 |阅读模式
<br />我用ATC89C52的P1端口直接驱动LCD屏,刚买LCD屏,这个屏装在学习板上没问题,可我直接用P1端口做,弄了很程序没有调试成功,不知道什么原因,请大哥指点一下.
 楼主| gmgmgm 发表于 2008-12-29 10:37 | 显示全部楼层

请教前辈,我的LCD屏怎么不显示,这样的程序可行吗?

这是程序,请稳中有降位大哥指点一下,有错误吗?<br /><br />#include&nbsp;&ltreg52.h&gt<br />#include&nbsp;&ltabsacc.h&gt<br />#include&nbsp;&ltintrins.h&gt<br /><br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />#define&nbsp;uint&nbsp;unsigned&nbsp;int<br /><br />sbit&nbsp;SW1=P0^3;<br />sbit&nbsp;SW2=P2^3;<br />sbit&nbsp;RS=P2^5;<br />sbit&nbsp;E=P2^4;<br /><br />void&nbsp;delay_us(int&nbsp;time);<br />void&nbsp;delay_ms(unsigned&nbsp;int&nbsp;time);<br />void&nbsp;LCD_com(unsigned&nbsp;char&nbsp;com);<br />void&nbsp;LCD_data(unsigned&nbsp;char&nbsp;number)&nbsp;;<br />void&nbsp;LCD_clear(void);<br />void&nbsp;LCD_init(void)&nbsp;;<br /><br /><br /><br />//微秒级延时程序晶振8MHZ<br />void&nbsp;delay_us(int&nbsp;time)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(time&gt1);<br />}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//毫秒级延时程序晶振8MHZ&nbsp;<br />void&nbsp;delay_ms(unsigned&nbsp;int&nbsp;time)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(time!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_us(1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />//显示屏命令写入函数<br />void&nbsp;LCD_com(unsigned&nbsp;char&nbsp;com)&nbsp;<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;RS=1;&nbsp;E=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;P1&nbsp;=&nbsp;com;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;//RS=1;<br /><br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_ms(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;E=0;RS=0;<br />&nbsp;&nbsp;}<br /><br />//显示屏命令写入函数<br />void&nbsp;LCD_data(unsigned&nbsp;char&nbsp;number)&nbsp;<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RS=1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;P1&nbsp;=&nbsp;number;<br />&nbsp;&nbsp;&nbsp;&nbsp;E=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(200);<br />&nbsp;&nbsp;&nbsp;&nbsp;E=0;<br />}<br /><br />//显示屏清空显示<br />void&nbsp;LCD_clear(void)&nbsp;<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_com(0x01);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_ms(5);<br />}<br />//显示屏初始化函数<br />void&nbsp;LCD_init(void)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//I/O口方向设置<br />//&nbsp;&nbsp;&nbsp;&nbsp;DDRD&nbsp;|=&nbsp;(1&nbsp;&lt&lt&nbsp;PD3)&nbsp;|&nbsp;(1&nbsp;&lt&lt&nbsp;PD4)&nbsp;|&nbsp;(1&nbsp;&lt&lt&nbsp;PD6);<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_com(0x38);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示模式设置<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_ms(10);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_com(0x38);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_ms(10);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_com(0x38);<br />&nbsp;&nbsp;&nbsp;delay_ms(10);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_com(0x38);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_ms(10);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_com(0x38);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示关闭<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_ms(10);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_com(0x0e);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示清屏<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_ms(10);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_com(0x06);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示光标移动设置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_ms(10);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_com(0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示开及光标设置<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_ms(100);<br />}<br /><br />
xwj 发表于 2008-12-29 10:41 | 显示全部楼层

写要先准备数据和RS,再置高E

  
 楼主| gmgmgm 发表于 2008-12-29 10:48 | 显示全部楼层

我这样的写入命令可以吗?

//显示屏命令写入函数<br />void&nbsp;LCD_data(unsigned&nbsp;char&nbsp;number)&nbsp;<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RS=1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;P1&nbsp;=&nbsp;number;<br />&nbsp;&nbsp;&nbsp;&nbsp;E=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(200);<br />&nbsp;&nbsp;&nbsp;&nbsp;E=0;<br />}<br /><br />这里的P1=number;可行吗?是否要考虑P1.0~P1.7的先后顺序?
无锋 发表于 2008-12-29 20:59 | 显示全部楼层

RS有问题,你的写指令与数据都是RS=1

  
llx04 发表于 2009-1-5 23:23 | 显示全部楼层

我的写驱动1602的程序,能用的

#include&ltreg51.h&gt<br />#include&ltintrins.h&gt<br />#include&ltabsacc.h&gt<br /><br />#define&nbsp;BEEP&nbsp;XBYTE[0x8000]<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />#define&nbsp;LCD_Data&nbsp;P1<br />#define&nbsp;Busy&nbsp;0X80<br /><br />sbit&nbsp;RS=P2^2;<br />sbit&nbsp;RW=P2^1;<br />sbit&nbsp;E=P2^0;<br /><br /><br /><br />uchar&nbsp;ReadStatusLCM(void);<br />void&nbsp;delayus(uchar&nbsp;i){&nbsp;&nbsp;//延时us级<br />&nbsp;while(--i);<br />}<br /><br />//5ms延时<br />void&nbsp;Delay5ms(void)<br />&nbsp;{<br />&nbsp;&nbsp;unsigned&nbsp;int&nbsp;TempCyc&nbsp;=&nbsp;5552;<br />&nbsp;&nbsp;while(TempCyc--);<br />&nbsp;}<br /><br />void&nbsp;busy()<br />{&nbsp;LCD_Data=0XFF;<br />&nbsp;&nbsp;RS=0;<br />&nbsp;&nbsp;RW=1;<br />&nbsp;&nbsp;E=1;<br />&nbsp;&nbsp;while(LCD_Data&0X80){};<br />&nbsp;&nbsp;E=0;<br />&nbsp;&nbsp;}<br /><br /><br />void&nbsp;write_cmd(uchar&nbsp;cmd,uchar&nbsp;busyflag)<br /><br />{&nbsp;&nbsp;if(busyflag)&nbsp;busy();<br />&nbsp;&nbsp;&nbsp;RS=0;<br />&nbsp;&nbsp;&nbsp;RW=0;<br />&nbsp;&nbsp;&nbsp;LCD_Data=cmd;<br />&nbsp;&nbsp;&nbsp;E=1;<br />&nbsp;&nbsp;&nbsp;E=1;<br />&nbsp;&nbsp;&nbsp;E=0;<br />&nbsp;&nbsp;&nbsp;}<br /><br />void&nbsp;write_dat(uchar&nbsp;dat)<br />{&nbsp;<br />&nbsp;&nbsp;busy();<br />&nbsp;&nbsp;LCD_Data=dat;<br />&nbsp;&nbsp;RS=1;<br />&nbsp;&nbsp;RW=0;<br />&nbsp;&nbsp;E=1;<br />&nbsp;&nbsp;E=1;<br />&nbsp;&nbsp;E=0;<br />&nbsp;&nbsp;}<br /><br />&nbsp;void&nbsp;inti_LCD()<br />&nbsp;&nbsp;{&nbsp;&nbsp;write_cmd(0x01,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_cmd(0X3c,1);&nbsp;&nbsp;&nbsp;&nbsp;//显示模式设置&nbsp;16&nbsp;X&nbsp;2显示,8<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_cmd(0X0c,1);<br />&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;void&nbsp;displaystring(uchar&nbsp;y,uchar&nbsp;x,uchar&nbsp;*s)<br />&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;if(y==0)&nbsp;x=x|0X80;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(y==1)&nbsp;x=x|0X0C0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_cmd(x,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(*s)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_dat(*s);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />void&nbsp;main(void)<br /><br />{&nbsp;&nbsp;displaystring(0x01,0x01,&quot;LCD1602&quot;);<br />&nbsp;&nbsp;&nbsp;while(1);<br />}<br /><br />其中主程序让我改来改去,不知道有没有错!<br />那些子程序都是没问题,你拿去调用!
computer00 发表于 2009-1-5 23:31 | 显示全部楼层

俺的1602程序,也是能用的,嘿嘿...自己修改一下端口定义。

/*******************************************************<br />本程序只供学习使用,未经作者许可,不得用于其它任何用途<br /><br />LCD1602.h&nbsp;file<br /><br />Created&nbsp;by&nbsp;Computer-lov<br />Date:&nbsp;2005.12.12<br /><br />Version&nbsp;V1.0<br />Copyright(C)&nbsp;Computer-lov&nbsp;2005-2015<br />All&nbsp;rigths&nbsp;reserved<br /><br />******************************************************/<br /><br />/*---------------------------------------------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD1602.H文件&nbsp;LCD1602的一些命令定义<br />&nbsp;&nbsp;作者:Computer-lov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建日期:2004.11.12&nbsp;&nbsp;&nbsp;&nbsp;最后修改日期:2004.11.22<br />&nbsp;&nbsp;版本:1.0<br />----------------------------------------------------------------------*/<br /><br />#ifndef&nbsp;__LCD_H__<br />#define&nbsp;__LCD_H__<br /><br />#define&nbsp;LCD_GO_HOME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AC=0,光标、画面回HOME位<br /><br />//输入方式设置<br />#define&nbsp;LCD_AC_AUTO_INCREMENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x06&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据读、写操作后,AC自动增一<br />#define&nbsp;LCD_AC_AUTO_DECREASE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据读、写操作后,AC自动减一<br />#define&nbsp;LCD_MOVE_ENABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据读、写操作,画面平移<br />#define&nbsp;LCD_MOVE_DISENABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据读、写操作,画面不动<br /><br />//设置显示、光标及闪烁开、关<br />#define&nbsp;LCD_DISPLAY_ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示开<br />#define&nbsp;LCD_DISPLAY_OFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示关<br />#define&nbsp;LCD_CURSOR_ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//光标显示<br />#define&nbsp;LCD_CURSOR_OFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//光标不显示<br />#define&nbsp;LCD_CURSOR_BLINK_ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x09&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//光标闪烁<br />#define&nbsp;LCD_CURSOR_BLINK_OFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//光标不闪烁<br /><br />//光标、画面移动,不影响DDRAM<br />#define&nbsp;LCD_LEFT_MOVE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LCD显示左移一位<br />#define&nbsp;LCD_RIGHT_MOVE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x1C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LCD显示右移一位<br />#define&nbsp;LCD_CURSOR_LEFT_MOVE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//光标左移一位<br />#define&nbsp;LCD_CURSOR_RIGHT_MOVE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//光标右移一位<br /><br />//工作方式设置<br />#define&nbsp;LCD_DISPLAY_DOUBLE_LINE&nbsp;&nbsp;&nbsp;0x38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//两行显示<br />#define&nbsp;LCD_DISPLAY_SINGLE_LINE&nbsp;&nbsp;&nbsp;0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//单行显示<br /><br />void&nbsp;LCD_check_busy(void);<br />void&nbsp;LCD_cls(void);<br />void&nbsp;LCD_write_instruction(unsigned&nbsp;char);<br />void&nbsp;LCD_write_data(unsigned&nbsp;char);<br />void&nbsp;LCD_set_position(unsigned&nbsp;char);<br />void&nbsp;LCD_printc(unsigned&nbsp;char);<br />void&nbsp;LCD_prints(unsigned&nbsp;char&nbsp;*);<br />void&nbsp;LCD_initial(void);<br /><br />#endif<br /><br /><br />/*******************************************************<br />本程序只供学习使用,未经作者许可,不得用于其它任何用途<br /><br />LCD1602.C&nbsp;file<br />1602LCD&nbsp;驱动程序&nbsp;<br />P0口作为数据输出口<br /><br />Created&nbsp;by&nbsp;Computer-lov<br />Date:&nbsp;2005.12.12<br /><br />Version&nbsp;V1.1<br />Copyright(C)&nbsp;Computer-lov&nbsp;2005-2015<br />All&nbsp;rigths&nbsp;reserved<br /><br />******************************************************/<br /><br />#include&ltat89x52.h&gt<br />#include&quot;LCD1602.H&quot;<br /><br />//这些定义自己根据硬件连接修改<br />#define&nbsp;LCD_DATA&nbsp;P0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//lcd的数据<br /><br />sbit&nbsp;LCD_BUSY=LCD_DATA^7;&nbsp;&nbsp;//测试LCD忙时使用<br />sbit&nbsp;LCD_RW=P2^5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读写控制<br />sbit&nbsp;LCD_RS=P2^6;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//寄存器选择<br />sbit&nbsp;LCD_EN=P2^7;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能信号<br /><br />void&nbsp;LCD_check_busy(void)&nbsp;&nbsp;&nbsp;//检测LCD状态,看它是不是还在忙呢<br />{<br />&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;LCD_EN=0;<br />&nbsp;&nbsp;&nbsp;LCD_RS=0;<br />&nbsp;&nbsp;&nbsp;LCD_RW=1;<br />&nbsp;&nbsp;&nbsp;LCD_DATA=0xff;<br />&nbsp;&nbsp;&nbsp;LCD_EN=1;<br />&nbsp;&nbsp;&nbsp;if(!LCD_BUSY)break;<br />&nbsp;&nbsp;}<br />&nbsp;LCD_EN=0;<br />}<br /><br />void&nbsp;LCD_cls(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LCD清屏<br />{<br />&nbsp;LCD_check_busy();<br />&nbsp;LCD_RS=0;<br />&nbsp;LCD_RW=0;<br />&nbsp;LCD_EN=1;<br />&nbsp;LCD_DATA=1;<br />&nbsp;LCD_EN=0;<br />}<br /><br />void&nbsp;LCD_write_instruction(unsigned&nbsp;char&nbsp;LCD_instruction)&nbsp;&nbsp;&nbsp;//写指令到LCD<br />{<br />&nbsp;LCD_check_busy();<br />&nbsp;LCD_RS=0;<br />&nbsp;LCD_RW=0;<br />&nbsp;LCD_EN=1;<br />&nbsp;LCD_DATA=LCD_instruction;<br />&nbsp;LCD_EN=0;<br />}<br /><br />void&nbsp;LCD_write_data(unsigned&nbsp;char&nbsp;LCD_data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出一个字节数据到LCD<br />{<br />&nbsp;LCD_check_busy();<br />&nbsp;LCD_RS=1;<br />&nbsp;LCD_RW=0;<br />&nbsp;LCD_EN=1;<br />&nbsp;LCD_DATA=LCD_data;<br />&nbsp;LCD_EN=0;<br />}<br />&nbsp;<br />void&nbsp;LCD_set_position(unsigned&nbsp;char&nbsp;x)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LCD光标定位到x处<br />{<br />&nbsp;LCD_write_instruction(0x80+x);<br />}<br /><br /><br />/*<br />void&nbsp;LCD_go_home(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LCD光标归位<br />{<br />&nbsp;LCD_write_instruction(LCD_GO_HOME);<br />}<br />*/<br /><br />void&nbsp;LCD_printc(unsigned&nbsp;char&nbsp;lcd_data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出一个字符到LCD<br />{<br />&nbsp;LCD_write_data(lcd_data);<br />}<br /><br />void&nbsp;LCD_prints(unsigned&nbsp;char&nbsp;*lcd_string)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出一个字符串到LCD<br />{<br />&nbsp;unsigned&nbsp;char&nbsp;i=0;<br />&nbsp;while(lcd_string!=0x00)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;LCD_write_data(lcd_string);<br />&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;}&nbsp;<br />}<br /><br /><br />void&nbsp;LCD_initial(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化LCD<br />{<br />&nbsp;LCD_write_instruction(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);<br />&nbsp;LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_OFF);<br />&nbsp;LCD_write_instruction(LCD_DISPLAY_DOUBLE_LINE);<br />&nbsp;LCD_cls();<br />&nbsp;LCD_set_position(0x00);<br />&nbsp;LCD_cls();<br />}<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

766

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部