个人使用的第二种液晶,12864.第一种是1602.以下是驱动源码(移植过来的):
#include<mega16.h>
#include<delay.h>
#define SID PORTC.6
#define DDR_SID DDRC.6
#define PIN_SID PINC.6
#define DDR_SCLK DDRC.5
#define DDR_CS DDRC.7
#define SCLK PORTC.5
#define CS PORTC.7
#define CHKBIT(x,y) (x&(1<<y))//get appoint bit level
unsigned char str[]={"移植成功!!哈哈哈"};
unsigned char *unit[]={"秒","分","时","日","月","周","年"};
unsigned char *week[]={"SU","MO","TU","WE","TH","FR","SA"};
flash unsigned char time[]={"0123456789"};
flash unsigned char bmp1[]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,
0x7F,0xE0,0x00,0x00,0x00,0x7F,0xE0,0x00,0x00,0x3F,0xFF,0xFF,0x00,0x00,0x7F,0xFF,
0xFF,0x80,0x00,0x7F,0xE0,0xFF,0x80,0x00,0x7F,0xC0,0x7F,0x80,0x00,0x7F,0x8E,0x3F,
0x80,0x00,0x7F,0x9F,0x3F,0x80,0x00,0x7F,0x9F,0x3F,0x80,0x00,0x7F,0x8E,0x3F,0x80,
0x00,0x7F,0x80,0x3F,0x80,0x00,0x7F,0xC0,0x7F,0x80,0x00,0x7F,0xFF,0xFF,0x80,0x00,
0x7F,0xFF,0xFF,0x80,0x00,0x3F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1C,0x93,0x00,0x00,0x00,0x12,0x94,0x80,0x00,0x00,0x12,0x94,
0x80,0x00,0x00,0x1C,0xF4,0x80,0x00,0x00,0x10,0x94,0x80,0x00,0x00,0x10,0x94,0x80,
0x00,0x00,0x10,0x93,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};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//net
unsigned char flash bmp2[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xF0,0x00,0x00,0x07,0xFF,0xFC,0x00,0x00,0x0F,0x00,0x0E,0x00,0x00,0x1C,0x00,0x03,0x80,0x00,0x38,0x00,0x01,0xC0,0x00,0x70,0x00,0x00,0xE0,0x00,0xE0,0x0F,0x00,0x70,0x01,0xC0,0x3F,0xC0,0x38,0x01,0xC0,0x7F,0xE0,0x38,0x01,0x80,0xFF,0xF0,0x18,0x01,0x81,0xF8,0xF8,0x18,0x01,0x81,0xF8,0xF8,0x18,0x01,0x81,0xF8,0xF8,0x18,0x01,0x80,0xFF,0xF0,0x38,0x01,0x80,0x7F,0xE0,0x38,0x01,0xC0,0x1F,0x80,0x78,0x01,0xE0,0x00,0x00,0xF8,0x01,0xF0,0x00,0x01,0xF8,0x01,0xF8,0x00,0x03,0xF8,0x01,0xFE,0x00,0x0F,0xF8,0x01,0xFF,0x80,0x3F,0xF8,0x01,0xFF,0xFF,0xFF,0xF8,0x00,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x41,0xC1,0xC0,0x00,0x48,0x02,0x22,0x20,0x00,0x44,0x41,0xC2,0x00,0x00,0x44,0x40,0x22,0x00,0x00,0x44,0x42,0x22,0x20,0x00,0x78,0x41,0xC1,0xC0};
///////////////////////////////// disc//////////////////////
unsigned char flash bmp0[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xC0,0x00,0x18,0xC0,0x38,0xE0,0x00,0x38,0xE0,0x3F,0xFF,0xFF,0xFF,0xE0,0x3F,0xFF,0xFF,0xFF,0xE0,0x38,0xFF,0xFF,0xF8,0xE0,0x38,0xE0,0x00,0x38,0xE0,0x38,0xE0,0x00,0x38,0xE0,0x3F,0xE0,0x00,0x3F,0xE0,0x3F,0xE0,0x00,0x3F,0xE0,0x3F,0xE0,0x00,0x3F,0xE0,0x38,0xE0,0x00,0x38,0xE0,0x38,0xE0,0x00,0x38,0xE0,0x38,0xE0,0x00,0x3F,0xE0,0x3F,0xE0,0x00,0x3F,0xE0,0x3F,0xE0,0x00,0x3F,0xE0,0x38,0xE0,0x00,0x38,0xE0,0x38,0xE0,0x00,0x38,0xE0,0x38,0xFF,0xFF,0xF8,0xE0,0x3F,0xFF,0xFF,0xFF,0xE0,0x3F,0xE0,0x00,0x3F,0xE0,0x38,0xE0,0x00,0x38,0xE0,0x18,0xC0,0x00,0x10,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0xB0,0xC4,0x40,0x00,0x02,0x49,0x24,0x40,0x00,0x02,0x49,0x24,0x40,0x00,0x02,0x49,0x24,0x40,0x00,0x02,0x49,0x22,0x80,0x00,0x02,0x48,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
///////////////////////////////////////////////////////mov///////////////////////////////////////////////
unsigned char flash bmp3[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x00,0x00,0x03,0xFF,0xE0,0x00,0x00,0x07,0xFF,0xE0,0x00,0x00,0x07,0x00,0x70,0x00,0x00,0x07,0x00,0x70,0x00,0x07,0xFF,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFF,0xFC,0x3F,0xC0,0xFF,0x81,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0xFF,0x81,0xFC,0x1F,0xC1,0xFF,0x81,0xFC,0x1F,0xFF,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFF,0xF8,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
///////////////////////////////////box //////////////////////////////////////
unsigned char flash bmp4[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC3,0xF0,0x00,0x00,0x07,0xE3,0xF8,0x00,0x00,0x07,0xFF,0xF8,0x00,0x00,0x07,0xFF,0xF8,0x00,0x00,0x06,0x7E,0x18,0x00,0x00,0x06,0x00,0x18,0x00,0x00,0x06,0x00,0x18,0x00,0x00,0x06,0x00,0x18,0x00,0x00,0x06,0x00,0x18,0x00,0x00,0x06,0x00,0x18,0x00,0x00,0x06,0x00,0x18,0x00,0x00,0x06,0x00,0x18,0x00,0x00,0x06,0x00,0x18,0x00,0x00,0x06,0x00,0x18,0x00,0x00,0x06,0x00,0x18,0x00,0x00,0x7E,0x01,0xF8,0x00,0x00,0xFE,0x03,0xF8,0x00,0x00,0xF8,0x07,0xF0,0x00,0x00,0x70,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x26,0x4C,0x00,0x00,0x55,0x28,0x12,0x00,0x00,0x55,0x08,0x50,0x00,0x00,0x55,0x27,0x50,0x00,0x00,0x55,0x21,0x50,0x00,0x00,0x54,0xE9,0x52,0x00,0x00,0x00,0x26,0x4C,0x00,0x00
};///////////////////music
unsigned char flash bmp5[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x78,0x78,0x00,0x00,0x00,0x00,0xC0,0x0C,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x06,0x00,0x01,0x80,0x00,0x00,0x04,0x18,0x60,0x80,0x00,0x00,0x08,0x24,0x90,0x40,0x00,0x00,0x00,0x0F,0xF0,0x20,0x00,0x00,0x10,0x0A,0x10,0x20,0x00,0x00,0x10,0x2B,0xF0,0x20,0x00,0x00,0x10,0x24,0x80,0x10,0x00,0x00,0x20,0x04,0x00,0x10,0x00,0x00,0x20,0x3C,0xF0,0x10,0x00,0x00,0x20,0xE0,0x0C,0x00,0x00,0x00,0x08,0x80,0x04,0x00,0x00,0x00,0x4C,0x30,0x38,0x20,0x00,0x00,0x09,0x00,0x00,0x28,0x00,0x00,0x16,0x00,0x00,0x48,0x00,0x00,0x09,0x80,0x01,0x04,0x00,0x02,0x14,0x00,0x06,0x80,0x00,0x02,0x14,0x00,0x38,0x42,0x00,0x04,0x15,0x10,0x00,0x00,0x00,0x04,0x25,0xA0,0x00,0x40,0x00,0x04,0x14,0x20,0x00,0x40,0x00,0x04,0x12,0x20,0x00,0x40,0x00,0x03,0x50,0xC0,0x00,0x5A,0x00,0x00,0x28,0x00,0x00,0xA4,0x00,0x00,0x04,0x00,0x01,0x20,0x00,0x00,0x3A,0x00,0x02,0xA0,0x00,0x00,0x4D,0x80,0x0D,0x50,0x00,0x00,0x42,0x38,0x32,0x08,0x00,0x00,0x50,0xCF,0xCC,0x68,0x00,0x00,0x20,0xF0,0x38,0x10,0x00,0x00,0x1F,0xF8,0x7F,0xE0,0x00,0x00,0x03,0xC0,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
}; //qq//
unsigned char flash bmp6[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xE0,0x00,0x00,0x0F,0xFF,0xF8,0x00,0x00,0x3C,0x47,0x3E,0x00,0x00,0x78,0xC3,0x9F,0x00,0x01,0xFF,0xFF,0xFF,0x80,0x03,0xC7,0xFF,0xC3,0xC0,0x03,0x83,0x81,0xC1,0xC0,0x07,0x87,0x81,0xE1,0xE0,0x07,0xFF,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xFF,0xE0,0x03,0x83,0x80,0xC0,0xC0,0x03,0x83,0x81,0xC1,0xC0,0x03,0xCF,0xFF,0xFB,0x80,0x01,0xFF,0xFF,0xFF,0x00,0x00,0xF8,0xE3,0x1E,0x00,0x00,0x3E,0xF7,0x7C,0x00,0x00,0x0F,0xFF,0xF0,0x00,0x00,0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x10,0x00,0x01,0x20,0xF0,0x10,0x00,0x01,0x21,0x08,0xFF,0x00,0x01,0x23,0xFC,0x10,0x00,0x01,0x22,0x00,0x10,0x00,0x01,0x22,0x08,0x10,0x00,0x01,0x21,0xF0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //net
//net
////////////////////////////////////////////////////
// declaration
void PutStr(unsigned char row,unsigned char col, unsigned char *puts);
/////////////////////////////////////////////////
// DS1302
/////////////////////////////////////////////////
// DS1302 end
//////////////////////////////////////////////////
unsigned char flash *bmp[]={bmp1,bmp2,bmp3,bmp4,bmp5,bmp6};
unsigned char flash AC_TABLE[32]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f
};
void delay_nus(unsigned int t){while(t--);}
void SendByte(unsigned char Dbyte)
{
unsigned char i;
DDR_SID=1; //SID OUTPUT
for(i=0;i<8;i++)
{
SCLK=0;
//SCLK=0
if(Dbyte&0x80)
SID=1;
else SID=0;
SCLK=1;// SCK = 1;
Dbyte=Dbyte<<1;
}
}
unsigned char ReceiveByte(void)
{
unsigned char i,temp1,temp2;
DDR_SID=0; //SID INPUT
SID=0;
temp1=temp2=0;
for(i=0;i<8;i++)
{
temp1=temp1<<1;
SCLK=0; //SCLK=0;
SCLK=1; //SCLK=1
SCLK=0; //SCLK=0
if(PIN_SID==1) temp1++;
}
for(i=0;i<8;i++)
{
temp2=temp2<<1;
SCLK=0; //SCLK=0;
SCLK=1; //SCLK=1
SCLK=0; //SCLK=0;
if(PIN_SID==1) temp2++;
}
DDR_SID=1;
temp2=(0xf0&temp1)+(0x0f&temp2) ; //SID OUTPUT
return (temp2);
}
void CheckBusy( void )
{
do SendByte(0xfc); //11111,RW(1),RS(0),0
while(0x80&ReceiveByte());
}
void WriteCommand( unsigned char Cbyte )
{
CS=1; // CS = 1;
CheckBusy();
SendByte(0xf8); //11111,RW(0),RS(0),0
SendByte(0xf0&Cbyte); //
SendByte(0xf0&Cbyte<<4);
CS=0;
}
void WriteData( unsigned char Dbyte )
{
CS=1;
CheckBusy();
SendByte(0xfa); //11111,RW(0),RS(1),0
SendByte(0xf0&Dbyte);
SendByte(0xf0&Dbyte<<4);
CS=0;
}
unsigned char ReadData( void )
{
CheckBusy();
SendByte(0xfe); //11111,RW(1),RS(1),0
return ReceiveByte();
}
void LcmInit( void )
{ DDR_SCLK=1;
DDR_SID=1;
DDRA.7=1;
WriteCommand(0x30);
WriteCommand(0x03);
WriteCommand(0x0C);
WriteCommand(0x01);
WriteCommand(0x06);
}
void LcmClearTXT( void )
{
unsigned char i;
WriteCommand(0x30);
WriteCommand(0x80);
for(i=0;i<64;i++)
WriteData(0x20);
}
void LcmClearBMP( void )
{
unsigned char i,j;
WriteCommand(0x34);
WriteCommand(0x36);
for(i=0;i<32;i++)
{
WriteCommand(0x80|i);
WriteCommand(0x80);
for(j=0;j<32;j++)
WriteData(0);
}
}
void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
{
unsigned char temp;
WriteCommand(0x30);
WriteCommand(AC_TABLE[8*row+col]);
while(*puts != '\0')
{
if(col==8)
{
col=0;
row++;
}
if(row==4) row=0;
temp=8*row+col;
WriteCommand(AC_TABLE[temp]);
WriteData(*puts);
puts++;
WriteData(*puts);
puts++;
col++;
}
}
/*x0,y0 起始坐标,x为字节步进,y为位步进, 小图标 */
void PutBMP2(unsigned char x0,unsigned char y0,unsigned char x1, unsigned char y1,flash unsigned char* puts,unsigned char flag)
{
unsigned int x=0;
unsigned char i,j;
WriteCommand(0x34);
WriteCommand(0x36);
//score=(x1*y1)/2;
for(i=y0;i<y1+y0;i++)
{
WriteCommand(0x80|i);
WriteCommand(0x80|x0);
for(j=x1;j>0;j--)
{
if(flag==0)
WriteData(255-puts[x]);
else WriteData(puts[x]);
x++;
}
// y=x-x1;
/* for(j=x0;j<x0+x1;j++)
{
WriteData(puts[y+score]);
y++;
}*/
}
}/*全屏壁纸*/
void PutBMP_allscreen(unsigned char *puts)
{
unsigned int x=0,y=0;
unsigned char i,j;
WriteCommand(0x34);
WriteCommand(0x36);
for(i=0;i<32;i++)
{
WriteCommand(0x80|i);
WriteCommand(0x80);
for(j=0;j<16;j++)
{
WriteData(puts[x]);
x++;
}
y=x-16;
for(j=0;j<16;j++)
{
WriteData(puts[y+512*1]);
y++;
}
}
}
void main()
{ unsigned char i;
LcmInit();
LcmClearTXT();
LcmClearBMP();
delay_nus(200);
//ds1302_init();
while(1)
{
for(i=0;i<4;i++){PutBMP2(i*4,0,5, 32, bmp1,1); }
//v_BurstR1302T(print);
// delay_nus(100);
// showtime(print);
}
// PutStr(0,0,str);
// for(i=0;i<4;i++){PutBMP2(i*4,0,5, 32, bmp,1); }
}
|