📄 dgl.c
字号:
#include <reg52.h>
sbit CS=P1^0;
sbit RES=P1^1;
sbit A0=P1^2;
sbit SCL=P1^3;
sbit SI=P1^4;
unsigned char code beijing2008[192];
unsigned char code pp[350];
unsigned char code cir[200];
void Delay(unsigned int i)
{
unsigned int c;
while(i--)
{
c=1000 ;
while(c--);
}
}
void SpisendData(char c)
{
unsigned char i;
CS=0;
A0=1;
for(i=0x80;i>0;i=i>>1)
{
SCL=0;
SI=(i&c);
SCL=1;
}
CS=1;
}
void SpisendCode(char c)
{
unsigned char i;
CS=0;
A0=0;
for(i=0x80;i>0;i=i>>1)
{
SCL=0;
SI=(i&c);
SCL=1;
}
CS=1;
}
void LcdInitial()
{
RES=0;
Delay(30);
RES=1;
SpisendCode(0xae);Delay(1); //display off也是reset后默认的
SpisendCode(0xa6);Delay(1); //display normal也是reset后默认的 reverse(0xc7)
SpisendCode(0xa4);Delay(1); //full display 也是reset后默认的 xxxxxxxxxxxxxxx
SpisendCode(0xc5);Delay(1); //Common Output Status Select,default:normal(0xc4),now adverse(0xc5)
SpisendCode(0xa0);Delay(1); //Column Address Set Direction:default:normal
SpisendCode(0x66);Delay(1); //mode and dummy perial select:00,also default
SpisendData(0x00);Delay(1);
SpisendCode(0x39);Delay(1); //Gray-scale Pattern Set
SpisendData(0x43);Delay(1); //选中间色*******************32
SpisendCode(0x6d);Delay(1); //Display Line Number Set
SpisendData(0x19);Delay(1); //total 81 lines,also default,xxxxxxxxxxxxxxx
SpisendData(0x00);Delay(1); //start line
SpisendCode(0xe7);Delay(1); // MLS drive selection
SpisendData(0x0b);Delay(1); //use default
SpisendCode(0x36);Delay(1); //nline inverted:n=4,also default;
SpisendData(0x12);Delay(1);
SpisendCode(0xe5);Delay(1); //n-line Inverting Drive ON/OFF,default is off(0xe4),now is on(0xe5) xxxxxxxxx
SpisendCode(0x5f);Delay(1); //frequence select
SpisendData(0x0);Delay(1); //not the defalut,fcl=171khz,ffr=81hz,原0x08
SpisendCode(0xab);Delay(1); //os on
SpisendCode(0x2b);Delay(1); //adjust v3
SpisendData(0x07);Delay(1); //v3:9~16
SpisendCode(0x81);Delay(1); //v3 volume
SpisendData(0x43);Delay(1); //alfa=larger 00xxxxxxxxxxxxxxxxxxxxx
SpisendCode(0x4e);Delay(1); //Temperature Gradient Set :use default
SpisendData(0x00);Delay(1);
SpisendCode(0x28);Delay(1); //Thermal sensor ON/OFF:is off
SpisendCode(0xa2);Delay(1); //lcd bias
SpisendData(0x00);Delay(1); // 1/8
SpisendCode(0x25);Delay(1); //power control,mode set
SpisendData(0x04);Delay(1);
SpisendCode(0x25);Delay(1); //power control,mode set
SpisendData(0x06);Delay(1);
SpisendCode(0x25);Delay(1); //power control,mode set
SpisendData(0x07);Delay(1);
}
void ScanScreen()
{
unsigned char i,j;
SpisendCode(0xaf);Delay(1); //display on也是reset后默认的
SpisendCode(0xa0);Delay(1); //Column Address Set Direction:default:normal
SpisendCode(0x6d);Delay(1); //Display Line Number Set
SpisendData(0x13);Delay(1); //total 19page,81 lines,also default,xxxxxxxxxxxxxxx
SpisendData(0x00);Delay(1); //start line
SpisendCode(0x84);Delay(1); //display data input directon select:comlumn优先
for(i=0;i<20;i=i+4) //页的地址,共20pages,when use gray mode
{
SpisendCode(0xb1); //page address write commond
SpisendData(i);; //page address
SpisendCode(0x13); //column address write commond
SpisendData(0); //column address
for(j=0;j<208;j++) //column address
{
SpisendCode(0x1d);; //data write commond
SpisendData(0x00); //data
}
SpisendCode(0xb1); //page address write commond
SpisendData(i+1);; //page address
SpisendCode(0x13); //column address write commond
SpisendData(0); //column address
for(j=0;j<208;j++) //column address
{
SpisendCode(0x1d);; //data write commond
SpisendData(0x55); //data
}
SpisendCode(0xb1); //page address write commond
SpisendData(i+2);; //page address
SpisendCode(0x13); //column address write commond
SpisendData(0); //column address
for(j=0;j<208;j++) //column address
{
SpisendCode(0x1d);; //data write commond
SpisendData(0xaa); //data
}
SpisendCode(0xb1); //page address write commond
SpisendData(i+3);; //page address
SpisendCode(0x13); //column address write commond
SpisendData(0); //column address
for(j=0;j<208;j++) //column address
{
SpisendCode(0x1d);; //data write commond
SpisendData(0xff); //data
}
}
}
void ClearScreen()
{
unsigned char i,j;
SpisendCode(0xaf);Delay(1); //display on也是reset后默认的
SpisendCode(0xa0);Delay(1); //Column Address Set Direction:default:normal
SpisendCode(0x6d);Delay(1); //Display Line Number Set
SpisendData(0x13);Delay(1); //total 19page,81 lines,also default,xxxxxxxxxxxxxxx
SpisendData(0x00);Delay(1); //start line
SpisendCode(0x84);Delay(1); //display data input directon select:comlumn优先
for(i=0;i<20;i++) //页的地址,共20pages,when use gray mode
{
SpisendCode(0xb1); //page address write commond
SpisendData(i); //page address
SpisendCode(0x13); //column address write commond
SpisendData(0); //column address
for(j=208;j>0;j--)
{
SpisendCode(0x1d); //data write commond
SpisendData(0x00); //data
}
}
}
//
char Half_Char(char c)
{
char a1,a2,a3,a4;
//c为一个字节的第四位,扩展成一个灰度的字节
if(c&0x08)a1=3;
else a1=0;
if(c&0x04)a2=3;
else a2=0;
if(c&0x02)a3=3;
else a3=0;
if(c&0x01)a4=3;
else a4=0;
a4=(a1<<6)+(a2<<4)+(a3<<2)+a4;
return a4;
}
//=================================
char Grayhalf_Char(char c,unsigned char graymode)
{
char a1,a2,a3,a4;
//c为一个字节的第四位,扩展成一个灰度的字节
if(c&0x08)a1=graymode;
else a1=0;
if(c&0x04)a2=graymode;
else a2=0;
if(c&0x02)a3=graymode;
else a3=0;
if(c&0x01)a4=graymode;
else a4=0;
a4=(a1<<6)+(a2<<4)+(a3<<2)+a4;
return a4;
}
//===========================================
void Display_Char()
{
unsigned char i,j,temp;
SpisendCode(0xaf);Delay(1); //display on也是reset后默认的
SpisendCode(0xa0);Delay(1); //Column Address Set Direction:default:normal
SpisendCode(0x6d);Delay(1); //Display Line Number Set
SpisendData(0x13);Delay(1); //total 19page,81 lines,also default,xxxxxxxxxxxxxxx
SpisendData(0x00);Delay(1); //start line
SpisendCode(0x85);Delay(1); //display data input directon select:page优先
for(i=0;i<96;i++) //列的地址,共96列,when use gray mode
{
SpisendCode(0x13); //column address write commond
SpisendData(i); //column address
SpisendCode(0xb1); //page address write commond
SpisendData(0); //page address
for(j=0;j<2;j++) //page
{
temp=Half_Char(beijing2008[i*2+j]&0x0f);
SpisendCode(0x1d); //data write commond
SpisendData(temp); //data
// Delay(100);
temp=Half_Char((beijing2008[i*2+j]&0xf0)>>4);
SpisendCode(0x1d); //data write commond
SpisendData(temp); //data
// Delay(100);
}
}
}
/*===========================================
70宽x80高 700个字节,定位从134列~204,page0~19
**********************************************/
void Display_Pic()
{
unsigned char i,j,temp;
SpisendCode(0x85);Delay(1); //display data input directon select:page优先
for(i=0;i<70;i++) //列的地址,共96列,when use gray mode
{
SpisendCode(0x13); //column address write commond
SpisendData(134+i); //column address 从134~204
SpisendCode(0xb1); //page address write commond
SpisendData(0); //page address
for(j=0;j<5;j++) //20 page,now maybe 10page
{
temp=Half_Char(pp[i*5+j]&0x0f);
SpisendCode(0x1d); //data write commond
SpisendData(temp); //data
// Delay(100);
temp=Half_Char((pp[i*5+j]&0xf0)>>4);
SpisendCode(0x1d); //data write commond
SpisendData(temp); //data
// Delay(100);
}
}
}
/*===========================================
40宽x40高 200个字节,定位从0列~208,page10~19
**********************************************/
void Display_Movecir(unsigned char k) //cir的起始位置
{
unsigned char i,j,temp,graymode;
SpisendCode(0x85);Delay(1); //display data input directon select:page优先
for(i=0;i<40;i++) //列的地址,共96列,when use gray mode
{
SpisendCode(0x13); //column address write commond
SpisendData(k+i); //column address 从 k~k+40,
SpisendCode(0xb1); //page address write commond
SpisendData(10); //page address 10~19
for(j=0;j<5;j++) //20 page,now maybe 10page
{
switch(k/20)
{
case 0:graymode=1;break;
case 1:graymode=2;break;
case 2:
case 3:
case 4:graymode=3;break;
}
//一个字节分2page
SpisendCode(0xb1); //page address write commond
SpisendData(10+j*2); //page address 10~19
temp=Grayhalf_Char(cir[i*5+j]&0x0f,graymode);
if(temp)
{
SpisendCode(0x1d); //data write commond
SpisendData(temp); //data
}
//-------------------------------------------------------
SpisendCode(0xb1); //page address write commond
SpisendData(10+j*2+1); //page address 10~19
temp=Grayhalf_Char((cir[i*5+j]&0xf0)>>4,graymode);
if(temp)
{
SpisendCode(0x1d); //data write commond
SpisendData(temp); //data
}
}
}
}
//===================================
void Block_ClearScreen(unsigned char start,unsigned char end ) //start,end指列地址,page指10~19
{
unsigned char i,j;
SpisendCode(0x85); //display data input directon select:page优先
for(j=start;j<end;j++)
{
SpisendCode(0x13); //column address write commond
SpisendData(j); //column address
for(i=10;i<20;i++) //页的地址,共20pages,when use gray mode
{
SpisendCode(0xb1); //page address write commond
SpisendData(i); //page address
SpisendCode(0x1d); //data write commond
SpisendData(0x00); //data
}
}
}
//====================================
void main()
{
unsigned char k;
LcdInitial();
ClearScreen();
ScanScreen();
//ClearScreen();
Display_Char();
Display_Pic();
Block_ClearScreen(0,120);
for(k=0;k<100;k=k+20)
{
Display_Movecir(k);
Display_Movecir(80-k);
}
while(1);
}
unsigned char code beijing2008[192]=
{
0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x20,0x88,0x20,0x70,0x11,0x00,0x0E,0x00,0x00,//B0
/* (8 X 16 , 宋体 ) */
0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x13,0x00,0x00,//e1
/* (8 X 16 , 宋体 ) */
0x00,0x00,0x80,0x20,0x98,0x20,0x98,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,//i2
/* (8 X 16 , 宋体 ) */
0x00,0x00,0x00,0xC0,0x00,0x80,0x80,0x80,0x98,0x80,0x98,0x7F,0x00,0x00,0x00,0x00,//j3
/* (8 X 16 , 宋体 ) */
0x00,0x00,0x80,0x20,0x98,0x20,0x98,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,//i4
/* (8 X 16 , 宋体 ) */
0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F,0x00,0x20,//n5
/* (8 X 16 , 宋体 ) */
0x00,0x00,0x00,0x6B,0x80,0x94,0x80,0x94,0x80,0x94,0x80,0x93,0x80,0x60,0x00,0x00,//g6
/* (8 X 16 , 宋体 ) */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 7
/* (8 X 16 , 宋体 ) */
0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21,0x70,0x30,0x00,0x00,//28
/* (8 X 16 , 宋体 ) */
0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00,//09
/* (8 X 16 , 宋体 ) */
0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00,//010
/* (8 X 16 , 宋体 ) */
0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00,//811
/* (8 X 16 , 宋体 ) */
};
unsigned char code pp[350]=
{
0x00,0x00,0x00,0x0E,0x00,0x00,0x80,0x43,0xFF,0x00,0x00,0xF8,0xE3,0xFF,0x01,0x00,
0xFF,0xF3,0xFF,0x03,0xC0,0xFF,0xF3,0xFF,0x03,0xE0,0xFF,0xF9,0xFF,0x03,0xF0,0xF9,
0xF9,0xFF,0x07,0xF0,0xF9,0xF9,0xFF,0x07,0xF8,0xF8,0xF9,0xFF,0x07,0xF8,0xF0,0xF9,
0xFF,0x07,0xF8,0xF0,0xF9,0xFF,0x07,0xFC,0xF0,0xB9,0xFF,0x07,0xFC,0xF1,0x01,0xFF,
0x07,0xFE,0xF1,0x01,0xFE,0x07,0xFE,0xF1,0x01,0xFE,0x0F,0xFE,0xF1,0x01,0xFC,0x0F,
0xFE,0xF1,0x01,0xFC,0x0F,0xFE,0xF1,0x01,0xFC,0x0F,0xFE,0xF1,0x03,0xFC,0x0F,0xFE,
0xF1,0x03,0xFC,0x0F,0xFE,0xF1,0x7F,0xF8,0x0F,0xFE,0xF1,0xFF,0xF8,0x0F,0xFE,0xF1,
0xFF,0xF8,0x0F,0xFE,0x01,0xFF,0xF8,0x0F,0xFE,0x01,0xFE,0xF8,0x0F,0xFE,0x01,0xFC,
0xF8,0x0F,0xCE,0x01,0x7C,0xF8,0x0F,0xC6,0x01,0x00,0xF8,0x0F,0x86,0x01,0x00,0xFC,
0x0F,0x86,0x01,0x00,0xFC,0x0F,0x86,0x01,0x00,0xFC,0x03,0x86,0xF1,0x00,0xFC,0x01,
0x86,0xF1,0x00,0xFE,0x01,0x8E,0xF1,0x00,0xFE,0x00,0x8E,0x71,0x00,0xFF,0x00,0xCE,
0x01,0xC0,0x7F,0x00,0xFE,0x01,0xE0,0x7F,0x00,0xFE,0x01,0xC6,0x7F,0x00,0xFC,0x01,
0xC6,0x3F,0x00,0xFC,0x01,0xC7,0x3F,0x00,0xFC,0x01,0x87,0x3F,0x00,0xFC,0xF9,0x87,
0x1F,0x04,0xFC,0xF8,0x0F,0x0F,0x0E,0xFC,0xF8,0x0F,0x0F,0x0E,0xF8,0xFC,0x0F,0x06,
0x0F,0xF8,0xFC,0x0F,0x00,0x0F,0xF8,0xFC,0x1F,0x80,0x0F,0x78,0xFC,0x1F,0x80,0x0F,
0x78,0xFC,0x3F,0xC0,0x0F,0x78,0xFC,0x3F,0xC0,0x0F,0x70,0xFC,0x7F,0xE0,0x0F,0x70,
0xFE,0x7F,0xE0,0x07,0x30,0xFE,0xFF,0xF0,0x07,0x00,0xFE,0xFF,0xF1,0x07,0x00,0xFE,
0xFF,0xFF,0x03,0x00,0xFE,0xFF,0xFF,0x03,0x00,0xFE,0xFF,0xFF,0x01,0x00,0xFE,0xFF,
0xFF,0x03,0x00,0xFE,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,
0x01,0x00,0x80,0xFF,0xFF,0x01,0x00,0x00,0xFC,0x7F,0x00,0x00,0x00,0x00,0x03,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
unsigned char code cir[200]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xFF,0x03,0x00,0x00,0xE0,0xFF,0x0F,0x00,0x00,0x78,0x00,0x1E,0x00,0x00,0x1C,
0x00,0x78,0x00,0x00,0x06,0x00,0xE0,0x00,0x00,0x03,0x00,0xC0,0x01,0x80,0x01,0x00,
0x80,0x01,0xC0,0x01,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x03,0x60,0x00,0x00,0x00,
0x06,0x60,0x00,0x00,0x00,0x0C,0x70,0x00,0x00,0x00,0x0C,0x30,0x00,0x00,0x00,0x0C,
0x30,0x00,0x00,0x00,0x0C,0x30,0x00,0x00,0x00,0x18,0x30,0x00,0x00,0x00,0x18,0x30,
0x00,0x00,0x00,0x18,0x30,0x00,0x00,0x00,0x18,0x30,0x00,0x00,0x00,0x18,0x30,0x00,
0x00,0x00,0x18,0x30,0x00,0x00,0x00,0x0C,0x30,0x00,0x00,0x00,0x0C,0x70,0x00,0x00,
0x00,0x0C,0x60,0x00,0x00,0x00,0x0E,0x60,0x00,0x00,0x00,0x06,0xC0,0x00,0x00,0x00,
0x03,0xC0,0x01,0x00,0x80,0x03,0x80,0x03,0x00,0x80,0x01,0x00,0x07,0x00,0xC0,0x00,
0x00,0x0E,0x00,0x70,0x00,0x00,0x1C,0x00,0x38,0x00,0x00,0xF8,0x00,0x1F,0x00,0x00,
0xE0,0xFF,0x07,0x00,0x00,0x80,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -