📄 lcd.c
字号:
#include "reg58.h"
#include "intrins.h"
#define _LCD_C_
#include "lcd.h"
#include "define.h"
#include "timer.h"
#include "bus.h"
#include "sram.h"
#include "system.h"
#include "clock.h"
#include "setup.h"
#include "keypad.h"
unsigned char idata dispbuff[2][16];
unsigned char code dispmessage[][16]=
{
{"Finger_000 [F1]"},
{" Input Password "},
{"Put your finger "},
{"Master Password:"},
{" Mode selection "},
{"ID ONLY "},
{"ID+FINGER(P/W) "},
{"ID+P/W+FINGER "},
{" TIME SETTING "},
{"YYYYMMDDhhmmssW "},
{"TYPE SELECTION "},
{" APB SETUP "},
{"COMM ID SETTING "},
{"DURESS MODE SET "},
{"SET DURESS P/W "},
{"BAUD RATE SETUP "},
{"4800 "},
{"9600 "},
{"19200 "},
{"38400 "},
{" EVENT CLEAR "},
{"1 - YES, 0 - NO "},
{"MASTER ID CHANGE"},
{" SYS INITIALIZE "},
{" ID CLEAR "},
{"TIME SCHE CLEAR "},
{" TIME SCHEDULE "},
{"T/S : 01 HOL 1"},
{" HOLIDAY DEFINE "},
{"HOL TS:01 #01 "},
{" IN/OUT DEFINE "},
{"1. Exit Button "},
{"2. Door Contact "},
{"3. AUX1 "},
{"4. AUX2 "},
{"5. Tamper S/W "},
{"6. R1 ID OK "},
{"7. R1 ID Error "},
{"8. R1 T/S Error "},
{"9. R1 APB Error "},
{"10. R2 ID OK "},
{"11. R2 ID Error "},
{"12. R2 T/S Error"},
{"13. R2 APB Error"},
{"14. DURESS MODE "},
{"15. Output T/S "},
{"16. IN/OUT T/S "},
{" HOLIDAY INDEX "},
{"T/S Index : "},
{"H/D Index : "},
{" MODE INDEX "},
{" LCD DISPLAY "},
{"STATUS "},
{"CARD NO "},
{" OUTPUT TIME "},
{"0.1 SEC "},
{"1 SEC "},
{"ID REGISTRATION "},
{" Key Input ID "},
{" -> ________ "},
{"PW____TS__RD_FP_"},
{"TO REGISTER FP "},
{"PUT YOUR FP ON: "},
{"LIFT AND PUT FP "},
{"WAITTING... "},
{"ID REGISTERED! "},
{" ID DELETE "},
{" Enter Card No. "},
{" ID DELETEED "},
{" ID LIST "},
{" ID LIST TOP "},
{" ID LIST BOTTOM "},
{" ID COUNT "},
{" EVENT COUNT "},
{" F/W version "},
{" V00.00 "},
{" OUTPUT TEST "},
{" LCD TEST "},
{" READER TEST "},
{" INPUT TEST "},
{" COMM TEST "},
{" "},
{"USE "},
{"NOT USE "},
{" RAM TEST "},
{" KEYPAD TEST "},
{" [____] "},
{" INPUT ID "},
{"ENABLE "},
{"DISABLE "},
{" SET PIN KEY IN "},
{"TS : HOL "},
{" : - : "},
{"HOL : # "},
{" / : : "},
{"BANK = "},
{" RAM TESTING... "},
{"RAM test PASS!!!"},
{"RAM test FAIL!!!"},
{"Press any key..."},
{" OUTPUT "},
{" ON "},
{" OFF "},
{" Registed ID! "},
{" Unregisted ID! "},
{"USER SPACE EMPTY"},
{"SYS INITIALED! "},
{"Input New Master"},
{" [________] "},
{" Master ID! "},
{" FIM SELECT "},
{"LIFT & PUT AGAIN"},
{"USER SPACE FULL!"},
{"ID REGISTER FAIL"},
{" ACCESS GRANTED "},
{" ACCESS DENIED "},
{" ANTI PASS BACK "},
{"TIME SCHE ERROR "},
{" PASSWORD ERROR "},
{" FP ERROR "},
{"PUT OLDMaster FP"},
{"MASTER CHANGE OK"},
{" CHANGE FAILED "},
{" MASTER ID == 0 "},
{"0123456789ABCDEF"},
{"INITIALIZING...."},
{" READER 1 "},
{" READER 2 "},
{" SCANNING...... "},
{"ACCESS DOOR ERR "},
{" CLEANING ... "},
{" COMM TEST PASS "},
{" COMM TEST FAIL "},
{" COMM TESTING.. "},
{" REMOVE WIRES "},
{"FP ONLY "}
};
void lcdsetrs()
{
DATAPORT=2;
SEL573L=1;
_nop_();
SEL573L=0;
}
void lcdclrrs()
{
DATAPORT=0;
SEL573L=1;
_nop_();
SEL573L=0;
}
void write_command(unsigned char cmd)
{
lcdclrrs();
//LCDRS=0;
//LCDRW=0;
LCDDATA=cmd;
LCDEN=1;
_nop_();
LCDEN=0;
}
void write_data(unsigned char lcddata)
{
//LCDRS=1;
//LCDRW=0;
lcdsetrs();
LCDDATA=lcddata;
LCDEN=1;
_nop_();
LCDEN=0;
}
/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
void displaybyte(unsigned char dispdata,unsigned char dispposi)
{
write_command(dispposi);
delay50us();
//delay50us();
write_data(dispdata);
delay50us();
}
////////////////////////////////////////////////////////////////////////
void display(unsigned char line)
{
unsigned char i;
if(line==LINE1)
{
write_command(SET_DDRAM_ADD);
delay50us();
for(i=0;i<16;i++)
{
write_data(dispbuff[0][i]);
delay50us();
}
}
else
{
write_command(SET_DDRAM_ADD+0X40);
delay50us();
for(i=0;i<16;i++)
{
write_data(dispbuff[1][i]);
delay50us();
}
}
}
void displaymessage(unsigned char lmess,unsigned char line)
{
//buffcopy(dispmessage[lmess],dispbuff[line],16);
unsigned char i;
for(i=0;i<16;i++)
{
dispbuff[line][i]=dispmessage[lmess][i];
}
//code2disp(dispmessage[lmess],line);
//code2idata(dispmessage[lmess],dispbuff[line],16);
display(line);
}
void displayMain()
{
unsigned char i;
for(i=0;i<16;i++)
{
dispbuff[LINE1][i]=dispmessage[LMMAIN][i];
}
dispbuff[LINE1][14]=readFunctions()+'1';
display(LINE1);
}
//////////////////////////////////////////////////////////////////////////////////
void displaytimeee()
{
dispbuff[1][0]=' ';
dispbuff[1][1]=datetime[DTMON]/10+0X30;
dispbuff[1][2]=datetime[DTMON]%10+0X30;
dispbuff[1][3]='/';
dispbuff[1][4]=datetime[DTDAY]/10+0X30;
dispbuff[1][5]=datetime[DTDAY]%10+0X30;
dispbuff[1][6]=' ';
dispbuff[1][7]=datetime[DTHUR]/10+0X30;
dispbuff[1][8]=datetime[DTHUR]%10+0X30;
dispbuff[1][9]=':';
dispbuff[1][10]=datetime[DTMIN]/10+0X30;
dispbuff[1][11]=datetime[DTMIN]%10+0X30;
dispbuff[1][12]=':';
dispbuff[1][13]=datetime[DTSEC]/10+0X30;
dispbuff[1][14]=datetime[DTSEC]%10+0X30;
dispbuff[1][15]=' ';
display(LINE2);
}
void displaytime()
{
//getdatetime(tempbuff);
if(setflag)return;
if(passinflag)return;
displaytimeee();
}
void init_lcd()
{
LCDEN=0;
write_command(CLR_DISP);
delayTimerl(T5MS);
write_command(DISP_B8_L2_H7);
delayTimerl(T5MS);
write_command(CUR_INC);
delayTimerl(T5MS);
write_command(DISP_ON_CUR_B);
delayTimerl(T5MS);
write_command(CLR_DISP);
delayTimerl(T5MS);
write_command(DISP_B8_L2_H7);
delayTimerl(T5MS);
//write_command(CUR_BACK);
//delay(T5MS);
//delay(T5MS);
//write_command(DISP_B8_L2_H7);
//delay(T5MS);
//displaymessage(0,0);
displayMain();
}
//////////////////////////////////////////////////////////////////
void lcdcuron(unsigned char position,unsigned char line)
{
if(position>=16)return;
if(!line)
{
write_command(SET_DDRAM_ADD+position);
delay50us();
}
else
{
write_command(SET_DDRAM_ADD+0X40+position);
delay50us();
}
//write_command(DISP_ON_NCUR_B);
}
//////////////////////////////////////////////////////////////////
void displayshort(unsigned short dispdata,unsigned char count,unsigned char startposi)
{
unsigned char line,i;
if(startposi>=32)return;
hex2bcd(dispdata);
if(startposi>=16)
{
line=LINE2;
startposi-=16;
}
else line=LINE1;
for(i=0;i<count;i++)
{
dispbuff[line][startposi+i]=tempbuff[5-count+i]+0x30;
}
display(line);
}
/////////////////////////////////////////////////////////////////////////////////////
void displaybcd(unsigned char dispdata,unsigned char startposi)
{
unsigned char line;
if(startposi>=32)return;
if(startposi>=16)
{
line=LINE2;
startposi-=16;
}
else
{
line=LINE1;
}
dispbuff[line][startposi]=(dispdata>>4)+0x30;
dispbuff[line][startposi+1]=(dispdata&0xf)+0x30;
display(line);
}
/////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -