悬赏
2
分 芯积分未解决
proteus用lpc1343与160l液晶调试,液晶一直没有正确显示,请求助
最好把程序发上来
如果连接没问题,应该是程序的问题
#include "LPC13xx.h" /* LPC13xx Peripheral Registers */
#include "lcd016.h"
//延时函数
void delay()
{
unsigned int i=5552;
while(--i);
}
void delay_nms(int i)
{
i=i+10;
while(i--);
}
//检查LCD是否忙
int LCD_busy()
{
/* int flag;
GPIOSetValue( 2, 0, 0 ); //写命令
GPIOSetValue( 2, 1,1 ); //读选择端
GPIOSetValue( 2, 2, 1 ); //E使能
GPIOSetDir( 2, 11, 0 );
delay_nms(100);
if((LPC_GPIO2->DATA&(1<<11)))
//if(LCD_BF==1) //数据满
flag=1; //标志位置1
else
flag=0;
GPIOSetDir( 2, 11, 1 );
GPIOSetValue( 2, 2, 0 ); //E使能
return flag;*/
unsigned int i=10000;
while(--i);
}
//写命令
/*void LCD_write_cmdata(unsigned char cmdata)
{
int i;
// while(LCD_busy()); //等待空闲
GPIOSetValue( 2, 2, 0);
GPIOSetValue( 2, 0, 0 );
GPIOSetValue( 2, 1, 0 );
delay_nms(1);
for(i=0;i<8;i++)
{
if(cmdata&0x01)
{
GPIOSetValue( 2, 4+i, 1 );
}
else
GPIOSetValue( 2, 4+i, 0 );
cmdata= cmdata>>0x01;
}
GPIOSetValue( 2, 2, 1);
delay_nms(2);
GPIOSetValue( 2, 2, 0);
GPIOSetValue( 2, 2, 1);
}
//写数据
void LCD_write_wodata(unsigned char wodata)
{
int i;
// while(LCD_busy()); //等待空闲
GPIOSetValue( 2, 0, 1 ); //写数据
GPIOSetValue( 2, 1, 0);
GPIOSetValue( 2, 2, 0);
delay_nms(1);
for(i=0;i<8;i++)
{
if(wodata&0x01)
{
GPIOSetValue( 2, 4+i, 1 );
}
else
GPIOSetValue( 2, 4+i, 0 );
wodata= wodata>>0x01;
}
GPIOSetValue( 2, 2, 1);
delay_nms(1);
GPIOSetValue( 2, 2, 0);
delay_nms(1);
GPIOSetValue( 2, 2, 1);
} */
//LCD初始化
void LCD_write_cmdata(unsigned char cmdata)
{
int i;
LCD_busy(); //等待空闲
// GPIOSetValue( 2, 2, 0);
LPC_GPIO2->DATA&=(~(0x001<<2));
// GPIOSetValue( 2, 0, 0 );
LPC_GPIO2->DATA&=(~(0x001));
// GPIOSetValue( 2, 1, 0 );
LPC_GPIO2->DATA&=(~(0x001<<1));
delay_nms(1);
/* for(i=0;i<8;i++)
{
if(cmdata&0x01)
{
GPIOSetValue( 2, 4+i, 1 );
}
else
GPIOSetValue( 2, 4+i, 0 );
cmdata= cmdata>>0x01;
}*/
LPC_GPIO2->DATA&=(0x00f);
LPC_GPIO2->DATA|=(cmdata<<4);
//GPIOSetValue( 2, 2, 1);
LPC_GPIO2->DATA|=(0x01<<2);
delay_nms(2);
//GPIOSetValue( 2, 2, 0);
LPC_GPIO2->DATA&=(~(0x001<<2));
// GPIOSetValue( 2, 2, 1);
LPC_GPIO2->DATA|=(0x01<<2);
}
//写数据
void LCD_write_wodata(unsigned char wodata)
{
int i;
LCD_busy();
// GPIOSetValue( 2, 2, 0);
LPC_GPIO2->DATA&=(~(0x001<<2));
// GPIOSetValue( 2, 0, 1 );
LPC_GPIO2->DATA|=((0x001));
// GPIOSetValue( 2, 1, 0 );
LPC_GPIO2->DATA&=(~(0x001<<1));
delay_nms(1);
LPC_GPIO2->DATA&=(0x00f);
LPC_GPIO2->DATA|=(wodata<<4);
//GPIOSetValue( 2, 2, 1);
delay_nms(2);
LPC_GPIO2->DATA|=(0x01<<2);
delay_nms(2);
//GPIOSetValue( 2, 2, 0);
LPC_GPIO2->DATA&=(~(0x001<<2));
// GPIOSetValue( 2, 2, 1);
LPC_GPIO2->DATA|=(0x001<<2);
}
void LCD_Init()
{
LCD_write_cmdata(0x38); //显示设置
delay_nms(6);
LCD_write_cmdata(0x0e); //显示开关与光标设置
delay_nms(6);
LCD_write_cmdata(0x03);
delay_nms(6);
LCD_write_cmdata(0x06);
delay_nms(6);
LCD_write_cmdata(0x1f);
delay_nms(6);
LCD_write_cmdata(0x01);
delay_nms(6);
}