#include sbit p12=P1^2; sbit p14=P1^4; sbit p00=P0^0; sbit p01=P0^1; sbit p36=P3^6; sbit p37=P3^7; code const unsigned short int Lattice_YU[32]={0x04,0x00,0x04,0x00,0x0F,0xE0,0x10,0x40, 0x20,0x88,0x7F,0xFC,0xA1,0x08,0x21,0x08, 0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8, 0x20,0x08,0x00,0x04,0xFF,0xFE,0x00,0x00}; //鱼 void LDataWrite(unsigned short int LData) { data unsigned short int i; data unsigned short int d; i=LData; P3=0xC0; //WR,RD为1,其余为0。 P0=0xFF; //P0口为数据口,初始化。 p12=1; //C/D控制口。 p37=0; //读信号有效 d=P0; if((d&0x03)==0x03) //P0口读出的状态字看LCD的读写是否有效P0.0为1是读有效,P0.1为1是写有效,P0.3为1是自动写有效。 { p12=0;    //写入数据 p36=0; P0=i; p12=1; p36=1; } else (void)LDataWrite(i); } void LCodeWrite(unsigned short int LCode) { data unsigned short int i; data unsigned short int c; i=LCode; P3=0xC0; P0=0xFF; p12=1; p37=0; c=P0; if((c&0x03)==0x03) {p12=1; //写入指令 p36=0; P0=i; p12=1; p36=1; } else (void)LCodeWrite(i); } /*void ContinueWrite(unsigned short int LCode,unsigned short int m,unsigned short int n) 连续写函数 { data unsigned short int i; data unsigned short int c; data unsigned short int l; data unsigned short int k; l=m; k=n; i=LCode; P3=0xC0; P0=0xFF; p12=1; p37=0; c=P0; if((c&0x07)==0x07) { for(l;l--;l>0) for(k;k--;k>0) { p12=0; p36=0; P0=i; p12=1; p36=1; } } else (void)ContinueWrite(i,l,k); } */ void LCD_C()   //LCD初始化文本区首地址,文本区宽度,显示开关设置,光标形状,显示方式,图形区首地址,图形区宽度 { unsigned short int c; unsigned short int m; unsigned short int n; LDataWrite(0); LDataWrite(0); LCodeWrite(0x24); //LCodeWrite(0xB0); // ContinueWrite(0x00,0x01,0x02); // LCodeWrite(0xB2); //qk xs RAM cunchuqu //SP=0x60; p14=1; LDataWrite(0); LDataWrite(0); LCodeWrite(0x40); LDataWrite(0x20); LDataWrite(0x00); LCodeWrite(0x41); LCodeWrite(0x9C); LCodeWrite(0xA7); LCodeWrite(0x80); LDataWrite(0x00); LDataWrite(0x08); LCodeWrite(0x42); LDataWrite(0x20); LDataWrite(0x00); LCodeWrite(0x43); } void mPutChar(short int x,short int y,short int *Data,short int m) //可连续显示m个汉字 { //输出图形点阵,先左右后上下 short int i,j,k; short int Pointer; Pointer=(y<<4)+(x<<1)+0x0100; //纵坐标乘以16,横坐标乘以2 for(k=0;k