⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disp.c

📁 AT91fr40162的FLASH读写程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -