📄 disp.c
字号:
#include "dtm_v3.h"
#include "dtm.h"
#include "externdef.h"
#include "HZ.h"
#include <stdio.h>
void DispLCDSetPinAo(_BYTE cFlag);
void DispLCDSetPinEnable(_BYTE cFlag);
void DispLCDSetPinCs1(_BYTE cFlag);
void DispLCDSetPinCs2(_BYTE cFlag);
void DispLCDWriteCommand(_BYTE cCommand);
void DispLCDWriteData(_BYTE cData);
void DispLCDInit(void);
void DispLCDClearScreen(void);
void DisplayMessage(_BYTE cRetCode,_BYTE cPage,_BYTE cSecond,_BYTE cWait,_BYTE cRecovery);
void DisplayRecoveryMessage(_BYTE cPage,_BYTE cRecovery);
void DispClearVideoBuf(_BYTE cPage,_BYTE cCol,_BYTE cHeight,_BYTE cWidth);
_BYTE DispOutText(_BYTE cPage,_BYTE cCol,_BYTE cLen,_BYTE *cpText);
_BYTE DispOutImage(_BYTE cPage,_BYTE cCol,_BYTE cHeight,_BYTE cWidth,_BYTE *cpImage);
_BYTE DispOutImageInRow(_BYTE cRow,_BYTE cCol,_BYTE cHeight,_BYTE cWidth,_BYTE *cpImage,_BYTE cReverse);
_BYTE DispRefreshInRow(_BYTE cRow,_BYTE cCol,_BYTE cHeight,_BYTE cWidth);
_BYTE DispReverse(_BYTE cPage,_BYTE cCol,_BYTE cHeight,_BYTE cWidth);
void DispOpen(_BYTE cMode);
void DispBackLigth(_BYTE cMode,_BYTE cTime);
void DispRefresh(_BYTE cPage,_BYTE cCol,_BYTE cHeight,_BYTE cWidth,_BYTE cMode);
_BYTE DispReverseByte(_BYTE cByte);
void DispLCDSetPinAo(_BYTE cFlag) //LCD Ao脚控制
{
if (cFlag==1) {
gcpCPLDReg[2] |= CPLD_LCD_DS;
pCPLD[4] = gcpCPLDReg[2];
}
else {
gcpCPLDReg[2] &=~CPLD_LCD_DS;
pCPLD[4]=gcpCPLDReg[2];
}
}
void DispLCDSetPinEnable(_BYTE cFlag) //LCD 使能号控制
{
if (cFlag==1) {
gcpCPLDReg[2] |= CPLD_LCD_E;
pCPLD[4] = gcpCPLDReg[2];
}
else {
gcpCPLDReg[2] &= ~CPLD_LCD_E;
pCPLD[4]=gcpCPLDReg[2];
}
}
void DispLCDSetPinCs1(_BYTE cFlag) //LCD 片选信号控制
{
if (cFlag==1) {
gcpCPLDReg[2] |= CPLD_LCD_CS1;
pCPLD[4]=gcpCPLDReg[2];
}
else {
gcpCPLDReg[2] &= ~CPLD_LCD_CS1;
pCPLD[4]=gcpCPLDReg[2];
}
}
void DispLCDSetPinCs2(_BYTE cFlag) //LCD 片选信号控制
{
if (cFlag==1) {
gcpCPLDReg[2] |= CPLD_LCD_CS2;
pCPLD[4]=gcpCPLDReg[2];
}
else {
gcpCPLDReg[2] &= ~CPLD_LCD_CS2;
pCPLD[4] = gcpCPLDReg[2];
}
}
/*******************************************************/
/* 写命令子程序 */
/*******************************************************/
void DispLCDWriteCommand(_BYTE cCommand)
{
_BYTE cLCDData;
//DispLCDSetPinCs1(0);
//DispLCDSetPinCs2(1);
DispLCDSetPinAo(0);
DelayMCK4(1);
cLCDData=cCommand&0x0f;
pCPLD[0]=cLCDData;
cLCDData=cCommand&0xf0;
cLCDData=cLCDData>>4;
pCPLD[2]=cLCDData;
DispLCDSetPinEnable(0);
DelayMCK4(SPI_BASE_DELAY_TIME+1);
DispLCDSetPinEnable(1);
DelayMCK4(SPI_BASE_DELAY_TIME+1);
DispLCDSetPinEnable(0);
}
/*******************************************************/
/* 写数据子程序 */
/*******************************************************/
void DispLCDWriteData(_BYTE cData)
{
_BYTE cLCDData;
//DispLCDSetPinCs1(0);
//DispLCDSetPinCs2(1);
DispLCDSetPinAo(1);
DelayMCK4(1);
cLCDData=cData&0x0f;
pCPLD[0]=cLCDData;
cLCDData=cData&0xf0;
cLCDData=cLCDData>>4;
pCPLD[2]=cLCDData;
DispLCDSetPinEnable(0);
DelayMCK4(SPI_BASE_DELAY_TIME+1);
DispLCDSetPinEnable(1);
DelayMCK4(SPI_BASE_DELAY_TIME+1);
DispLCDSetPinEnable(0);
}
/*-----------------------------------------------------------*/
/* 液晶初始化 */
/*-----------------------------------------------------------*/
void DispLCDInit(void)
{
DispLCDWriteCommand(0xe2); //reset
DispLCDWriteCommand(0xa0); //ADC set from seg1~128
DispLCDWriteCommand(0xc0); //shl set form com1~64
DispLCDWriteCommand(0xa2); //bias set 1/7
DispLCDWriteCommand(0x2f); //power control
DelayMCK4(110*SPI_BASE_DELAY_TIME);
DispLCDWriteCommand(0x25); //1+Rb/Ra
DispLCDWriteCommand(0x81); //reference voltage register set
DispLCDWriteCommand(0x2a);
DelayMCK4(110*SPI_BASE_DELAY_TIME);
//DispLCDWriteCommand(0xaf); //display on
}
// 清屏幕
void DispLCDClearScreen(void) //清屏
{
int i,j;
for(j=0;j<VIDEOPAGE;j++) {
DispLCDWriteCommand(0xb0+j);
DispLCDWriteCommand(0x10); //start col
DispLCDWriteCommand(0x00);
DispLCDWriteCommand(0x40);
for(i=0;i<VIDEOCOL;i++) {
DispLCDWriteData(0x00);
}
}
DelayMCK4(SPI_BASE_DELAY_TIME+20);
DispLCDWriteCommand(0xaf);
for (i=0;i<VIDEOPAGE;i++)
for (j=0;j<VIDEOCOL;j++) gcpVideoBuf[i][j]=0x00;
}
//=================================================================
// 显示提示信息
// 根据提示信息码,在显示器的cPage行显示错误信息
// 信息显示cSecond秒,然后自动恢复显示器上的内容
// cPage:在哪一行显示信息
// bWait:是否等待显示
// cSecond:等待的秒数
// bRecovery:是否恢复显示
//=================================================================
void DisplayMessage(_BYTE cRetCode,_BYTE cPage,_BYTE cSecond,_BYTE cWait,_BYTE cRecovery)
{
_BYTE i,j;
_BYTE cpBuf[5];
// 保存显示缓冲区第cPage-cPage+1行的内容
if (cRecovery) {
for (i=0;i<2;i++)
for (j=0;j<VIDEOCOL;j++)
gcpTmpVideoBuf[i][j] = gcpVideoBuf[cPage+i][j];
}
switch(cRetCode) {
case C_ICINVALID: // 卡无效
DispOutText(cPage,0,13,(_BYTE *)" 卡无效 ");
break;
case C_ICOPTERR:
DispOutText(cPage,0,13,(_BYTE *)" 卡无效 ");
break;
case C_ICCRCERR:
DispOutText(cPage,0,11,(_BYTE *)" 卡操作出错 ");
break;
case C_NOIC: // 卡未插入
DispOutText(cPage,0,13,(_BYTE *)" 请插卡 ");
break;
case C_INDEXFULL: // 索引已经满
DispOutText(cPage,0,10,(_BYTE *)" 签到学员已满 ");
break;
case C_ICCHANGED: // 卡号不匹配
DispOutText(cPage,0,12,(_BYTE *)" 卡不匹配 ");
break;
case C_NOTCOACHIC: // 非教练卡
DispOutText(cPage,0,10,(_BYTE *)" 请插入教练卡 ");
break;
case C_NOTADMINIC: // 非教练卡
DispOutText(cPage,0,10,(_BYTE *)" 请插入管理卡 ");
break;
case C_ERRORKEY: // 按键错误
DispOutText(cPage,0,12,(_BYTE *)" 按键无效 ");
break;
case C_CANCELED: // 操作被取消
DispOutText(cPage,0,11,(_BYTE *)" 操作被取消 ");
break;
case M_LOGOUTOK: // 成功签退
DispOutText(cPage,0,12,(_BYTE *)" 签退成功 ");
break;
case M_LOGINOK: // 成功签退
DispOutText(cPage,0,12,(_BYTE *)" 签到成功 ");
break;
case M_RESET:
DispOutText(cPage-2,0,11,(_BYTE *)" 请重启系统 ");
DispOutText(cPage,0,11,(_BYTE *)" 按键初始化 ");
break;
case M_FINGERDOWN: // 请放手指
DispOutText(cPage,0,12,(_BYTE *)" 请放手指 ");
break;
case M_FINGERUP: // 请抬手指
DispOutText(cPage,0,12,(_BYTE *)" 请抬手指 ");
break;
case M_VERIFYOK: // 指纹验证通过
DispOutText(cPage,0,10,(_BYTE *)" 指纹验证通过 ");
break;
case M_VERIFYFAIL: // 指纹验证失败
DispOutText(cPage,0,10,(_BYTE *)" 指纹验证失败 ");
break;
case C_ENROLLERROR:
DispOutText(cPage,0,10,(_BYTE *)" 指纹采集失败 ");
break;
case M_INDEXEMPTY: // 索引为空
DispOutText(cPage,0,11,(_BYTE *)" 无签到学员 ");
break;
case M_ERROR: // 操作出错
DispOutText(cPage,0,12,(_BYTE *)" 操作出错 ");
break;
case M_NOLOGOUT:
DispOutText(cPage,0,9,(_BYTE *)" 教练不允许签退 ");
break;
case M_MEMERROR: // 存储器操作出错
DispOutText(cPage,0,9,(_BYTE *)" 存储器操作出错 ");
break;
case M_ICERROR: // 卡操作出错
DispOutText(cPage,0,11,(_BYTE *)" 卡操作出错 ");
break;
case M_WAIT: // 卡操作出错
DispOutText(cPage,0,13,(_BYTE *)" 请等待... ");
break;
case C_DATETIMEERROR: // 操作出错
DispOutText(cPage,0,10,(_BYTE *)" 日期时间错误 ");
break;
case M_NOFINGERDOWN:
DispOutText(cPage,0,11,(_BYTE *)" 未检到手指 ");
break;
case M_KPARAZERO:
DispOutText(cPage,0,11,(_BYTE *)" K系数为0错误 ");
break;
default: // 操作出错
DispOutText(cPage,0,6,(_BYTE *)" 操作错误[");
LongToString(cRetCode,cpBuf,3);
cpBuf[3]=']';
DispOutText(cPage,10*8,4,cpBuf);
break;
}
DispRefresh(cPage,0,2,VIDEOCOL,0);
if (cWait) {
Delays(cSecond);
}
if (cRecovery) {
for (i=0;i<2;i++)
for (j=0;j<VIDEOCOL;j++)
gcpVideoBuf[cPage+i][j] = gcpTmpVideoBuf[i][j];
DispRefresh(cPage,0,2,VIDEOCOL,1);
}
}
//=================================================================
// 函数: DisplayRecoveryMessage
// 功能: 恢复由于显示提示信息所清除的显示内容:
// 参数: cPage:要求清除的页(0-7)
// cRecovery:保存或恢复,1-保存, 0-恢复
//=================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -