//Project: SBN0064 Dome
//MCU: 8051
//Control IC : SBN0064
//Crystal: 6MHz
//Compose LiQi
//Time:2010-05-31
#include <SBN0064.h>
/***************Delay****************
Function: Delay
Parameter:Time
***********************************/
void Delay(uint Time)
{
uint a,b;
for(b=Time;b>0;b--)
for(a=0xff;a>0;a--);
}
void Read_Staus()
{
do
{
Bus = 0xff;
RS = 0;
R_W = 1;
E = 1;
Nop;Nop;Nop;Nop;
E = 0;
}while(Bus&0x90);
}
void Write_Command(uchar Command)
{
Read_Staus();
Bus = Command;
RS = 0;
R_W = 0;
E = 1;
Nop;Nop;Nop;Nop;
E = 0;
}
void Write_Data(uchar Content)
{
Read_Staus();
Bus = Content;
RS = 1;
R_W = 0;
E = 1;
Nop;Nop;Nop;Nop;
E = 0;
}
void initial_lcm()
{
CS_All();
Write_Command(Display_OFF);
Write_Command(Strat_Line_Register);
Write_Command(Strat_Page_Address);
Write_Command(Strat_Column_Address);
Write_Command(Display_ON);
}
/*************Display Piece*********
Function: Write 1 Part random length Display Content to LCM
Parameter:X Y *P
*****************************/
void Display_Piece(uchar X,uchar Y,uchar Length,uchar High,uchar *P)
{
uchar Loop_X,Loop_y;
CS_All();
Write_Command(Strat_Line_Register|(Y%8));//Set left start line
for(Loop_y=(Y/8);Loop_y<(High/8+Y/8+((High%8)>0));Loop_y++)
{
for(Loop_X=X;Loop_X<(X+Length);Loop_X++)
{
CS_All();
Write_Command(Strat_Page_Address|Loop_y);//set lift page address
if(Loop_X<64)
{
CS_Lift();
Write_Command(Loop_X+Strat_Column_Address);//set lift column address
Write_Data(*P++);//Disolay content to left
}
else if(Loop_X>=64&&Loop_X<128)
{
CS_Mid();
Write_Command(Loop_X-64+Strat_Column_Address);//set right column address
Write_Data(*P++);//Display content to right
}
else
{
CS_Right();
Write_Command(Loop_X-128+Strat_Column_Address);//set right column address
Write_Data(*P++);//Display content to right
}
}
}
}
/*************Display Character*********
Function: Write a character to LCM
Parameter:X Y typeface table[]
*****************************/
void Display_character (uchar X,uchar Y,uchar Typeface,uchar table[])
{
switch(Typeface)
{
case _8x8: Display_Piece(X,Y,8,8,table);break;//display 8x8 typeface
case _8x16: Display_Piece(X,Y,8,16,table);break;//display 8x16 typeface
case _13x16: Display_Piece(X,Y,13,16, table);break;//display 13x16 typeface
case _16x16: Display_Piece(X,Y,16,16,table);break;//display 16x16 typeface
case _16x32: Display_Piece(X,Y,16,32,table);break;//display 16x32 typeface
case _23x32: Display_Piece(X,Y,23,32, table);break;//display 23x32 typeface
case _32x32: Display_Piece(X,Y,32,32,table);break;//display 32x32 typeface
default: break;
}
}
/*************Display_2Row_character*********
Function: Display 2 row character to LCM
Parameter:
*****************************/
void Display_1Sereen_character()
{
Display_character(16,0,_16x16,_0xB9E3);//广
Display_character(32,0,_16x16,_0xD6DD);//州
Display_character(48,0,_16x16,_0xCDAC);//同
Display_character(64,0,_16x16,_0xBBAA);//华
Display_character(80,0,_16x16,_0xCAB5);//实
Display_character(96,0,_16x16,_0xD2B5);//业
Display_character(112,0,_16x16,_0xD3D0);//有
Display_character(128,0,_16x16,_0xCFDE);//限
Display_character(144,0,_16x16,_0xB9AB);//公
Display_character(160,0,_16x16,_0xCBBE);//司
//**********************************
Display_character(35,16,_8x16,_0X54);//T
Display_character(43,16,_8x16,_0X47);//G
Display_character(51,16,_8x16,_0X31);// 1
Display_character(59,16,_8x16,_0X39);// 9
Display_character(67,16,_8x16,_0X32);// 2
Display_character(75,16,_8x16,_0X36);// 6
Display_character(83,16,_8x16,_0X34);// 4
Display_character(91,16, _8x16,_0X41);//A
Display_character(99,16,_16x16,_0xCFB5);//系
Display_character(115,16,_16x16,_0xC1D0);//列
Display_character(131,16,_8x16,_0X4C);//L
Display_character(139,16,_8x16,_0X43);//C
Display_character(147,16,_8x16,_0X4D);//M
//***********************************
Display_character(32,32,_16x16, _0xCDBC);//图
Display_character(48,32,_16x16, _0xD0CE);//形
Display_character(64,32,_16x16, _0xD2BA);//液
Display_character(80,32,_16x16, _0xBEA7);//晶
Display_character(96,32,_16x16, _0xCFD4);//显
Display_character(112,32,_16x16, _0xCABE);//示
Display_character(128,32,_16x16, _0xC4A3);//模
Display_character(144,32,_16x16, _0xBFE9);//块
//***********************************
Display_character(16,48,_8x16, _0X54);//T
Display_character(24,48,_8x16, _0X45);//E
Display_character(32,48,_8x16, _0X4C);//L
Display_character(40,48,_8x16, _0X3A);//:
Display_character(48,48,_8x16, _0X30);//0
Display_character(56,48,_8x16, _0X30);//0
Display_character(64,48,_8x16, _0X38);//8
Display_character(72,48,_8x16, _0X36);//6
Display_character(80,48,_8x16, _0X2D);//-
Display_character(88,48,_8x16, _0X32);//2
Display_character(96,48,_8x16, _0X30);//0
Display_character(104,48,_8x16, _0X2D);//
Display_character(112,48,_8x16, _0X38);//8
Display_character(120,48,_8x16, _0X32);//2
Display_character(128,48,_8x16, _0X32);//2
Display_character(136,48,_8x16, _0X35);//5
Display_character(144,48,_8x16, _0X33);//3
Display_character(152,48,_8x16, _0X36);//6
Display_character(160,48,_8x16, _0X37);//7
Display_character(168,48,_8x16, _0X37);//7
}
/*************Display_2Row_character*********
Function: Display 1 screen content
Parameter:table[]
*****************************/
void Display_1Screen(uchar table[])
{
Display_Piece(0, 0,192,64, table);
}
/*************Display_Testr*********
Function: Display 2 fixate content
Parameter:Num1 Num2
*****************************/
void Display_Test(uchar Num1,uchar Num2)
{
uchar i,j;
for(i=0;i<8;i++)
{
CS_All();
Write_Command(Strat_Line_Register);
Write_Command(Strat_Page_Address+i);
Write_Command(Strat_Column_Address);
for(j=0;j<64;j++)
{
if(j%2) Write_Data(Num1);
else Write_Data(Num2);
}
}
}
void Clear()
{
Display_Test(0x00,0x00);
}
void main()
{
RST=1;
Delay(200);
RST=0;
Delay(200);
RST=1;
initial_lcm();
while(1)
{
Display_1Screen(table1);
Delay(500);
Display_1Screen(table2);
Delay(500);
Clear();
Display_1Sereen_character();
Delay(500);
Display_Test(0xff, 0xff);
Delay(500);
Display_Test(0x00, 0xff);
Delay(500);
Display_Test(0xff, 0x00);
Delay(500);
Display_Test(0x55, 0x55);
Delay(500);
Display_Test(0xaa, 0xaa);
Delay(500);
Display_Test(0xaa, 0x55);
Delay(500);
Display_Test(0x00, 0x00);
Delay(500);
Clear();
}
}