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

📄 display.c

📁 一整套电梯控制器源程序
💻 C
字号:
#include "public.h"

void display(void)
{

    //做成7x5
    make7_5text(m_RecData.cDirect);

    //做成7x11
    make7_11text();

    //滚动
    movetext();
    
    //显示
    showtext();
 
}

//buffer做成(7x11)
void make7_11text(void)
{
    uchar cDispVal=0;   //显示值
    uchar cDataHigh=0;
    uchar cDataLow=0;
    uchar cAsciiHigh=0; 
    uchar cAsciiLow=0;

    if(P1_7==0){    // "F0 F1 F2 F3 F4"
        if(m_cFuncCnt==0){
            if((m_cSettingFuncFlg==1)&&(m_cSettingSubFuncFlg==0)){
                cAsciiHigh = 'F';
                cAsciiLow  = '0';
            }else if((m_cSettingFuncFlg==0)&&(m_cSettingSubFuncFlg==1)){
                cDispVal  = data5045.cF0+1;
                cDataHigh = cDispVal/10;
                cDataLow  = cDispVal%10;
                cAsciiHigh = __toascii(cDataHigh);
                cAsciiLow  = __toascii(cDataLow);
            }
        }else if(m_cFuncCnt==1){
            if((m_cSettingFuncFlg==1)&&(m_cSettingSubFuncFlg==0)){
                cAsciiHigh = 'F';
                cAsciiLow  = '1';
            }else if((m_cSettingFuncFlg==0)&&(m_cSettingSubFuncFlg==1)){
                cDispVal  = data5045.cF1+1;
                cDataHigh = cDispVal/10;
                cDataLow  = cDispVal%10;
                cAsciiHigh = __toascii(cDataHigh);
                cAsciiLow  = __toascii(cDataLow);
            }
        }else if(m_cFuncCnt==2){
            if((m_cSettingFuncFlg==1)&&(m_cSettingSubFuncFlg==0)){
                cAsciiHigh = 'F';
                cAsciiLow  = '2';
            }else if((m_cSettingFuncFlg==0)&&(m_cSettingSubFuncFlg==1)){
                cDispVal  = data5045.cF2+1;
                cDataHigh = cDispVal/10;
                cDataLow  = cDispVal%10;
                cAsciiHigh = __toascii(cDataHigh);
                cAsciiLow  = __toascii(cDataLow);
            }
        }else if(m_cFuncCnt==3){
            if((m_cSettingFuncFlg==1)&&(m_cSettingSubFuncFlg==0)){
                cAsciiHigh = 'F';
                cAsciiLow  = '3';
            }else if((m_cSettingFuncFlg==0)&&(m_cSettingSubFuncFlg==1)){
                cDispVal  = data5045.cF3;
                cDataHigh = cDispVal/10;
                cDataLow  = cDispVal%10;
                cAsciiHigh = __toascii(cDataHigh);
                cAsciiLow  = __toascii(cDataLow);
            }
        }else if(m_cFuncCnt==4){
            if((m_cSettingFuncFlg==1)&&(m_cSettingSubFuncFlg==0)){
                cAsciiHigh = 'F';
                cAsciiLow  = '4';
            }else if((m_cSettingFuncFlg==0)&&(m_cSettingSubFuncFlg==1)){
                cDispVal  = data5045.cF4;
                cDataHigh = cDispVal/10;
                cDataLow  = cDispVal%10;
                cAsciiHigh = __toascii(cDataHigh);
                cAsciiLow  = __toascii(cDataLow);
            }
        }

        make7_11buf(cAsciiHigh, cAsciiLow);

    }else{          // 显示楼层(-1~-9,1-48,B1~B9)
        
        if((m_RecData.cCurFloor>=0) && (m_RecData.cCurFloor<=8)){			//-1~-9
            cDataHigh = (9-m_RecData.cCurFloor)/10;
            cDataLow  = (9-m_RecData.cCurFloor)%10;
            cAsciiHigh = '-';
            cAsciiLow  = __toascii(cDataLow);
        }else if((m_RecData.cCurFloor>=9) && (m_RecData.cCurFloor<=56)){	//1-48
            cDataHigh = (m_RecData.cCurFloor-8)/10;
            cDataLow  = (m_RecData.cCurFloor-8)%10;
            cAsciiHigh = __toascii(cDataHigh);
            cAsciiLow  = __toascii(cDataLow);
        }else if((m_RecData.cCurFloor>=69) && (m_RecData.cCurFloor<=77)){//B1~B9
            cDataHigh = (m_RecData.cCurFloor-68)/10;
            cDataLow  = (m_RecData.cCurFloor-68)%10;
            cAsciiHigh = 'B';
            cAsciiLow  = __toascii(cDataLow);
        }
        
        make7_11buf(cAsciiHigh, cAsciiLow);

    }

}

