//犯的错:在51里RW(L命令、H数据)是直接焊成接地的
//∴ 少了lcd_enable(); 这一函数{lcdrs = 0; lcdrw = 0; lcden = 0; delay(5); lcden = 1;}
//少了这一函数设置就无法显示了
#define PIC
#ifdef ww
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]=" hello! jasper"; //写字符串时用“”而不是{ }了
uchar code table1[]=" xm.dabiao ";
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
#endif
#ifdef PIC
#include <pic.h>
__CONFIG(0X3B31);
#define uchar unsigned char
#define uint unsigned int
//奇怪了,移动下面2行会提示,逗号错误
const uchar table[]=" hello! jasper"; //写字符串时用“”而不是{ }了
const uchar table1[]=" xm.dabiao "; //PIC的数组写法与51的是不同的
#define lcden RA3
#define lcdrs RA5
#define lcdrw RA4
#define P0 PORTD
#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;
#ifdef PIC
lcdrw=0; //写成1就什么也显示不了,在51里它是直接接地的
#endif
lcden=0;
delay(5);
lcden=1;
}
void lcd_enable(void) //LCD显示设置
{
lcdrs = 0; //该字节数据L为命令,H高为数据
#ifdef PIC
lcdrw = 0; //此次操作为写,而不是读
#endif
lcden = 0; //拉低使能信号
delay(5); //保持使能信号为低一段时间
lcden = 1; //拉高使能信号,建立LCD操作所需要的上升沿
}
void init()
{
#ifdef ww
dula=0; //初始化,关断数码管
wela=0;
lcden=0;
write_com(0x38); //显示模式设定,0X38即阐述了此液晶为16X2显示,是5X7点阵
write_com(0x0e); //开显示不显光标,光标不闪烁
write_com(0x06); //当前为加一模式且整屏不左移
write_com(0x01); //之后还要刷新一次
// write_com(0x80);
write_com(0x80+0x10); //表示这是从第一行开始写,因为要整屏移动所以要加0x10
#endif
#ifdef PIC
TRISA=0x00;PORTA=0XF0;
TRISD=0x00;PORTD=0XFF;
ADCON1=0X07; //设置A口为普通IO口
RA1=1;
lcd_enable(); //该字节数据为命令,而不是数据.少了这一行就显示不了
write_com(0x38); //显示模式设定,0X38即阐述了此液晶为16X2显示,是5X7点阵
lcd_enable(); //该字节数据为命令,而不是数据.少了这一行就显示不了
write_com(0x0e); //开显示不显光标,光标不闪烁
lcd_enable(); //该字节数据为命令,而不是数据.少了这一行就显示不了
write_com(0x06); //当前为加一模式且整屏不左移
lcd_enable(); //该字节数据为命令,而不是数据.少了这一行就显示不了
write_com(0x01); //之后还要刷新一次
lcd_enable(); //该字节数据为命令,而不是数据.少了这一行就显示不了
// write_com(0x80);
write_com(0x80+0x10); //表示这是从第一行开始写,因为要整屏移动所以要加0x10
#endif
}
void doio(void)
{
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); //由code控制位 表算得18,整屏左移
delay(160);
}
while(1);
}
void main()
{
init();
doio();
}