// project : 12864 // interface : spi interface // drive : ic:ST7565S. duty:64. bias:1/9. vop:11.5v. vdd:3.3v. // version : 01 // modified : first issue // date : 2007/04/03/ygliu //------------------------ I/O port definition -------------------- #include "reg51.h" #include "intrins.h" //#include "map.h" #define uchar unsigned char #define uint unsigned int #define port P1 sbit CS = P3^4; sbit RES = P3^3; sbit A0 = P3^2; sbit SCL = P1^6; sbit SI = P1^7; sbit pause=P2^0; sbit key1=P2^1; sbit key2=P2^2; uchar vop=0x20; void flash(uchar tt); void delay(unsigned int t); void writecommand(uchar cmd); void writedata(uchar dat); void stop(); //-----------------------------delay------------------------------// void flash(uchar tt) {while(tt--);} void delay(unsigned int t) { uchar d,j; while(t>0) { // for(d=0;d<4;d++) //for(j=0;j<1;j++); //flash(100); t--; // pause=1; // if(pause==0)stop(); } } //-----------------------------Set vop------------------------------// void stop() { flash(100); while(pause==0) { pause=1; key1=1; key2=1; if(key1==0) { flash(100); while(key1==0); flash(100); if(vop<255) {vop++; writecommand(0x81);//set gain and potentiometer writecommand(vop); } } else if(key2==0) { flash(100); while(key2==0); flash(100); if(vop>0) {vop--; writecommand(0x81);//set gain and potentiometer writecommand(vop); } } } } //----------------------------spi ----------------// //void writecommand(uchar cmd) //{ // uchar k; // // CS = 0; // RS = 0; // // for (k=0; k<8; k++) // { // cmd = cmd<<1; // SCL = 0; // SDA = CY; // SCL = 1; // } // // CS=1; //} ////----------------------------writedata------------------// //void writedata(uchar dat) //{ // uchar k; // // CS = 0; // RS = 1; // // for (k=0; k<8; k++) // { // dat = dat<<1; // SDA = CY; // SCL = 0; // SCL = 1; // } // // CS=1; //} //---------------8080------------- void writecommand(uchar cmd) { unsigned char i; CS=0; A0=0; for(i=0; i<8; i++) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SCL=0; _nop_(); _nop_(); _nop_(); _nop_(); SI=(cmd>>(7-i))&0x01; flash(20); _nop_(); _nop_(); _nop_(); SCL=1; } CS=1; A0=1; SCL=1; /* port=cmd; CS=0; RS=0; E=1; RW=0; flash(10); RW=1; CS=1; */ } void writedata(uchar dat) { unsigned char i; CS=0; A0=1; for(i=0; i<8; i++) { _nop_(); _nop_(); _nop_(); _nop_(); SCL=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SI=(dat>>(7-i))&0x01; flash(10); _nop_(); _nop_(); _nop_(); _nop_(); SCL=1; } CS=1; A0=1; SCL=1; /* port=dat; CS=0; RS=1; E=1; RW=0; flash(10); RW=1; CS=1; */ } //----------------------6800---------------- //void writecommand(uchar cmd) //{ // port=cmd; // CS=0; // RS=0; // RW=0; // E=1; // flash(10); // E=0; // CS=1; // flash(80); //} //void writedata(uchar dat) //{ // port=dat; // CS=0; // RS=1; // RW=0; // E=1; // flash(10); // E=0; // CS=1; // flash(10); //} //--------------------- ST7565S INIT--------------------// void init() { A0=1; SCL=1; CS=1; RES=1; RES=0; flash(1000); RES=1; flash(1000); //writecommand(0xaf);//dispaly on //writecommand(0x2f);//all power on // writecommand(0xaf);//dispaly on //while(1);; writecommand(0xae);//dispaly off writecommand(0x40);//dispaly off writecommand(0xa0);//set seg direct writecommand(0xc8);//set com direct writecommand(0xf8);// writecommand(0x01);// writecommand(0xA2);//set lcd bias //writecommand(0xA3);//set lcd bias writecommand(0x24);//set internal rb/ra writecommand(0x2f);//all power on writecommand(0x81);//set contrast // writecommand(32);//set contrast // writecommand(vop);// //writecommand(vop+20);// writecommand(vop+10);// writecommand(0xaf);//dispaly on } //------------Full display------------------------------// void display(uchar dat1,uchar dat2) { uchar row,col; for (row=0xb0; row<0xb9; row++) { writecommand(row);//set page address writecommand(0x10);//set column address MSB writecommand(0x00);//set column address LSB for(col=0;col<64;col++) // //for(col=0;col<32;col++) // { writedata(dat1); writedata(dat2); } } delay(50000); } void display1() { uchar row,col; for (row=0; row<8; row++) { writecommand(row+0xb0);//set page address writecommand(0x10);//set column address MSB writecommand(0x00);//set column address LSB // for(col=0;col<64;col++) // for(col=0;col<64;col++) // { writedata(0xaa); writedata(0x55); } } if((row==3)||(row=4)||(row==6)||(row=7)) delay(30000); } void display2() { uchar row,col; for (row=0; row<8; row++) { writecommand(0xb0+row);//set page address writecommand(0x10);//set column address MSB writecommand(0x00);//set column address LSB // for(col=0;col<64;col++) // for(col=0;col<64;col++) // { writedata(0x55); writedata(0xaa); } } if((row==3)||(row=4)||(row==6)||(row=7)) delay(30000); } void display3() { uchar row,col; for (row=0; row<8; row++) { writecommand(row+0xb0);//set page address writecommand(0x10);//set column address MSB writecommand(0x00);//set column address LSB // for(col=0;col<64;col++) // for(col=0;col<64;col++) // { writedata(0xff); writedata(0x00); } } if((row==3)||(row=4)||(row==6)||(row=7)) delay(30000); } void display4() { uchar row,col; for (row=0; row<8; row++) { writecommand(row+0xb0);//set page address writecommand(0x10);//set column address MSB writecommand(0x00);//set column address LSB // for(col=0;col<64;col++) // for(col=0;col<64;col++) // { writedata(0x00); writedata(0xff); } } if((row==3)||(row=4)||(row==6)||(row=7)) delay(30000); } //--------------------------Displaychar---------------// void displaychar(uchar *p) { uchar row,col,abc; for (row=0xb0; row<0xb8; row++) { writecommand(row);//set page address for (abc=0x00; abc<0xff; abc++) { //writecommand(0x10);//set column address MSB // writecommand(0x00);//set column address LSB for(col=0;col<128;col++) { writedata(*p++); } } } delay(50000); } display8() { uchar row,col; writecommand(0x08+0xb0);//set page address writecommand(0x10);//set column address MSB writecommand(0x00);//set column address LSB // for(col=0;col<64;col++) // for(col=0;col<128;col++) // { writedata(0x00); } delay(50000); writecommand(0x08+0xb0);//set page address writecommand(0x10);//set column address MSB writecommand(0x00);//set column address LSB for(col=0;col<128;col++) // { writedata(0xff); } delay(50000); } unsigned char st[]={0,1,2,3,4,32,33,34,35,58,59,60,61,77,90,102,113,125,124,123,126,127}; unsigned char in(unsigned char col) { unsigned char k; for(k=0;k>4));//set column address MSB writecommand(0x00+(col&0x0f));//set column address LSB if(in(col)) { writedata(0xff); delay(20000); } //writecommand(0x08+0xb0);//set page address writecommand(0x10+(col>>4));//set column address MSB writecommand(0x00+(col&0x0f));//set column address LSB if(in(col)) { writedata(0x00); delay(20000); } } } void clr() { unsigned char i,j; for(j=0; j<9; j++) { writecommand(j+0xb0);//set page address writecommand(0x10);//set column address MSB writecommand(0x00);//set column address LSB // for(col=0;col<64;col++) // for(i=0;i<128;i++) // { writedata(0x00); } } } //----------------------------- void main () { unsigned char i; delay(200); init(); while(1) { clr(); delay(2000); display9(); clr(); display1(); display2(); display3(); display4(); display8(); } }