// cFlg: 0--下箭头  1--上箭头  2--空白
void make7_5text(uchar cFlg)
{   

    uchar i;
//    if((m_cMakeNewFlg==0) && (P1_7!=0))
//        return;

/*
    m_cSrcDirect[0]=0xFF;
    m_cSrcDirect[1]=0xFF;
    m_cSrcDirect[2]=0xFF;
    m_cSrcDirect[3]=0xFF;
    m_cSrcDirect[4]=0xFF;
*/

	if(P1_7==1){	//跳线未接通
	    if(cFlg == 0){             // 下箭头
	        for(i=0; i<7; i++){
//改为直接修正
//	            m_cSrcDirect[i]=PRDDown[i];
	        }
	    }else if(cFlg == 1){       // 上箭头
	        for(i=0; i<7; i++){
//改为直接修正
//	            m_cSrcDirect[i]=PRDUp[i];
	        }
	    }else if(cFlg == 0xFF){    // 空白
	        for(i=0; i<7; i++){
//	            m_cSrcDirect[i]=0xFF;
                m_cDispDirect[i]=0xFF;
	        }
	    }
	}else{			//跳线接通
        for(i=0; i<5; i++){
//              m_cSrcDirect[i]=0xFF;
                m_cDispDirect[i]=0xFF;
        }
	}

}

// 单字节与双字节不同的现实方式
// 当cSpecialFlg=0时,若cText=0x48,则显示楼层为48;
// 当cSpecialFlg=1时,按特殊功能显示
void make7_11buf(uchar cTextHigh, uchar cTextLow)
{   
    uchar cIndexHigh=getindex(cTextHigh);
    uchar cIndexLow =getindex(cTextLow);
    uchar i;
    

    if(cIndexHigh != 0){    // 双字符
        m_c7_11singledoubleFlg=1;
        for(i=0; i<7; i++){
            m_cSrcFloorHigh[i]=PR[cIndexHigh][i];
            m_cSrcFloorLow[i]=PR[cIndexLow][i];
        }
    }else{                  // 单字符
        m_c7_11singledoubleFlg=0;
        for(i=0; i<7; i++){
            m_cSrcFloorHigh[i]=0xFF;
            m_cSrcFloorLow[i]=PR[cIndexLow][i];
        }
    }
}

