📄 lcd.h
字号:
void mystrcpy(BYTE *str)
{
BYTE i;
for(i=0; i<16; i++)
LCD_buf[i]=str[i];
}// Pass
void LCD_fillbuf(BYTE c)
{
BYTE i;
for(i=0; i<16; i++)
LCD_buf[i]=c;
}// Pass
void LCD_delay(void)
{
B_373_4=1; B_373_4=0; // send command data
D373_3 |= LCD_E_MASK; OUT_373_3 // LCD_E=1
D373_3 &= ~LCD_E_MASK; OUT_373_3 // LCD_E=0
EA=1;
}// Pass
void LCD_sendcommand(BYTE m_s, BYTE command)
{
if(m_s&1){ // Master
EA=0;
D373_3 |= LCD_CS1_MASK; // LCD_CS1=1
D373_3 &= ~(LCD_A0_MASK+LCD_CS2_MASK); // LCD_CS2=0 LCD_A0=0
OUT_373_3
P0=command;
LCD_delay();
}
if(m_s&2){ // Slave
EA=0;
D373_3 |= LCD_CS2_MASK; // LCD_CS2=1
D373_3 &= ~(LCD_A0_MASK+LCD_CS1_MASK); // LCD_CS1=0 LCD_A0=0
OUT_373_3
P0=command;
LCD_delay();
}
}// Pass
void LCD_senddata(BYTE m_s, BYTE command)
{
if(m_s&1){ // Master
EA=0;
D373_3 |= (LCD_CS1_MASK+LCD_A0_MASK); // LCD_CS1=1 LCD_A0=1
D373_3 &= ~LCD_CS2_MASK; // LCD_CS2=0
OUT_373_3
P0=command;
LCD_delay();
}
if(m_s&2){ // Slave
EA=0;
D373_3 |= (LCD_CS2_MASK+LCD_A0_MASK); // LCD_CS2=1 LCD_A0=1
D373_3 &= ~LCD_CS1_MASK; // LCD_CS1=0
OUT_373_3
P0=command;
LCD_delay();
}
}// Pass
void LCD_setXaddr(BYTE m_s, BYTE x)
{
LCD_sendcommand(m_s, 0xB8+x);
}// Pass
void LCD_setYaddr(BYTE m_s, BYTE y)
{
LCD_sendcommand(m_s, 0x40+y);
}// Pass
void LCD_clearline(BYTE row) // row=0/2/4/6
{
BYTE i1,i2;
for(i1=0; i1<2; i1++){
LCD_setXaddr(3, row+i1);
LCD_setYaddr(3, 0);
for(i2=64; i2>0; i2--)
LCD_senddata(3, 0);
}
}// Pass
void LCD_clrscr(void)
{
BYTE row;
for(row=0; row<8; row+=2)
LCD_clearline(row);
}// Pass
void LCD_writeline(BYTE line)
{
WORD p;
BYTE i,i1,i2,k1,k2,ch1;
k1=k2=0;
LCD_sendcommand(3, 0xC0); // Set start line=0
for(i1=0; i1<16; i1++){
ch1=LCD_buf[i1];
if(ch1==0xFF){ // 0xFF is NULL char,write nothing
k1+=8; k2=k1;
continue;
}
if(ch1<0x80){ // Asc chars
LCD_setXaddr(3, line); // Set line 0
Set_28F040_Page(1);
p=0x2800+(ch1*16); // ASC char in FLASH is A800-AFFF(2KB)
for(i2=8; i2>0; i2--){
if(k1<64){
LCD_setYaddr(1, k1);
LCD_senddata(1, Flash[p]);
}else{
LCD_setYaddr(2, k1-64);
LCD_senddata(2, Flash[p]);
}
p++; k1++;
}
LCD_setXaddr(3, line+1); // Set line 1
for(i2=8; i2>0; i2--){
if(k2<64){
LCD_setYaddr(1, k2);
LCD_senddata(1, Flash[p]);
}else{
LCD_setYaddr(2, k2-64);
LCD_senddata(2, Flash[p]);
}
p++; k2++;
}
}else{ // Chinese chars
i1++;
p=(ch1-0xa1)*94+(LCD_buf[i1]-0xa1);
i=p/1024;
Set_28F040_Page(i);
p=(p-(i*1024))*32;
LCD_setXaddr(3, line); // Set line 0
for(i2=16; i2>0; i2--){
if(k1<64){
LCD_setYaddr(1, k1);
LCD_senddata(1, Flash[p]);
}else{
LCD_setYaddr(2, k1-64);
LCD_senddata(2, Flash[p]);
}
p++; k1++;
}
LCD_setXaddr(3, line+1); // Set line 1
for(i2=16; i2>0; i2--){
if(k2<64){
LCD_setYaddr(1, k2);
LCD_senddata(1, Flash[p]);
}else{
LCD_setYaddr(2, k2-64);
LCD_senddata(2, Flash[p]);
}
p++; k2++;
}
}
}
}// Pass
void LCD_open(void)
{
BYTE i;
LCD_sendcommand(3, 0x3F); // LCD reset
LCD_sendcommand(3, 0xC0); // LCD start line=0
for(i=0; i<8; i+=2) // LCD clear screen
LCD_clearline(i);
}// Pass
void LCD_ShowStatus(void)
{
BYTE i;
BYTE code *F;
#ifdef CHINESE
BYTE code SHB_[]=" 上 班";
BYTE code XIB_[]=" 下 班";
BYTE code JBS_[]="加班上";
BYTE code JBX_[]="加班下";
BYTE code LSJ_[]=" 外 入";
BYTE code LSC_[]=" 外 出";
#else
BYTE code SHB_[]=" Work ";
BYTE code XIB_[]=" Home ";
BYTE code JBS_[]="tmp In";
BYTE code JBX_[]="tmpOut";
BYTE code LSJ_[]="ComeIn";
BYTE code LSC_[]="Go out";
#endif
for(i=0; i<9; i++)
LCD_buf[i]=0xFF;
switch(Sys_Stat){
case SB: F=SHB_; break;
case XB: F=XIB_; break;
case JBS: F=JBS_; break;
case JBX: F=JBX_; break;
case LSJ: F=LSJ_; break;
case LSC: F=LSC_; break;
}
for(i=9; i<16; i++){
LCD_buf[i]=*F;
F++;
}
LCD_writeline(2);
}// Pass
void LCD_ShowTime(void)
{
BYTE i;
HT1380_ReadTime();
LCD_buf[0]=(Time_buf[2]>>4)+'0';
LCD_buf[1]=(Time_buf[2]&0x0F)+'0';
LCD_buf[2]=':';
LCD_buf[3]=(Time_buf[1]>>4)+'0';
LCD_buf[4]=(Time_buf[1]&0x0F)+'0';
LCD_buf[5]=':';
LCD_buf[6]=(Time_buf[0]>>4)+'0';
LCD_buf[7]=(Time_buf[0]&0x0F)+'0';
for(i=8; i<16; i++)
LCD_buf[i]=0xFF;
LCD_writeline(2);
}// Pass
void LCD_ShowRiqi(void)
{
BYTE i;
#ifdef CHINESE
BYTE code XingQi[]={0xD2,0xBB,0xB6,0xFE,0xC8,0xFD,0xCB,0xC4,0xCE,0xE5,0xC1,0xF9,0xC8,0xD5};
LCD_buf[0]=(Time_buf[4]>>4)+'0'; LCD_buf[1]=(Time_buf[4]&0x0F)+'0'; // 月
LCD_buf[2]=0xD4; LCD_buf[3]=0xC2; // 月
LCD_buf[4]=(Time_buf[3]>>4)+'0'; LCD_buf[5]=(Time_buf[3]&0x0F)+'0'; // 日
LCD_buf[6]=0xC8; LCD_buf[7]=0xD5; // 日
LCD_buf[8]=' ';
LCD_buf[9]=0xD0; LCD_buf[10]=0xC7; // 星
LCD_buf[11]=0xC6; LCD_buf[12]=0xDA; // 期
i=(Time_buf[5]-1)*2;
LCD_buf[13]=XingQi[i];
LCD_buf[14]=XingQi[i+1];
LCD_buf[15]=' ';
#else
BYTE code XingQi[]={'M','o','n','T','u','e','W','e','d','T','h','u','F','r','i','S','a','t','S','u','n'};
LCD_buf[0]=LCD_buf[11]=LCD_buf[15]=' '; LCD_buf[3]=LCD_buf[6]='/';
LCD_buf[1]=(Time_buf[4]>>4)+'0'; LCD_buf[2]=(Time_buf[4]&0x0F)+'0'; // 月
LCD_buf[4]=(Time_buf[3]>>4)+'0'; LCD_buf[5]=(Time_buf[3]&0x0F)+'0'; // 日
LCD_buf[7]='2'; LCD_buf[8]='0'; // Year 20xx
LCD_buf[9]=(Time_buf[6]>>4)+'0'; LCD_buf[10]=(Time_buf[6]&0x0F)+'0';// 年
i=(Time_buf[5]-1)*3;
LCD_buf[12]=XingQi[i];
LCD_buf[13]=XingQi[i+1];
LCD_buf[14]=XingQi[i+2];
#endif
LCD_writeline(0);
}// Pass
void LCD_Show_Card_no(void)
{
BYTE i,j;
LCD_fillbuf(' ');
for(i=0; i<7; i++){
j=ID_Card_no[i]>>4;
if(j<10)
LCD_buf[i*2+1]=j+'0';
else
LCD_buf[i*2+1]=j+('A'-10);
j=ID_Card_no[i]&0xF;
if(j<10)
LCD_buf[i*2+2]=j+'0';
else
LCD_buf[i*2+2]=j+('A'-10);
}
LCD_writeline(2);
}// Pass
void LCD_calc_User_id(void)
{
WORD w;
BYTE p;
w=User_id;
p=14;
while(w>0){
LCD_buf[p]=(w%10)+'0';
p--;
w=w/10;
}
}// Pass
void LCD_Show_User(void)
{
BYTE i;
LCD_clearline(4);
LCD_fillbuf(' ');
for(i=0; i<8; i++)
LCD_buf[i]=Flash[Flash_p+7+i];
User_id=Flash[Flash_p+16]*256+Flash[Flash_p+15];
LCD_calc_User_id();
LCD_writeline(4);
}// Pass
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -