#include<ST7735.h>
#include<absacc.h>
#include<intrins.h>
#include<string.h>
#include<Font_GBK_code.h>
#include<Font_ASCII_code.h>
////STC单片机IO推挽输出设置定义
//#define MCU_STC12//如果您使用的单片机不是STC12系列(如STC89C52)请屏蔽此宏定义
//#define MAIN_Fosc 12000000L //定义时钟
//#ifdef MCU_STC12
//sfr P3M1 = 0xB1; //P3M1.n,P3M0.n =00--->Standard, 01--->push-pull
//sfr P3M0 = 0xB2; // =10--->pure input, 11--->open drain
//sfr AUXR1 = 0xA2;
//#endif
uchar code map1[];
uchar code map2[];
uchar bdata bitdata;
sbit bit7=bitdata^7;
sbit bit6=bitdata^6;
sbit bit5=bitdata^5;
sbit bit4=bitdata^4;
sbit bit3=bitdata^3;
sbit bit2=bitdata^2;
sbit bit1=bitdata^1;
sbit bit0=bitdata^0;
void delay(uint time)
{
uint i,j;
for(i=0;i<time;i++)
for(j=0;j<250;j++);
}
void LCD_CtrlWrite_IC(uchar c)
{
bitdata=c;
cs=0;
rs=0;
sda=bit7;scl=0;scl=1;
sda=bit6;scl=0;scl=1;
sda=bit5;scl=0;scl=1;
sda=bit4;scl=0;scl=1;
sda=bit3;scl=0;scl=1;
sda=bit2;scl=0;scl=1;
sda=bit1;scl=0;scl=1;
sda=bit0;scl=0;scl=1;
cs=1;
}
void LCD_DataWrite_IC(uchar d)
{
bitdata=d;
cs=0;
rs=1;
sda=bit7;scl=0;scl=1;
sda=bit6;scl=0;scl=1;
sda=bit5;scl=0;scl=1;
sda=bit4;scl=0;scl=1;
sda=bit3;scl=0;scl=1;
sda=bit2;scl=0;scl=1;
sda=bit1;scl=0;scl=1;
sda=bit0;scl=0;scl=1;
cs=1;
}
void LCD_DataWrite(uchar LCD_DataH,uchar LCD_DataL)
{
LCD_DataWrite_IC(LCD_DataH);
LCD_DataWrite_IC(LCD_DataL);
}
void write_command(uchar c)
{
bitdata=c;
cs=0;
rs=0;
sda=bit7;scl=0;scl=1;
sda=bit6;scl=0;scl=1;
sda=bit5;scl=0;scl=1;
sda=bit4;scl=0;scl=1;
sda=bit3;scl=0;scl=1;
sda=bit2;scl=0;scl=1;
sda=bit1;scl=0;scl=1;
sda=bit0;scl=0;scl=1;
cs=1;
}
void write_data(uchar d)
{
bitdata=d;
cs=0;
rs=1;
sda=bit7;scl=0;scl=1;
sda=bit6;scl=0;scl=1;
sda=bit5;scl=0;scl=1;
sda=bit4;scl=0;scl=1;
sda=bit3;scl=0;scl=1;
sda=bit2;scl=0;scl=1;
sda=bit1;scl=0;scl=1;
sda=bit0;scl=0;scl=1;
cs=1;
}
void Reset()
{
reset=0;
delay(100);
reset=1;
delay(100);
}
//////////////////////////////////////////////////////////////////////////////////////////////
void lcd_initial()
{
reset=0;
delay(100);
reset=1;
delay(100);
//------------------------------------------------------------------//
//-------------------Software Reset-------------------------------//
write_command(0x11); //Sleep out
delay (120); //Delay 120ms
//------------------------------------ST7735S Frame Rate-----------------------------------------//
write_command(0xB1);
write_data(0x05);
write_data(0x3C);
write_data(0x3C);
write_command(0xB2);
write_data(0x05);
write_data(0x3C);
write_data(0x3C);
write_command(0xB3);
write_data(0x05);
write_data(0x3C);
write_data(0x3C);
write_data(0x05);
write_data(0x3C);
write_data(0x3C);
//------------------------------------End ST7735S Frame Rate-----------------------------------------//
write_command(0xB4); //Dot inversion
write_data(0x03);
write_command(0xC0);
write_data(0x28);
write_data(0x08);
write_data(0x04);
write_command(0xC1);
write_data(0XC0);
write_command(0xC2);
write_data(0x0D);
write_data(0x00);
write_command(0xC3);
write_data(0x8D);
write_data(0x2A);
write_command(0xC4);
write_data(0x8D);
write_data(0xEE);
//---------------------------------End ST7735S Power Sequence-------------------------------------//
write_command(0xC5); //VCOM
write_data(0x1A);
write_command(0x36); //MX, MY, RGB mode
write_data(0xc0);
//------------------------------------ST7735S Gamma Sequence-----------------------------------------//
write_command(0xE0);
write_data(0x04);
write_data(0x22);
write_data(0x07);
write_data(0x0A);
write_data(0x2E);
write_data(0x30);
write_data(0x25);
write_data(0x2A);
write_data(0x28);
write_data(0x26);
write_data(0x2E);
write_data(0x3A);
write_data(0x00);
write_data(0x01);
write_data(0x03);
write_data(0x13);
write_command(0xE1);
write_data(0x04);
write_data(0x16);
write_data(0x06);
write_data(0x0D);
write_data(0x2D);
write_data(0x26);
write_data(0x23);
write_data(0x27);
write_data(0x27);
write_data(0x25);
write_data(0x2D);
write_data(0x3B);
write_data(0x00);
write_data(0x01);
write_data(0x04);
write_data(0x13);
//------------------------------------End ST7735S Gamma Sequence-----------------------------------------//
write_command(0x3A); //65k mode
write_data(0x05);
write_command(0x29); //Display on
write_command(0x2C);
dsp_single_colour(0x00,0x00);
}
void RamAdressSet()
{
write_command(0x2A);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x7f);
write_command(0x2B);
write_data(0x00);
write_data(0x00);
write_data(0x00);
write_data(0x9f);
}
void PutPixel(uint x_start,uint y_start,uint color)
{
LCD_CtrlWrite_IC(0x2a);
LCD_DataWrite_IC(x_start);
LCD_DataWrite_IC(0x5f);
LCD_CtrlWrite_IC(0x2b);
LCD_DataWrite_IC(y_start+0x34);
LCD_DataWrite_IC(0x7F);
LCD_CtrlWrite_IC(0x2c);
LCD_DataWrite_IC(color>>8);
LCD_DataWrite_IC(color&0xff);
}
void RedLine()
{
uchar i=0,j=0;
i=66; // 11格灰阶
for(j=0;j<16;j++)
{
PutPixel(i,j,0xf800);
}
}
void dsp_single_colour(uchar DH,uchar DL)
{
uchar i,j;
//RamAdressSet();
for (i=0;i<160;i++)
for (j=0;j<128;j++)
LCD_DataWrite(DH,DL);
}
void Display_Desc()
{
Display_ASCII8X16(1,52,"MD:T18003");
Display_ASCII8X16(1,64,"Pro:T4528B00");
Display_ASCII8X16(1,76,"Dots:128*160");
Display_ASCII8X16(1,88,"IC: ST7735B");
Display_ASCII8X16(1,100,"VA:12 o'clock");
Display_ASCII8X16(1,112,"2015.12.6");
}
void Output_Pixel(uint x,uint y)
{
LCD_CtrlWrite_IC(0x2A); //Column Address Set ****
LCD_DataWrite_IC(x);//xsh
LCD_DataWrite_IC(x);//xsl
LCD_CtrlWrite_IC(0x2B);//Row Address Set ****
LCD_DataWrite_IC(y);//ysl
LCD_DataWrite_IC(y);//ysl
LCD_CtrlWrite_IC(0x2c);
LCD_DataWrite(0xff,0x00); //设置字体颜色
RamAdressSet();
}
void Display_ASCII8X16(uint x0,uint y0,uchar *s)
{
int i,j,k,x,y,xx;
unsigned char qm;
long int ulOffset;
char ywbuf[32],temp[2];
for(i = 0; i<strlen((char*)s);i++)
{
if(((unsigned char)(*(s+i))) >= 161)
{
temp[0] = *(s+i);
temp[1] = '\0';
return;
}
else
{
qm = *(s+i);
ulOffset = (long int)(qm) * 16;
for (j = 0; j < 16; j ++)
{
ywbuf[j]=Zk_ASCII8X16[ulOffset+j];
}
for(y = 0;y < 16;y++)
{
for(x=0;x<8;x++)
{
k=x % 8;
if(ywbuf[y]&(0x80 >> k))
{
xx=x0+x+i*8;
Output_Pixel(xx,y+y0);
}
}
}
}
}
}
//显示取模成数组后的汉字
void show_1_chinese(uchar x,uchar y,uchar code *dat)
{
uchar a;
uchar j=0;
uint tmp1=0;
uchar tmp2=0;
uchar i=0;
for(a=0;a<32;a=a+2,j++)
{
tmp1=dat[a];
tmp2=dat[a+1];
tmp1=(tmp1<<8)+tmp2;
for (i=0;i<16;i++)
{
if ((tmp1 >> i) & 1)
Output_Pixel(x*16+(16-i),y*16+j);
}
}
}
//从字库中显示汉字
void show_chinese(uchar x,uchar y,uchar code *dat)
{
unsigned char i;
for(i = 0; i < GB_16_num; i++)
{
if((GB_16[i].Index[0] == dat[0]) && (GB_16[i].Index[1] == dat[1])) break;
}
show_1_chinese(x,y,GB_16[i].Msk);
}
//显示汉字词组
//x:0-7
//y:0-9
//一行最多8个
void showsh(unsigned char x, unsigned char y, unsigned char code *dat)
{
while(*dat) {show_chinese(x++, y, dat); dat += 2;} //一个汉字GB码由2个字节组成
}
/*void main()
{
#ifdef MCU_STC12
P3M1 &= ~(1<<2), P3M0 |= (1<<2); //P3.2 set as push-pull output mode
#endif
lcd_initial();
write_command(0x2C);
dsp_single_colour(0x00,0x00);
showsh(0,0,"你好呀傻逼");
Display_Desc(); //版本
while(1);
}*/