void movetext(void)
{
	uchar i=0;
	uchar j=0;
	uchar cTemp=0;

	if(data5045.cF2==0){	//固定显示  
		for(i=0; i<DIRECT_DISP_BYTENUM; i++){  //7x5
//		   m_cDispDirect[i] = m_cSrcDirect[i];
            if(m_RecData.cDirect==0){        //下
                m_cDispDirect[i]=PRDDown[i];
            }else if(m_RecData.cDirect==1){ //上
                m_cDispDirect[i]=PRDUp[i];
            }else if(m_RecData.cDirect==0xFF){  //无(确保无到站动作即可)
                m_cDispDirect[i]=0xFF;
            }
		}
		for(i=0; i<FLOOR_DISP_BYTENUM; i++){   //7x11
		   m_cDispFloorHigh[i] = m_cSrcFloorHigh[i];
		   m_cDispFloorLow[i]  = m_cSrcFloorLow[i];
		}
	}else if(data5045.cF2==1){	//箭头滚动    
		m_cDispDirect[0]=0xFF;
		m_cDispDirect[1]=0xFF;
		m_cDispDirect[2]=0xFF;
		m_cDispDirect[3]=0xFF;
		m_cDispDirect[4]=0xFF;
		m_cDispDirect[5]=0xFF;
		m_cDispDirect[6]=0xFF;
		if(m_cNewLineFlg==1){
			m_cMoveCnt++;
			m_cNewLineFlg=0;
			//整组移动完成
			if(m_cMoveCnt>6){
				m_cWholeMoveOKFlg=1;
//				m_cMoveCnt=0;
			}
		}

		if(m_RecData.cDirect==0){          //下向(7x5)
			for(i=0; i<m_cMoveCnt; i++){   
//			   m_cDispDirect[i] = m_cSrcDirect[6+1-m_cMoveCnt+i];
               m_cDispDirect[i] = PRDDown[6+1-m_cMoveCnt+i];
			}
        }else if(m_RecData.cDirect==1){    //上向
			for(i=0; i<m_cMoveCnt; i++){   
//			   m_cDispDirect[6-i] = m_cSrcDirect[m_cMoveCnt-1-i];
               m_cDispDirect[6-i] = PRDUp[m_cMoveCnt-1-i];
			}
        }else if(m_RecData.cDirect==0xFF){ //无方向
			for(i=0; i<7; i++){   
//			   m_cDispDirect[i] = m_cSrcDirect[i];
               m_cDispDirect[i] = 0xFF;
			}
        }

		for(i=0; i<FLOOR_DISP_BYTENUM; i++){   //7x11
		   m_cDispFloorHigh[i] = m_cSrcFloorHigh[i];
		   m_cDispFloorLow[i] = m_cSrcFloorLow[i];
		}
	}else if(data5045.cF2==2){	//数字滚动    
		for(i=0; i<7; i++){
			m_cDispFloorHigh[i]=0xFF;
			m_cDispFloorLow[i]=0xFF;
		}
		if(m_cNewLineFlg==1){
			m_cMoveCnt++;
			m_cNewLineFlg=0;
			//整组移动完成
			if(m_cMoveCnt>6){
				m_cWholeMoveOKFlg=1;
//				m_cMoveCnt=0;
			}
		}
		
		if(m_RecData.cDirect==0){				      //下向(7x11)
			for(i=0; i<m_cMoveCnt; i++){   
			   m_cDispFloorHigh[i] = m_cSrcFloorHigh[6+1-m_cMoveCnt+i];
			   m_cDispFloorLow[i] = m_cSrcFloorLow[6+1-m_cMoveCnt+i];
			}
		}else if(m_RecData.cDirect==1){				//上向
			for(i=0; i<m_cMoveCnt; i++){   
			   m_cDispFloorHigh[6-i] = m_cSrcFloorHigh[m_cMoveCnt-1-i];
			   m_cDispFloorLow[6-i] = m_cSrcFloorLow[m_cMoveCnt-1-i];
			}
		}else if(m_RecData.cDirect==0xFF){					//无方向
			for(i=0; i<FLOOR_DISP_BYTENUM; i++){   //7x11
			   m_cDispFloorHigh[i] = m_cSrcFloorHigh[i];
			   m_cDispFloorLow[i] = m_cSrcFloorLow[i];
			}
		}

		for(i=0; i<DIRECT_DISP_BYTENUM; i++){   //7x5
            if(m_RecData.cDirect==0){        //下
                m_cDispDirect[i]=PRDDown[i];
            }else if(m_RecData.cDirect==1){ //上
                m_cDispDirect[i]=PRDUp[i];
            }else if(m_RecData.cDirect==0xFF){  //无(确保无到站动作即可)
                m_cDispDirect[i]=0xFF;
            }
		}

	}    

}


void showtext(void)
{
    uchar i;
	uchar j;
    uchar cDirect_Floor3=0xFF;
    uchar cFloor8=0xFF;
    uchar cDarkNum=0;   //变暗的数字设置

    if(m_cLockDarkFlg==1){
        cDarkNum=60;
    }else{
        cDarkNum=30;
    }


    for(i=0; i<7; i++){
        cDirect_Floor3=0xFF;
        cFloor8=0xFF;

        //方向
//		  cDirect_Floor3 = m_cDispDirect[i]&0x1F;

    	  for(j=0;j<=cDarkNum;j++)
    		 {_nop_();}
	     PA377=0xff;
	     PB377=0xff;
	     PC377=0xff;
        //楼层数
        if(m_cFireFlg==1){
            cDirect_Floor3=m_cDispDirect[i]&0x1F;
    		cDirect_Floor3 = cDirect_Floor3|((PR_FIRE[i][0]<<5)&0xE0);
            cFloor8=(PR_FIRE[i][0]>>3)&0x1F;
            cFloor8=cFloor8|((PR_FIRE[i][1]<<5)&0xE0);
        }else if(m_cRepairFlg==1){
            cDirect_Floor3=m_cDispDirect[i]&0x1F;
    		cDirect_Floor3 = cDirect_Floor3|((PR_REPAIRE[i][0]<<5)&0xE0);
            cFloor8=(PR_REPAIRE[i][0]>>3)&0x1F;
            cFloor8=cFloor8|((PR_REPAIRE[i][1]<<5)&0xE0);
        }else if(m_cLockFlg==1){
            cDirect_Floor3=m_cDispDirect[i]&0x1F;
    		cDirect_Floor3 = cDirect_Floor3|((PR_LOCK[i][0]<<5)&0xE0);
            cFloor8=(PR_LOCK[i][0]>>3)&0x1F;
            cFloor8=cFloor8|((PR_LOCK[i][1]<<5)&0xE0);
        }else{
            //方向
		    cDirect_Floor3 = m_cDispDirect[i]&0x1F;
            if(m_c7_11singledoubleFlg==1){                          //双字
    				cDirect_Floor3 = cDirect_Floor3|((m_cDispFloorHigh[i]<<5)&0xE0);
    				cFloor8=(m_cDispFloorHigh[i]>>3)&0x03;
    				cFloor8=cFloor8|0x04;
    				cFloor8=cFloor8|((m_cDispFloorLow[i])<<3);
    
            }else{                                                  //单字
    				cDirect_Floor3=cDirect_Floor3|0xE0;
    				cFloor8=(m_cDispFloorLow[i])&0x1F;
    				cFloor8=cFloor8|0xE0;
    
            }
        }

        PA377=~(0x01<<i);       //行
        PB377=cDirect_Floor3;
        PC377=cFloor8;
    }

	  for(j=0;j<=cDarkNum;j++)
		 {_nop_();}
     PA377=0xff;
     PB377=0xff;
     PC377=0xff;
}

//取得字库索引
uchar getindex(uchar szText)
{
    uchar ret=0;
    switch(szText){
        case '0':   ret=0;  break;
        case '1':   ret=1;  break;
        case '2':   ret=2;  break;
        case '3':   ret=3;  break;
        case '4':   ret=4;  break;
        case '5':   ret=5;  break;
        case '6':   ret=6;  break;
        case '7':   ret=7;  break;
        case '8':   ret=8;  break;
        case '9':   ret=9;  break;
        case 'B':   ret=10; break;
        case 'F':   ret=11; break;
        case '-':   ret=12; break;
    }
    return ret;
}

// 16进制数字转换为ASCII
uchar __toascii(uchar c)
{
	uchar ret;
	if(c>9)
		ret=0x37+c; 
	else
		ret=0x30+c;
	return ret;
}

/*
//取得索引值为cIdx的数据
uchar GetArrayData(uchar *pData, uchar cIdx)
{
	uchar  ret=0x00;
//	uchar  cMoveBit = cIdx;	//移动位数
	ret = ((*pData)>>cIdx) & 0x01;
	return ret;
}

void SetArrayData(uchar *pData, uchar cIdx, uchar cVal)
{
	uchar  cTemp= cVal;
//	uchar  cMoveBit = cIdx;	//移动位数
	if(cVal==1){
		cTemp = cTemp<<cIdx;
	    *pData = (*pData)|cTemp;
	}else{
        Set0Data(pData, cIdx);
    }
}

void Set0Data(uchar *pData, uchar cMOD)
{
	switch(cMOD){
		case 0: *pData = (*pData)&0xFE; break;	// 1111,1110
		case 1: *pData = (*pData)&0xFD; break;	// 1111,1101
		case 2: *pData = (*pData)&0xFB; break;	// 1111,1011
		case 3: *pData = (*pData)&0xF7; break;	// 1111,0111
		case 4: *pData = (*pData)&0xEF; break;	// 1110,1111
		case 5: *pData = (*pData)&0xDF; break;	// 1101,1111
		case 6: *pData = (*pData)&0xBF; break;	// 1011,1111
		case 7: *pData = (*pData)&0x7F; break;	// 0111,1111
		default: break;
	}
}
*/
void led(void)                                     //can总线正在通讯状态和通讯错误状态显示灯赋值片断。
{
if((XBYTE[((P2&0xe0)|0x0F)*256+2]&0x80)==0x80)     //总线状态为关闭时
   {P3_1=0;
/*
    P2_7=0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();

    P2_7=1;
*/
    can_init();
  }
if((XBYTE[((P2&0xe0)|0x0F)*256]&0x01)!=0x00)     //总线状态为复位时
   {P3_1=0;
/*
    P2_7=0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();

    P2_7=1;
*/
    can_init();
  }
 if((XBYTE[((P2&0xe0)|0x0F)*256+2]&0x40)==0x40)    //错误寄存器为1时
   {P3_1=0;
/*
    P2_7=0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();

    P2_7=1;
*/
    can_init();
  }


 if((XBYTE[((P2&0xe0)|0x0F)*256+2]&0x02)==0x02){     //数据溢出时
	P3_1=0;
	XBYTE[((P2&0xe0)|0x0F)*256+1]=0x0C;
 }else{
	P3_1=1;
 }

 if(((XBYTE[((P2&0xe0)|0x0F)*256+2]&0x20)==0x20)||((XBYTE[((P2&0xe0)|0x0F)*256+2]&0x10)==0x10))//正在发送或正在接收时
   {P3_0=0;}
 else
   {P3_0=1;}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -