//犯的错:在51里RW(L命令、H数据)是直接焊成接地的
//∴ 少了lcd_enable(); 这一函数{lcdrs = 0; lcdrw = 0; lcden = 0; delay(5); lcden = 1;}
//少了这一函数设置就无法显示了
#define PIC //说明,如果是51,你把这句删掉即可
#define ww //说明,如果是PIC16F877A,你把这句删掉即可
#ifdef ww
#include
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit lcdrw=P3^0; //这是个无用的定义,因为51板直接接地,而PIC则不是
sbit dula=P2^6;
sbit wela=P2^7;
#endif
#ifdef PIC
#include
__CONFIG(0X3B31);
#define lcden RA3
#define lcdrs RA5
#define lcdrw RA4
#define P0 PORTD
#endif
#define uchar unsigned char
#define uint unsigned int
#ifdef ww
uchar code table[]=" hello! jasper"; //写字符串时用“”而不是{ }了
uchar code table1[]=" xm.dabiao ";
#endif
#ifdef PIC
//奇怪了,移动下面2行会提示,逗号错误
const uchar table[]=" hello! jasper"; //写字符串时用“”而不是{ }了
const uchar table1[]=" xm.dabiao "; //PIC的数组写法与51的是不同的
#endif
uchar num;
void delay(uint z) //延时
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
// delay(5);
lcdrs=1;
lcdrw=0;
lcden=0;
delay(5);
lcden=1;
}
void lcd_enable(void)
{
lcdrs = 0;
lcdrw = 0;
lcden = 0;
delay(5);
lcden = 1;
}
void init()
{
#ifdef ww
dula=0;
wela=0;
lcden=0;
#endif
#ifdef PIC
TRISA=0x00;PORTA=0XF0;
TRISD=0x00;PORTD=0XFF;
ADCON1=0X07;
RA1=1;
#endif
lcd_enable();
write_com(0x38);
lcd_enable();
write_com(0x0c);
lcd_enable();
write_com(0x06);
lcd_enable();
write_com(0x01);
lcd_enable();
// write_com(0x80);
write_com(0x80+0x10);
}
void main()
{
init();
for(num=0;num<16;num++)
{
write_data(table[num]);
delay(20);
}
write_com(0x80+0x51);
for(num=0;num<16;num++)
{
write_data(table1[num]);
delay(20);
}
for(num=0;num<16;num++)
{
write_com(0x18);
delay(160);
}
while(1);
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』