📄 s6d0144.c
字号:
/*****************************************************************************
Company :Perfect
LCM moudle :1.8'/128*160
Made by :Jaremy
Data :2006-03-08
Function :
MCU :S6D0144
Type :80 system 16-bit bus interface
Note :Crystal:40MHz,Vcc=Vci=2.8V
/*******************************************************************************
Name :
Function :
Description :
Modefitied :
Company :
Version :
********************************************************************************/
#include<reg52.h>
#define DBH P2
#define DBL P0
#define P4 0xd8
#define red 0xf800
#define green 0x07e0
#define blue 0x001f
#define black 0x0000
#define white 0xffff
#define C 0
#define D 1
unsigned char a;
unsigned int pic;
bit delayflag=0;
//******************************************************************************
void Initial(void);
void writelcm(int x,bit R);
void WriteRegister(unsigned char RegisterName,unsigned int RegisterValue);
void FillColour(int Colour);
void FillGray(int Gray);
void FillSkripe(void);
void Block(void);
void Field(void);
void Photo(unsigned char Number);
bit KeyScan(void);
void AddressSlect(unsigned char Add);
void write_xdata(int erom);
void Delay(unsigned char i);
//******************************************************************************
sbit CS =P1^7;
sbit CE1 =P1^3;
sbit CE2 =P1^4;
sbit OE =P4^0;
sbit RS =P1^6;
sbit W_R =P3^6;
sbit R_D =P3^7;
sbit RES =P3^5;
sbit A16 =P1^0;
sbit A17 =P1^1;
sbit A18 =P1^2;
sbit G =P1^5;
sbit DB0 =P1^4;
sbit DB9 =P3^4;
sbit Key0 =P3^2;
sbit Key1 =P3^3;
sbit Key2 =0xda;
sbit Key3 =0xdb;
//******************************************************************************
void main(void)
{
TMOD=0x01;
Delay(10); //Wait for 100 mS
G=0;
RES=1;
Delay(10);
RES=0;
Delay(50);
Initial();
Delay(50);
while(1)
{
WriteRegister(0x16,0x7f00); //Seg1-seg128/128 columns
WriteRegister(0x17,0x9f00); //Gate1-gate160/160 lines
for(a=0;a<36;a++)
{
WriteRegister(0x21,0x0000); //GRAM address
writelcm(0x22,C);
switch(a)
{
case 0:Photo(0);break;
case 1:Photo(1);break;
case 2:Photo(2);break;
case 3:Photo(3);break;
case 4:Photo(4);break;
case 5:Photo(5);break;
case 6:Photo(6);break;
case 7:Photo(7);break;
case 8:Photo(8);break;
case 9:Photo(9);break;
case 10:Photo(10);break;
case 11:Photo(11);break;
case 12:Photo(12);break;
case 13:Photo(13);break;
case 14:Photo(14);break;
case 15:Photo(15);break;
case 16:Photo(16);break;
case 17:Photo(17);break;
case 18:Photo(18);break;
case 19:Photo(19);break;
case 20:Photo(20);break;
case 21:Photo(21);break;
case 22:Photo(22);break;
case 23:Photo(23);break;
case 24:Photo(24);break;
case 25:Block();break;
case 26:Field();break;
case 27:FillColour(red);break;
case 28:FillColour(green);break;
case 29:FillColour(blue);break;
case 30:FillColour(black);break;
case 31:FillColour(white);break;
case 32:FillSkripe();break;
case 33:FillGray(red);break;
case 34:FillGray(green);break;
case 35:FillGray(blue);break;
default:break;
}
Delay(200);
}
}
}
//******************************************************************************
//******************************************************************************
void Initial(void)
{
Delay(1);
WriteRegister(0xB4,0x0010);
WriteRegister(0x07,0x0000);
WriteRegister(0x13,0x0000);
Delay(1);
WriteRegister(0x12,0x0071);
WriteRegister(0x13,0x080b);
WriteRegister(0x14,0x78dd);
WriteRegister(0x10,0x1910);
WriteRegister(0x01,0x0114);
WriteRegister(0x02,0x0100);
WriteRegister(0x03,0x1030);
WriteRegister(0x08,0x0101);
WriteRegister(0x0b,0x0005);
WriteRegister(0x0C,0x0002);
Delay(10);
WriteRegister(0x30,0x0000);//r Control
WriteRegister(0x31,0x0506);
WriteRegister(0x32,0x0403);
WriteRegister(0x33,0x0200);
WriteRegister(0x34,0x0303);
WriteRegister(0x35,0x0002);
WriteRegister(0x36,0x0707);
WriteRegister(0x37,0x0200);
WriteRegister(0x38,0x0900);
WriteRegister(0x11,0x000a);
WriteRegister(0x40,0x0000);//Coordination Control setting
//WriteRegister(0x41,0x00E5);
WriteRegister(0x42,0X9f00);
WriteRegister(0x43,0X9f00);
WriteRegister(0x44,0x7F00);
WriteRegister(0x45,0x9f00);
WriteRegister(0x13,0x081b);
Delay(5);
WriteRegister(0x07,0x0037); //DTE=1
Delay(2);
// Initial_RAM_Write(Gram_ini_Pos<<8,Gram_ini_Pos);
}
//******************************************************************************
void FillColour(int Colour)
{
unsigned char x,y;
for(y=160;y>0;y--)
for(x=128;x>0;x--)
writelcm(Colour,D);
}
//******************************************************************************
void FillGray(int Gray)
{
unsigned char x,y;
unsigned char high;
int decrement;
switch(Gray)
{
case red:decrement=0x1000;break;
case green:decrement=0x0080;break;
case blue:decrement=2;break;
default:break;
}
for(y=16;y>0;y--) //Display 32 level gray on LCD
{
for(high=10;high>0;high--)
for(x=128;x>0;x--)
writelcm(Gray,D);
Gray-=decrement;
}
}
//******************************************************************************
unsigned char code ColourMatrix[]={0xf8,0x00,0x07,0xe0,0x00,0x1f,0xff,0xe0,
0xf8,0x1f,0x07,0xff,0x00,0x00,0xff,0xff};
void FillSkripe(void)
{
unsigned char x,y;
unsigned char high;
unsigned char Colour=0;
for(y=8;y>0;y--) //Display 7 colour
{
pic=ColourMatrix[Colour++];
pic<<=8;
pic+=ColourMatrix[Colour++];
for(high=20;high>0;high--)
for(x=128;x>0;x--)
writelcm(pic,D);
}
}
//******************************************************************************
void Block(void)
{
unsigned char x1,y1;
unsigned char x2,y2;
pic=0;
for(y1=10;y1>0;y1--)
{
for(y2=16;y2>0;y2--)
for(x1=8;x1>0;x1--)
{
for(x2=16;x2>0;x2--)writelcm(pic,D);
pic=~pic;
}
pic=~pic;
}
}
//******************************************************************************
void Field(void)
{
unsigned char x;
unsigned int y;
WriteRegister(0x21,0x0000); //GRAM address
writelcm(0x22,C);
for(y=0;y<160;y++)
for(x=0;x<128;x++)
{
if((y==0)||(y==1)||(y==79)||(y==80)||(y==158)||(y==159))writelcm(white,D);
else if((x==0)||(x==1)||(x==63)||(x==64)||(x==126)||(x==127))writelcm(white,D);
else writelcm(black,D);
}
}
//******************************************************************************
void writelcm(int x,bit R)
{
G=0;
RS=R;
CS=0;
DBH=x>>8;
DBL=x;
W_R=0;
W_R=1;
CS=1;
}
//******************************************************************************
void WriteRegister(unsigned char RegisterName,unsigned int RegisterValue)
{
G=0;
RS=0;
CS=0;
DBH=0;
DBL=RegisterName;
W_R=0;
W_R=1;
RS=1;
DBH=RegisterValue>>8;
DBL=RegisterValue;
W_R=0;
W_R=1;
CS=1;
}
//******************************************************************************
void write_xdata(int erom)//EXTERNAL DATA WRITE SUB
{
RS=1;
CS=0;
DBL=erom;
DBH=erom>>8;
W_R=0;
W_R=1;
CS=1;
}
//******************************************************************************
void Photo(unsigned char Number)
{
unsigned int x,y;
AddressSlect(Number);
G=1;
CE2=1;
CE1=0;
G=1;
for(y=0;y<160;y++)
for(x=0;x<128;x++)
{
if(pic==0xffff)
{
AddressSlect(++Number);
pic=0x0000;
write_xdata(pic++);
}
else write_xdata(pic++);
}
}
//******************************************************************************
void AddressSlect(unsigned char Add)
{
pic=5*Add;
switch(pic&0x00f0)
{
case 0x0000:{A18=0;A17=0;A16=0;};break;
case 0x0010:{A18=0;A17=0;A16=1;};break;
case 0x0020:{A18=0;A17=1;A16=0;};break;
case 0x0030:{A18=0;A17=1;A16=1;};break;
case 0x0040:{A18=1;A17=0;A16=0;};break;
case 0x0050:{A18=1;A17=0;A16=1;};break;
case 0x0060:{A18=1;A17=1;A16=0;};break;
case 0x0070:{A18=1;A17=1;A16=1;};break;
default:break;
}
pic<<=12;
}
//******************************************************************************
void Delay(unsigned char i)
{
unsigned char b;
bit key=0;
for(;i>0;i--)
{
b=delayflag==0?1:20;
for(;b>0;b--)
{
TH0=0x7e;TL0=0x00;TR0=1;
do{key=KeyScan();}while((TF0==0)&&(key==0)); //Delay for 10ms
TF0=0;
if(key==1)
{
i=1;
b=1;
}
}
}
TR0=0;
delayflag=key;
}
//******************************************************************************
/*Function Name ;Key_Test() */
/*Entireness variable :Key_Value */
/*Local variable :None */
/*Description ;This subroutine detects the keyboard and input
the value of the key,then return the key value
to the program which call it. */
bit KeyScan(void)
{
Key0=Key1=Key2=Key3=1;
if((Key0&&Key1&&Key2&&Key3)!=1)
{
TH1=0x90;TL1=0;TF1=0;TR1=1;while(TF1==0); //Delay 30ms
TF1=0;TR1=0;Key0=Key1=Key2=Key3=1;
if((Key0&&Key1&&Key2&&Key3)!=1)
{
if(Key0==0)a=a<24?a:35; //Photo++
else if(Key1==0){ //Photo--
if((a>=1)&&(a<=25))a-=2;
else if(a==0)a=23;
else a=23;}
else if(Key2==0)a=((a>=24)&&(a<35))?a:23; //Picture++
else{ //Picture--
if((a>=26)&&(a<=35))a-=2;
else if(a==25)a=34;
else a=34;}
return 1;
}
} //Keyboard detect faile
else return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -