📄 kb.c
字号:
/*******************************************************************/
#include "chinese.h"
#include "char.h"
#define LCD_Data (*((volatile unsigned char *) 0x83000000))
#define LCD_Command (*((volatile unsigned char *) 0x83000001))
//#define Blight_Addr (*((volatile unsigned long *) 0x83000002))
#define GRAPHIC_START_ADDR 0x0000
#define TEXT_START_ADDR 0x1000
BYTE textchar[255];
/*******************************************************************/
void Write_Control_Byte( BYTE Num,BYTE Add0,BYTE Add1,BYTE Command)
{
BYTE IC;
if (Num==0)
{
IC=0;
while((IC<100)&&((LCD_Command & 0x03)!=0x03))
{
IC=IC+1;
}
LCD_Command=Command;
}
else if(Num==1)
{
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data =Add0 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=Command;
}
else if(Num==2)
{
IC=0;
while ( (IC<100)&& ((LCD_Command & 0x03) != 0x03) )
{
IC=IC+1;
}
LCD_Data =Add0 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data =Add1 ;
IC=0;
while ( (IC<100)&& ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=Command;
}
else
return;
}
/*****************************************************************************/
void Clear_Text_Area(void)
{
UINT Addr ;
UINT IY ;
BYTE IC;
Addr=TEXT_START_ADDR; /*Clear Text Area*/
Write_Control_Byte(2,00 ,0x10,0x24);
Write_Control_Byte(0x00,0x00,0x00,0xB0);/*AUTO WR*/
for ( IY=0;IY<=127;IY++)/*16*8 Char*/
{
IC=0;
while ( (IC<100) && ((LCD_Command & 0x08)!=0x08) )
{
IC=IC+1;
}
LCD_Data=0x00;
}
IC=0;
while ( (IC<100) && ((LCD_Command & 0x08)!=0x08) )
{
IC=IC+1;
}
Write_Control_Byte(0x00,0x00,0x00,0xB2);/*Disable AUTO WR*/
}
/*****************************************************************************/
void Clear_Graphic_Area(void)
{
UINT IY ;
UINT Addr ;
BYTE IC;
Addr=GRAPHIC_START_ADDR; /*Clear GRAPHIC Area*/
Write_Control_Byte(2,00,00,0x24);
Write_Control_Byte(0x00,0x00,0x00,0xB0);/*AUTO WR*/
for(IY=0;IY<=1023;IY++)
{
IC=0;
while ((IC<100) && ((LCD_Command & 0x08)!=0x08) )
{
IC=IC+1;
}
LCD_Data=0x00;
}
IC=0;
while ( (IC<100) && ((LCD_Command & 0x08)!=0x08) )
{
IC=IC+1;
}
Write_Control_Byte(0x00,0x00,0x00,0xB2);/*Disable AUTO WR*/
}
/*****************************************************************************/
void Clear_Screen(void)
{
Clear_Text_Area();
Clear_Graphic_Area();
}
/*****************************************************************************/
void Init_LCD(void)
{
// UINT Temp ;
// Temp=TEXT_START_ADDR;
Write_Control_Byte(2,00,0x10,0x40);
// Temp=16; /*16 char width*/
Write_Control_Byte(2,16 ,00,0x41);
// Temp=GRAPHIC_START_ADDR;
Write_Control_Byte(2,00,00,0x42);/*Graphic Disp Start_Addr*/
// Temp=16; /*16 char width*/
Write_Control_Byte(2,16,00,0x43);/*Graphic Disp col.MAX=16*/
Write_Control_Byte(0,0x00,0x00,0x80);/*Method Set*/
Write_Control_Byte(0,0x00,0x00,0x9F);/*Text Cursor Blink*/
Write_Control_Byte(0,0x00,0x00,0xA7);
Write_Control_Byte(2,0x00,0x00,0x21);
Clear_Text_Area();
Clear_Graphic_Area();
}
/*************************************************************************/
void Write_One_Chinese( BYTE China, BYTE X, BYTE Y)
{
UINT Start_Addr ;
UINT Addr ;
UINT IX ;
BYTE IC;
Start_Addr=GRAPHIC_START_ADDR+(UINT) X+(UINT)Y*16;
for(IX=0;IX<16;IX++)
{
Addr=Start_Addr+IX*16 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data =Addr % 256 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data =Addr/256 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=0x24;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data =Chinese[China][IX*2+0];
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=0xC0;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data =Chinese[China][IX*2+1];
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=0xC0;
}
}
/*************************************************************************/
void Write_Chinese_String(BYTE *China_Ptr, BYTE Num, BYTE X,BYTE Y)
{
BYTE IX ;
if(Num==0) return;
for( IX=0;IX<Num;IX++)
{
Write_One_Chinese(China_Ptr[IX],X+IX*2,Y);
}
}
/*************************************************************************/
void Write_Blank_Chinese( BYTE Num,BYTE X,BYTE Y)
{
UINT Start_Addr ;
UINT Addr ;
UINT IX,IY,XX ;
BYTE IC;
if(Num==0) return;
Start_Addr=GRAPHIC_START_ADDR+ (UINT) X +(UINT)Y*16;
XX=Num;
for( IX=0;IX<XX;IX++)
{
for(IY=0;IY<16;IY++)
{
Addr =Start_Addr+IX*2+IY*16;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data = Addr % 256 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data = Addr / 256 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=0x24 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data =0 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=0xC0 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data =0 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=0xC0 ;
}
}
}
/*************************************************************************/
void Write_One_Char(BYTE Char,BYTE X, BYTE Y)
{
UINT Start_Addr ;
UINT Addr ;
UINT IY ;
BYTE IC;
Start_Addr=GRAPHIC_START_ADDR+(UINT) X + (UINT)Y *16;
for (IY=0;IY<8;IY++)
{
Addr =Start_Addr+IY*16 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data = Addr%256 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data = Addr/256 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=0x24 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data =Char_Set[Char][IY] ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=0xC0;
}
}
/*************************************************************************/
void Write_Char_String(BYTE *Char_Ptr,BYTE Num,BYTE X,BYTE Y)
{
BYTE IX;
if(Num==0) return;
for( IX=0;IX<Num;IX++)
{
Write_One_Char(Char_Ptr[IX],X+IX,Y);
}
}
/*************************************************************************/
void Write_Blank_Char(BYTE Num,BYTE X,BYTE Y)
{
UINT Start_Addr ;
UINT Addr ;
UINT IX,IY,XX ;
BYTE IC;
if(Num==0) return;
Start_Addr=GRAPHIC_START_ADDR+(UINT) X+(UINT)Y *16;
XX=Num;
for( IX=0;IX<XX;IX++)
{
for(IY=0;IY<8;IY++)
{
Addr =Start_Addr+IX+IY*16;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data = Addr% 256 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data = Addr/256;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=0x24 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Data =0 ;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x03)!=0x03) )
{
IC=IC+1;
}
LCD_Command=0xC0 ;
}
}
}
/*************************************************************************/
void Write_Text_String(BYTE *Buffer,BYTE Bytes,BYTE X,BYTE Y)
{
UINT Addr ;
BYTE IX ;
BYTE IC;
Addr=TEXT_START_ADDR+(UINT)X+(UINT)Y *16;
Write_Control_Byte(2,Addr % 256,Addr/256,0x24);
Write_Control_Byte(0x00,0x00,0x00,0xB0);/*AUTO WR*/
if(Bytes!=0)
{
for(IX=0;IX<Bytes;IX++)
{
IC=0;
while ( (IC<100) && ((LCD_Command & 0x08)!=0x08) )
{
IC=IC+1;
}
LCD_Data=Buffer[IX];
}
}
else
return;
IC=0;
while ( (IC<100) && ((LCD_Command & 0x08)!=0x08) )
{
IC=IC+1;
}
Write_Control_Byte(0x00,0x00,0x00,0xB2);/*Disable AUTO WR*/
}
/*************************************************************************/
void Write_Text_Char(BYTE Char,BYTE X,BYTE Y)
{
UINT Addr ;
Addr=TEXT_START_ADDR+(UINT) X+ ((UINT) Y)*16;
Write_Control_Byte(2,Addr % 256 ,Addr / 256,0x24);
// IC=0;
// while ( (IC<100) && ((LCD_Command & 0x03) != 0x03) )
// {
// IC=IC+1;
// }
// LCD_Data=Char;
Write_Control_Byte(1,Char,0x00,0xC4);/*One Write*/
}
/*************************************************************************/
void Set_Cursor(BYTE X,BYTE Y)
{
Write_Control_Byte(0x00,0x00,0x00,0x9F);/*Text Cursor Blink*/
Write_Control_Byte(2,X,Y,0x41);
}
/*************************************************************************/
void Close_Cursor(void) // ??????????????????
{
Write_Control_Byte(0x00,0x00,0x00,0x9D);/*Close Cursor*/
}
/*************************************************************************/
void Write_String( BYTE *Buffer,BYTE Bytes,BYTE X,BYTE Y)
{
Write_Text_String(Buffer,Bytes,X,Y);
}
/*************************************************************************/
void Write_Char( BYTE Char,BYTE X,BYTE Y)
{
UINT Addr ;
Addr=TEXT_START_ADDR+(UINT) X+(UINT) Y *16;
Write_Control_Byte(2,Addr % 256,Addr/256,0x24);
// IC=0;
// while ( (IC<250) && ((LCD_Command & 0x03)!=0x03) )
// {
// IC=IC+1;
// }
// LCD_Data=Char;
Write_Control_Byte(1,Char,0x00,0xC4); /*One Write*/
}
/*************************************************************************/
void Write_Data( UINT Value,BYTE X,BYTE Y,BYTE Byte_Size,BYTE BIN_OR_BCD)
{
UINT Temp ;
BYTE Buff[5];
BYTE I;
if(BIN_OR_BCD==YES) Temp=16;
else Temp=10;
Buff[4]= (Value % Temp) %256 ; Value=Value/Temp;
Buff[3]= (Value % Temp) %256 ; Value=Value/Temp;
Buff[2]= (Value % Temp) %256 ; Value=Value/Temp;
Buff[1]= (Value % Temp) %256 ; Value=Value/Temp;
Buff[0]= (Value );
for(I=0;I<=4;I++)
{
Buff[I]=CHAR_DIGITAL[Buff[I]];
}
Write_String(&Buff[5-Byte_Size],Byte_Size,X,Y);
}
/*************************************************************************/
//void Init_KeyBoard_Parameter(void)
//{
// Blight_Register =0xFF;
// Blight_Addr =0xff;
//}
/*****************************************************************************/
void Draw_Cover(void)
{
// Write_One_Chinese(90,4,8);
// Write_One_Chinese(90,0,0);
// Write_One_Char(0x12,4,24);
Write_One_Chinese(90,6,8);
Write_One_Chinese(90,6,24);
// Write_One_Char(0x21,5,24);
// Write_One_Char(0x21,5,32);
// Write_Text_Char(0x20,0,0);
// Write_Text_String(textchar,255,0,0);
}
/*****************************************************************************/
void KeyBoard_Init(void)
{
Init_LCD();
// Clear_Graphic_Area();
Draw_Cover();
// Close_Cursor();
}
/*************************************************************************/
int main(void)
{
BYTE ix;
for(ix=0;ix<=254;ix++)
textchar[ix]=ix;
KeyBoard_Init();
Draw_Cover();
// Write_Text_String(textchar,255,0,0);
while (1)
;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -