[ZLG-ARM] 菜鸟求助:LPC2132控制1602显示

[复制链接]
2806|0
 楼主| chenzx520 发表于 2008-8-25 15:33 | 显示全部楼层 |阅读模式
本人刚学ARM,水平很菜,最近一直在调2132控制LCD1602显示。但是1602一直没字符显示。通上电,下载程序进去之后,一直就是显示一排黑点。着急!希望哪位大哥能指点!程序如下:(这个程序能在51板子上显示,我现在是把它移植到LPC2132上):<br />#include&quot;LPC21XX.H&quot;<br />#include&quot;config.h&quot;<br />#include&quot;GPIOCTRL.H&quot;<br />#include&quot;LCD1602.H&quot;<br />int&nbsp;&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;Text1[]=&quot;Nice&nbsp;to&nbsp;See&nbsp;You!&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;Text2[]=&quot;QQ:34088177&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(P1_25,GPIO_Mode_OUTPUT);&nbsp;&nbsp;&nbsp;//依次为DB0到DB7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(P1_16,GPIO_Mode_OUTPUT);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(P0_3,GPIO_Mode_OUTPUT);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(P0_31,GPIO_Mode_OUTPUT);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(P0_19,GPIO_Mode_OUTPUT);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(P0_0,GPIO_Mode_OUTPUT);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(P0_2,GPIO_Mode_OUTPUT);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(P0_1,GPIO_Mode_OUTPUT);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(LCD_RS,GPIO_Mode_OUTPUT);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(LCD_RW,GPIO_Mode_OUTPUT);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(LCD_EN,GPIO_Mode_OUTPUT);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_SetPointion(0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_PrintString(Text1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_SetPointion(0x40);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_PrintString(Text2);<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />LCD1602.c文件程序如下:<br />#include&quot;LPC21XX.H&quot;<br />#include&quot;config.h&quot;<br />#include&quot;LCD1602.h&quot;<br />#include&quot;GPIOCTRL.h&quot;<br /><br />static&nbsp;const&nbsp;&nbsp;INT32U&nbsp;LCD_Data_IO[8]={P1_25,P1_16,P0_3,P0_31,P0_19,P0_0,P0_2,P0_1};<br /><br />void&nbsp;Delayms(INT32U&nbsp;count)&nbsp;&nbsp;&nbsp;&nbsp;//Delayms(400)约6ms,Delayms(1000)约为15ms<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT32U&nbsp;&nbsp;i,j;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltcount;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt200;j++);<br />}&nbsp;<br /><br />void&nbsp;Delayus(INT8U&nbsp;i)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(i--);&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;LCD_IO_Data(INT8U&nbsp;&nbsp;data)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((data&gt&gti)&0x01)<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetHigh(LCD_Data_IO);<br />&nbsp;&nbsp;&nbsp;&nbsp;&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;else<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetLow(LCD_Data_IO);<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;Delay_Check(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(LCD_BUSY,GPIO_Mode_INPUT);&nbsp;&nbsp;&nbsp;&nbsp;/***把DB7设置为输入模式****/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetLow(LCD_RS);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetHigh(LCD_RW);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetLow(LCD_EN);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delayus(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetHigh(LCD_EN);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while(IO0PIN&LCD_BUSY);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_Set(LCD_BUSY,GPIO_Mode_OUTPUT);&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br />void&nbsp;&nbsp;LCD_WriteCommand(INT8U&nbsp;cmd)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetLow(LCD_RS);<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetLow(LCD_RW);<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetLow(LCD_EN);<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay_Check();<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_IO_Data(cmd);<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetHigh(LCD_EN);<br />}<br /><br />void&nbsp;LCD_Write_Data(INT8U&nbsp;data)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetHigh(LCD_RS);<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetLow(LCD_RW);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetLow(LCD_EN);<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay_Check();<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_IO_Data(data);<br />&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetHigh(LCD_EN);<br />}<br /><br />void&nbsp;LCD_Init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Delayms(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_WriteCommand(0x38);&nbsp;&nbsp;&nbsp;&nbsp;//设置显示模式:8位2行5x7点阵<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_WriteCommand(0x08);&nbsp;&nbsp;&nbsp;&nbsp;//****关闭显示********/<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_WriteCommand(0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清屏并光标复位<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_WriteCommand(0x06);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//文字不动,光标自动右移&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_WriteCommand(0x0f);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示器开、光标关、光标禁止闪烁<br /><br />}<br /><br />void&nbsp;LCD_SetPointion(INT8U&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_WriteCommand(x|0x80);<br />}<br /><br />void&nbsp;LCD_PrintChar(INT8U&nbsp;lcd_data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出一个字符到LCD<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_Write_Data(lcd_data);<br />}<br /><br />void&nbsp;LCD_PrintString(INT8U&nbsp;*lcd_string)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出一个字符串到LCD<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT8U&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(lcd_string!='\0')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_Write_Data(lcd_string);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><br />}&nbsp;&nbsp;&nbsp;&nbsp;<br />其中类似这些函数是借鉴别人的,一直都是能用,没问题<br />GPIOx_Set(LCD_RS,GPIO_Mode_OUTPUT);&nbsp;<br />GPIOx_PinSetHigh(LCD_Data_IO);&nbsp;&nbsp;&nbsp;&nbsp;GPIOx_PinSetLow(LCD_Data_IO);<br />其中LCD1602的DB0到DB7和2132的IO脚不是按顺序来连着的,&nbsp;所以我用了一个数组把这些IO脚放在一起,在用移位来进行写数据和命令。希望哪位大哥帮我看看,小弟感激不尽!&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

12

帖子

0

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