📄 lcd.c
字号:
/*-- 文字: 均 --*/
0x08,0x08,0xFF,0x88,0x90,0x0C,0x17,0xA4,0x84,0x04,0xFC,0x00,0x03,0x01,0x01,0x00, //55
0x00,0x01,0x01,0x04,0x04,0x04,0x03,0x00,
/*-- 文字: 每 --*/
0x28,0x24,0xFB,0x2A,0x2A,0xFA,0x2A,0x2A,0xFA,0x23,0x22,0x00,0x00,0x01,0x01,0x01, //56
0x01,0x01,0x05,0x05,0x03,0x01,0x01,0x00,
/*-- 文字: 内 --*/
0x00,0xFC,0x04,0x84,0x64,0x1F,0x24,0xC4,0x04,0xFC,0x00,0x00,0x00,0x07,0x01,0x00, //57
0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,
/*-- 文字: 证 --*/ //58
0x11,0xF6,0x00,0x02,0xF2,0x02,0x02,0xFE,0x22,0x23,0x22,0x00,0x00,0x07,0x02,0x04,
0x07,0x04,0x04,0x07,0x04,0x04,0x04,0x00,
};
/* LCD Registers */
#define X_ADRESS 0xB8 /* Adress base for Page 0 */
#define Y_ADRESS 0x40 /* Adress base for Y0 */
#define START_LINE 0xC0 /* Adress base for line 0 */
#define DISPLAY_ON 0x3F /* Turn display on */
#define DISPLAY_OFF 0x3E /* Turn display off */
/* General use definitions */
#define RIGHT 0
#define LEFT 1
#define BUSY 0x80
//***********************************************
void LcdDelay(U8 u32Duration)
{
U8 u32Delay,i;
for (u32Delay=0; u32Delay<u32Duration; u32Delay++)
{
for (i=0; i<10; i++);
}
}
//*****************************************************
void Set_LCD_DATA(U8 u8LcdData)
{
rPDATC=(rPDATC & (~0xFF) ) | u8LcdData;
}
//*****************************************************
// rPDATC GPC10 GPC9 GPC8
// E2 E1 RS
//
//*****************************************************
void LcdInstructionWrite (U8 u8Instruction,U8 u8LcdSide)
{
if(u8LcdSide == LEFT)
{
rPDATC = (rPDATC & (~(0x7<<8)) ); //E2=0,E1=0,RS=0
LcdDelay(1);
rPDATC = (rPDATC | (2<<8)); //E2=0,E1=1,RS=0
LcdDelay(1);
Set_LCD_DATA(u8Instruction);
LcdDelay(2);
rPDATC = (rPDATC & (~(0x7<<8)) ); //E2=0,E1=0,RS=0
}
else
{
rPDATC = (rPDATC & (~(0x7<<8)) ); //E2=0,E1=0,RS=0
LcdDelay(1);
rPDATC = (rPDATC | (4<<8)); //E2=1,E1=0,RS=0
LcdDelay(1);
Set_LCD_DATA(u8Instruction);
LcdDelay(2);
rPDATC = (rPDATC & (~(0x7<<8)) ); //E2=0,E1=0,RS=0
}
}
//*****************************************************
void LcdDataWrite (U8 u8Data,U8 u8LcdSide)
{
if(u8LcdSide == LEFT)
{
rPDATC = (rPDATC & (~(0x7<<8)) ) | (1<<8); //E2=0,E1=0,RS=1
LcdDelay(1);
rPDATC = (rPDATC | (2<<8)); //E2=0,E1=1,RS=1
LcdDelay(1);
Set_LCD_DATA(u8Data);
LcdDelay(2);
rPDATC = (rPDATC & (~(2<<8)) ); //E2=0,E1=0,RS=1
}
else
{
rPDATC = (rPDATC & (~(0x7<<8)) ) | (1<<8); //E2=0,E1=0,RS=1
LcdDelay(1);
rPDATC = (rPDATC | (4<<8)); //E2=1,E1=0,RS=1
LcdDelay(1);
Set_LCD_DATA(u8Data);
LcdDelay(2);
rPDATC = (rPDATC & (~(4<<8)) ); //E2=0,E1=0,RS=1
}
}
//*****************************************************
void GLCD_LcdInit(void)
{
LcdInstructionWrite(DISPLAY_OFF,LEFT); /* Display OFF */
LcdInstructionWrite(START_LINE,LEFT);
LcdInstructionWrite(X_ADRESS,LEFT);
LcdInstructionWrite(Y_ADRESS,LEFT);
LcdInstructionWrite(DISPLAY_ON,LEFT); /* Display ON */
LcdInstructionWrite(DISPLAY_OFF,RIGHT); /* Display OFF */
LcdInstructionWrite(START_LINE,RIGHT);
LcdInstructionWrite(X_ADRESS,RIGHT);
LcdInstructionWrite(Y_ADRESS,RIGHT);
LcdInstructionWrite(DISPLAY_ON,RIGHT); /* Display ON */
}
void GLCD_ClearScreen (U8 value1)
{
U8 u8Page=0;
U8 u8Column=0;
/* process the 8 pages of the LCD */
for (u8Page = 0; u8Page < 8; u8Page++)
{
LcdInstructionWrite(X_ADRESS | u8Page,LEFT); /* Set the page number */
LcdInstructionWrite(Y_ADRESS,LEFT); /* Set column to 0 */
/* process a page on both sides */
for (u8Column = 0; u8Column < 128; u8Column++)
{
if (u8Column == 64)
{
LcdInstructionWrite(X_ADRESS | u8Page,RIGHT); /* Set the page number */
LcdInstructionWrite(Y_ADRESS,RIGHT); /* Set column to 0 */
}
if (u8Column < 64)
LcdDataWrite (value1,LEFT); /* erase a column */
else
LcdDataWrite (value1,RIGHT); /* erase a column */
}
}
}
void Lcd_char(U8 x_addr,U8 y_addr,U8 offset)
{
U8 i,temp;
if(y_addr<64)
temp = LEFT;
else
temp = RIGHT;
LcdInstructionWrite(START_LINE,temp);
LcdInstructionWrite(Y_ADRESS | y_addr,temp);
LcdInstructionWrite(X_ADRESS | x_addr,temp);
for(i=0;i<5;i++)
LcdDataWrite (au8FontSystem5x8[offset*5+i],temp);
}
//******************************************************8
void Lcd_Chinese(U8 x_addr,U8 y_addr,U8 offset)
{
U8 i,temp;
if(y_addr<64)
temp = LEFT;
else
temp = RIGHT;
LcdInstructionWrite(START_LINE,temp);
LcdInstructionWrite(Y_ADRESS | y_addr,temp);
LcdInstructionWrite(X_ADRESS | x_addr,temp);
for(i=0;i<12;i++)
LcdDataWrite (au8FontSystem12x12[offset*24+i],temp);
LcdInstructionWrite(START_LINE,temp);
LcdInstructionWrite(Y_ADRESS | y_addr,temp);
LcdInstructionWrite(X_ADRESS | (x_addr+1),temp);
for(i=0;i<12;i++)
LcdDataWrite (au8FontSystem12x12[12+offset*24+i],temp);
}
//***********************display************************
void set_date(U8 x_addr,U8 y_addr,U8 * buffer)
{
// for(i=0;i<8;i++)
Lcd_char(x_addr,y_addr, ((*buffer)>>4)); //(buff[high_addr+6]>>4));
Lcd_char(x_addr,y_addr+5,((*buffer)&0x0f));
Lcd_char(x_addr,y_addr+10,10);
Lcd_char(x_addr,y_addr+14,((*(buffer+1))>>4));
Lcd_char(x_addr,y_addr+19,((*(buffer+1))&0x0f));
Lcd_char(x_addr,y_addr+24,10);
Lcd_char(x_addr,y_addr+28,((*(buffer+2))>>4));
Lcd_char(x_addr,y_addr+33,((*(buffer+2))&0x0f));
}
void set_time(U8 x_addr,U8 y_addr,U8 * buffer) //bcd code
{
Lcd_char(x_addr,y_addr, ((*buffer)>>4)); //(buff[high_addr+9]>>4));
Lcd_char(x_addr,y_addr+5, ((*buffer)&0x0f));
Lcd_char(x_addr,y_addr+10,11);
Lcd_char(x_addr,y_addr+15,((*(buffer+1))>>4));
Lcd_char(x_addr,y_addr+20,((*(buffer+1))&0x0f));
Lcd_char(x_addr,y_addr+25,11); //:11
Lcd_char(x_addr,y_addr+30,((*(buffer+2))>>4));
Lcd_char(x_addr,y_addr+35,((*(buffer+2))&0x0f));
}
void set_date_time(U8 x_addr,U8 y_addr,U8 * buffer)
{
Lcd_char(x_addr,y_addr, ((*buffer)>>4)); //(buff[high_addr+6]>>4));
Lcd_char(x_addr,y_addr+5,((*buffer)&0x0f));
Lcd_char(x_addr,y_addr+10,10);
Lcd_char(x_addr,y_addr+15,((*(buffer+1))>>4));
Lcd_char(x_addr,y_addr+20,((*(buffer+1))&0x0f));
Lcd_char(x_addr,y_addr+25,10);
Lcd_char(x_addr,y_addr+30,((*(buffer+2))>>4));
Lcd_char(x_addr,y_addr+35,((*(buffer+2))&0x0f));
//Lcd_char(x_addr,y_addr+40,10);
Lcd_char(x_addr,y_addr+45,((*(buffer+3))>>4));
Lcd_char(x_addr,y_addr+50,((*(buffer+3))&0x0f));
Lcd_char(x_addr,y_addr+55,11); //:11
Lcd_char(x_addr,y_addr+60,((*(buffer+4))>>4));
Lcd_char(x_addr,y_addr+65,((*(buffer+4))&0x0f));
}
void set_menu(void)
{
Lcd_Chinese(0,0,2); //shi
Lcd_Chinese(0,12,3); //jian
Lcd_Chinese(2,0,18); //dai
Lcd_Chinese(2,12,19); //ma
Lcd_Chinese(2,64,8); //su
Lcd_Chinese(2,76,9); //du
Lcd_char(2,107,12) ; //k
Lcd_char(2,112,13);//m
Lcd_char(2,117,14);//"/"
Lcd_char(2,122,15);//h
Lcd_Chinese(4,0,4); //ning
Lcd_Chinese(4,12,10); //lian
Lcd_Chinese(4,24,11); //xu
Lcd_Chinese(4,36,12); //xing
Lcd_Chinese(4,48,13); //shi
Lcd_Chinese(4,103,14); //fen
Lcd_Chinese(4,115,15); //zong
Lcd_Chinese(6,0,39); //zong
Lcd_Chinese(6,12,40); //li
Lcd_Chinese(6,24,41); //ceng
Lcd_Chinese(6,103,42); //gong
Lcd_Chinese(6,115,40); //li
}
void run_screen_time(U8 Disp_Choice)
{
if (Disp_Choice==0) //time
{
Get_Rtc();
Lcd_char(2,8, date_t[3]/10); //hour
Lcd_char(2,16,date_t[3]%10); //
Lcd_char(2,24,11); //:
Lcd_char(2,32,date_t[4]/10); //minute
Lcd_char(2,40,date_t[4]%10); //
Lcd_char(2,48,11); //:
Lcd_char(2,56,date_t[5]/10); //second
Lcd_char(2,64,date_t[5]%10); //
}
}
void Display_Date(void)
{
Lcd_char(6,8, 2); //2
Lcd_char(6,16,0); //0
Lcd_char(6,24,date_t[0]/10); //year
Lcd_char(6,32,date_t[0]%10); //
Lcd_char(6,40,14); //:
Lcd_char(6,48,date_t[1]/10); //month
Lcd_char(6,56,date_t[1]%10); //
Lcd_char(6,64,14); //:
Lcd_char(6,72,date_t[2]/10); //day
Lcd_char(6,80,date_t[2]%10); //
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -