c55连接AMPIRE12864硬件连接图如下
驱动程序如下
所有的函数实现效果注释中有
如果硬件连接图不一样的话建议更改 ce wr rs cs1 cs2 LcdData的值。
#pragma large
#include"reg52.h"
#define uchar unsigned char
sbit ce=P3^4;
sbit wr=P3^6;
sbit rs=P3^5;
sbit cs1=P3^3;
sbit cs2=P3^7;
sfr LcdData=0x90;//检测LCD标志位
void checkLcd(){uchar a;do{LcdData=0xff;rs=0;wr=1;ce=1;ce=0;a=LcdData;a=a&0x80;if(a==0x00)break;}while(1);
}//向LCD发送一个无参数命令
void writeCmd(uchar cmd){checkLcd();rs=0;wr=0;LcdData=cmd;ce=1;ce=0;
}//向lcd写一个一字节的数据
void writeShowData(uchar showData){checkLcd();rs=1;wr=0;LcdData=showData;ce=1;ce=0;
}//初始化LCD页地址
void setLcdX(uchar x){writeCmd(0xb8|x);
}
//初始化LCD列地址
void setLcdY(uchar y){writeCmd(0x40|y);
}//初始化LCD
void initLcd(){cs1=0;cs2=0;writeCmd(0x3e);writeCmd(0xb8);writeCmd(0xc0);writeCmd(0x40);writeCmd(0x3f);
}//将二维数组写入LCD12864当中 LcdData_1为LcdData_1[8][128]
void writeData(){uchar i,j;for(i=0;i<8;i++){for(j=0;j<128;j++){if(j==0){cs1=0;cs2=1;setLcdY();}if(j==64){cs1=1;cs2=0;setLcdY();}setLcdX(i);writeShowData(0x0f);}}
}//画一个点
void writePoint(uchar x,uchar y,uchar LcdShowData){if(y>=64){cs1=1;cs2=0;}if(y<64){cs1=0;cs2=1;}setLcdX(x);setLcdY(y);writeShowData(LcdShowData);
}