int cs1=0;
int reset=1;
int rs=2;
int sclk=3;
int sid=4;//sid 就是 SDA,串行数据信号
void setup()
{
pinMode(cs1, OUTPUT);
pinMode(reset, OUTPUT);
pinMode(rs, OUTPUT);
pinMode(sclk, OUTPUT);
pinMode(sid,OUTPUT);
}
unsigned char graphic1[]={
/*-- 调入了一幅图像:d:\My Documents\My Pictures\多字.bmp --*/
/*-- 宽度 x 高度=128x64 --*/
/*-- 文字: 喂 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
};
void Transfer_data(int data1);
void Transfer_command(int data1);
void Delay(int i);
void Delay1(int i);
void DisplayGraphic1();
void Initial_Lcd();
void clear_screen();
//===============main program===================
void loop()
{
int i,j,k;
Initial_Lcd();
while(1)
{
clear_screen(); //clear all dots
delay(100);
DisplayGraphic1(); //display a picture of 128*64 dots ;
}
}
//============initial
void Initial_Lcd()
{
digitalWrite (reset,LOW); //Reset the chip when reset=0
Delay(50);
digitalWrite ( reset,HIGH);
Delay(50);
Transfer_command(0xe2); /*软复位*/
Transfer_command(0x2c); /*升压步聚 1*/
Transfer_command(0x2e); /*升压步聚 2*/
Transfer_command(0x2f); /*升压步聚 3*/
Transfer_command(0x23); /*粗调对比度,可设置范围 20~27*/
Transfer_command(0x81); /*微调对比度*/
Transfer_command(0x28); /*微调对比度的值,可设置范围 0~63*/
Transfer_command(0xa2); /*1/9 偏压比(bias)*/
Transfer_command(0xc8); /*行扫描顺序:从上到下*/
Transfer_command(0xa0); /*列扫描顺序:从左到右*/
Transfer_command(0xaf); /*开显示*/
}
//===============clear all dot martrics=============
void clear_screen()
{
unsigned char i,j;
for(i=0;i<9;i++)
{
digitalWrite (cs1,LOW);
Transfer_command(0xb0+i);
Transfer_command(0x10);
Transfer_command(0x00);
for(j=0;j<132;j++)
{
Transfer_data(0x00);
}
}
}
//==================display a piture of 128*64 dots================
void DisplayGraphic1()
{
unsigned char *address; //define pointer
int i,j;
address=graphic1; //data pointer:point to "graphic[]",one-dimensional array
for(i=0;i<8;i++)
{
digitalWrite(cs1,LOW);
Transfer_command(0xb0+i); //set page address,
Transfer_command(0x10);
Transfer_command(0x00);
for(j=0;j<128;j++)
{
Transfer_data(*address);
address++;
}
}
}
/*=======写指令========*/
void Transfer_command(int data1)
{
char i;
digitalWrite (cs1,LOW);
digitalWrite (rs,LOW);
for(i=0;i<8;i++)
{
digitalWrite(sclk,LOW);
if(data1&0x80)digitalWrite(sid,HIGH);
else digitalWrite(sid,LOW);
Delay1(2);
digitalWrite (sclk,HIGH);
Delay1(2);
data1=data1<<=1;
}
}
/*--------写数据------------*/
void Transfer_data(int data1)
{
char i;
digitalWrite(cs1,LOW);
digitalWrite( rs,HIGH);
for(i=0;i<8;i++)
{
digitalWrite (sclk,LOW);
if(data1&0x80) digitalWrite(sid,HIGH);
else digitalWrite(sid,LOW);
digitalWrite (sclk,HIGH);
data1=data1<<=1;
}
}
/*=========延时=====================*/
void Delay(int i)
{
int j,k;
for(j=0;j<i;j++)
for(k=0;k<990;k++);
}
/*=========延时=====================*/
void Delay1(int i)
{
int j,k;
for(j=0;j<i;j++)
for(k=0;k<10;k++);
}
; |