共1条
1/1 1 跳转至页
LPC938控制1602液晶显示的问题???

各位好!我现在用LPC938单片机控制1602液晶显示,但为什么显示不出来,问一下,IO配置为推挽输出还是准双向口?演示用多大?代码如下,哪位大神解释下:
#include
#include
sbit rs=P1^1;
sbit rw=P2^6;
sbit e=P2^7;
sbit led=P1^0;
#define dataport P0
void delay_us(unsigned int t) //延时(t*2+5) us
{
t *= 6;
while(--t);
}
void delay_ms(unsigned int t) //延时t ms
{
while(t--)
{
delay_us(245);
delay_us(245);
}
}
void LPC938_Init(void)
{
//CLK_RESET_Init();
// UCFG1=0x40; //禁止看门狗复位、禁止掉电检测、使能P1.5复位,使用外部高频晶振12MHz
DIVM=0x00; //外部晶振作为CPU时钟,不分频
//IO_Init();
P0M1=0x00;
P0M2=0xff;
P1M1=0x2c; //P15(RST)、P12(SCL/T0)、P13(SDA/INT0)配置为输入,其他的均为准双向口
P1M2=0xd3;
P2M1=0x00;
P2M2=0xff;
}
void lcd_write_com(unsigned char com)
{
// while(lcd_check_busy()); //忙则等待
rs=0;
rw=0;
e=1;
dataport=com;
_nop_();
e=0;
}
void lcd_write_data(unsigned char dat)
{
// while(lcd_check_busy()); //忙则等待
rs=1;
rw=0;
e=1;
dataport=dat;
_nop_();
e=0;
}
void lcd_clear(void)
{
lcd_write_com(0x01);
delay_ms(5);
}
void lcd_write_char(unsigned char x,unsigned char y,unsigned char dat)
{
if (y==0)
{
lcd_write_com(0x80+x);
}
else
{
lcd_write_com(0xC0+x);
}
lcd_write_data(dat);
}
void lcd_write_string(unsigned char x,unsigned char y,unsigned char *s)
{
while(*s)
{
lcd_write_char(x,y,*s);
s++;x++;
}
}
void lcd_init(void)
{
lcd_write_com(0x38); /*显示模式设置*/
delay_ms(5);
lcd_write_com(0x38);
delay_ms(5);
lcd_write_com(0x38);
delay_ms(5);
lcd_write_com(0x38);
lcd_write_com(0x08); /*显示关闭*/
lcd_write_com(0x01); /*显示清屏*/
lcd_write_com(0x06); /*显示光标移动设置*/
delay_ms(5);
lcd_write_com(0x0C); /*显示开及光标设置*/
}
main()
{
LPC938_Init();
lcd_init();
lcd_clear();
lcd_write_string(0,1,"lcd1602");
delay_ms(500);
while(1)
{
led =~ led;
delay_ms(500);
}
}
下载时时钟配置为:高频外部晶振12MHz,使能P1^5,那位有用过的代码让我参考下!!!谢谢啦!!!
关键词: LPC938 控制 液晶显示 问题 delay u
共1条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
硬核工程师专属补给计划——填盲盒 | |
“我踩过的那些坑”主题活动——第002期 | |
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! |