sbit CS =P0^3;
sbit SID=P0^1;
sbit SCLK=P0^0;
void delay(unsigned int j)
{
unsigned char i;
do{
for(i=0;i <100;i++);
}while(j--);
}
void send_command(unsigned char command_data) //·¢ËÍÃüÁî
{
unsigned char i;
unsigned char i_data,temp_data1,temp_data2;
i_data=0xf8; //²Ù×÷ÃüÁî,¿ÉÒԲ鿴×ÊÁÏ
delay(10);
CS=1;
SCLK=0;
for(i=0;i <8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data < <1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i <8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data < <1;
}
i_data=command_data;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1> > =4;
temp_data2 < <=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i <8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data < <1;
}
CS=0;
}
void send_data(unsigned char command_data) //·¢ËÍÊý¾Ý
{
unsigned char i;
unsigned char i_data,temp_data1,temp_data2;
i_data=0xfa; //²Ù×÷ÃüÁî,¿ÉÒԲ鿴×ÊÁÏ
delay(10);
CS=1;
for(i=0;i <8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data < <1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i <8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data < <1;
}
i_data=command_data;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1> > =4;
temp_data2 < <=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i <8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data < <1;
}
CS=0;
}
void InitLCD() //Òº¾§³õʼ»¯
{
send_command(0x30); //¹¦ÄÜÉèÖÃ:Ò»´ÎËÍ8λÊý¾Ý,»ù±¾Ö¸Á
send_command(0x06); //µãÉ趨:ÏÔʾ×Ö·û/¹â±ê´Ó×óµ½ÓÒÒÆÎ»,DDRAMµØÖ·¼Ó1
send_command(0x0c); //ÏÔʾÉ趨:¿ªÏÔʾ,ÏÔʾ¹â±ê,µ±Ç°ÏÔʾλ·´°×ÉÁ¶¯
send_command(0x04); //ÏÔʾÉ趨:¿ªÏÔʾ,ÏÔʾ¹â±ê,µ±Ç°ÏÔʾλ·´°×ÉÁ¶¯
send_command(0x01); //ÇåDDRAM
send_command(0x02); //DDRAMµØÖ·¹éλ
send_command(0x80); //°ÑÏÔʾµØÖ·ÉèΪ0X80£¬¼´ÎªµÚÒ»ÐеÄÊ×λ
}
/* flagnew ÊÇˢбê־λ,1ÔòË¢ÐÂ,0²»Ë¢ÐÂ,
x,yΪÆðʼ×ù±ê x(0 <=x <=3),y(0 <=y <=7),xΪÐÐ×ù±ê,yΪÁÐ×ù±ê;
howΪҪÏÔʾºº×ֵĸöÊý;
strÊÇÒªÏÔʾºº×ֵĵØÖ· */
void DispHanzi(unsigned char x,unsigned char y,unsigned char how,unsigned char *stri)
{
unsigned char hi=0; //ºº×ÖÏÔʾ
if(x==0) send_command(0x80+y); //
else if(x==1) send_command(0x90+y);
else if(x==2) send_command(0x88+y);
else if(x==3) send_command(0x98+y);
for(hi=0;hi <how;hi++)
{
send_data(*(stri+hi*2));
send_data(*(stri+hi*2+1));
}
}
void DispZimu(unsigned char x,unsigned char y,unsigned char how,unsigned char *stri)//
{
unsigned char hi=0; //×ÖĸÏÔʾ
if(x==0) send_command(0x80+y);
else if(x==1) send_command(0x90+y);
else if(x==2) send_command(0x88+y);
else if(x==3) send_command(0x98+y);
for(hi=0;hi <how;hi++)
{
send_data(*(stri+hi));
}
}
main()
{
InitLCD();
while(1)
{DispHanzi(0,5,3,"时间");
DispZimu(0,1,8,"Easy51-B");
DispHanzi(1,0,8,"三度空间");
}
}