我最近在学习使用液晶显示,先选了比较简单的lcd1602.程序编译已经成功了,但烧进板子之后却没什么反应了,不知道怎么回事,请大家帮我看一下啊。程序如下:p0为8位数据口, #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sfr p0=0x80; sfr p2=0xA0; sbit EN1602=p2^5; sbit RS1602=p2^7; sbit RW1602=p2^6;
char code str1[]="Welcom!"; void delay_10us(uchar n) {do {_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }while(--n); } void delay_ms(uint n) {do {delay_10us(131); }while(--n); } bit lcd1602_test() /*忙测试 {uchar status; p0=0xff; RS1602=0; RW1602=1; EN1602=1; _nop_(); status=p0; _nop_(); EN1602=0; return status&0x80; } void lcd1602_wr_cmd(uchar cmd,bit test) /*写命令 {if(test) while(lcd1602_test()); RS1602=0; RW1602=0; p0=cmd; EN1602=1; _nop_(); EN1602=0; } void lcd1602_wr_dat(uchar dat) /*写数据 {while(lcd1602_test()); RS1602=1; RW1602=0; p0=dat; EN1602=1; _nop_(); EN1602=0; } void lcd1602_xy(uchar x,uchar y) /*定位 {uchar ramaddr=y*0x40+x; lcd1602_wr_cmd(ramaddr|0x80,1); }
void lcd1602_wr_str1(uchar *ptr,uchar n) /*写n个字符 {uchar i; for(i=0;i<n;i++) lcd1602_wr_dat(*ptr++); }
void main() { EN1602=1; delay_ms(200); EN1602=0; lcd1602_wr_cmd(0x38,0); /*初始化 delay_ms(5); lcd1602_wr_cmd(0x38,0); delay_ms(5); lcd1602_wr_cmd(0x38,0); delay_ms(5); lcd1602_wr_cmd(0x08,1); lcd1602_wr_cmd(0x01,1); lcd1602_wr_cmd(0x06,1); lcd1602_wr_cmd(0x0c,1); while(1) {lcd1602_wr_cmd(0x01,1); lcd1602_xy(0,0); /*从第一行第一列开始写welcom lcd1602_wr_str1(str1,8); } }
|