这是我的,但是是用c写的。
/* ks0066 series lcm driver */
/* mcu xtal freq. 12.000mhz */
/* for 0802, 1602, 2002 etc.*/
#include <at89x52.h>
#include <string.h>
#define lcd_rs p3_0 /* switch register: command/data */
#define lcd_rw p3_1 /* switch mode:!write/read */
#define lcd_en p3_4 /* lcd operation enable */
#define lcd_bled p3_7 /* lcd backlight */
#define lcd_data p1 /* the port connected to lcm */
#define lcd_clear 0x01
#define max_x 0x10 /* x letters */
#define max_y 0x02 /* y letters */
#define uchar unsigned char
#define uint unsigned int
/* s declaration about lcd driver */
void delay5ms(void);
void delay400ms(void);
void lcd_wrtcmd(uchar command, busy_c);
void init_lcd(void);
uchar get_lcd_status(void);
void lcd_wrtdata(uchar data);
void putcharxy(uchar x,uchar y,unsigned disp_data);
void outtextxy(uchar x,uchar y,uchar *disp_data);
/* main */
void main(void)
{
uchar i;
delay400ms();
init_lcd();
outtextxy(0,0,"hello");
outtextxy(0,1,"world!");
while(1);
}
void init_lcd(void)
{
lcd_data=0;
lcd_wrtcmd(0x38,0); /* two lines, 5x7 font style, no cursors, no blink */
delay5ms();
lcd_wrtcmd(0x38,0);
delay5ms();
lcd_wrtcmd(0x38,0);
delay5ms();
lcd_wrtcmd(0x38,1);
lcd_wrtcmd(0x80,1);
lcd_wrtcmd(lcd_clear,1);
lcd_wrtcmd(0x06,1);
lcd_wrtcmd(0x0c,1);
}
uchar get_lcd_status(void)
{
lcd_data=0xff;
lcd_en=0;
lcd_en=0;
lcd_rw=1;
lcd_rs=0;
lcd_en=1;
while(lcd_data & 0x80);
lcd_en=0;
return lcd_data;
}
void lcd_wrtdata(uchar data)
{
lcd_en=0;
get_lcd_status();
lcd_data=data;
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
lcd_en=0;
lcd_en=1;
lcd_en=1;
lcd_en=0;
}
void lcd_wrtcmd(uchar command, busy_c)
{
lcd_en=0;
if(busy_c) get_lcd_status();
lcd_data=command;
lcd_rs=0;
lcd_rw=0;
lcd_en=0;
lcd_en=0;
lcd_en=1;
lcd_en=1;
lcd_en=0;
}
void putcharxy(uchar x,uchar y,unsigned disp_data)
{
y=y&(max_y-1);
x=x&(max_x-1);
if(y) x+=0x40;
x+=0x80;
lcd_wrtcmd(x,1);
lcd_wrtdata(disp_data);
}
void outtextxy(uchar x,uchar y,uchar *disp_data)
{
uchar char_length,j;
char_length=strlen(disp_data);
y=y&(max_y-1);
x=x&(max_x-1);
for (j=0;j<char_length;j++)
{
putcharxy(x,y,disp_data[j]);
x++;
}
}
void delay5ms(void) { uint i=6025;while(i--); }
void delay400ms(void)
{
uchar i=5; uint j;
while(i--){ j=7888; while(j--); }
}