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

📄 jbddisp.c

📁 电话PSTN线路上FSK处理软件。。。。。。。。。
💻 C
字号:

/***********************************************************
 *
 *		文件名:	jbDDisp.c
 *		功	能:	包含下载程序部分显示函数
 *		日	期:99-11-29 16:48
 *
 ***********************************************************/
//#pragma SRC
//#pragma DEBUG

#include <jbddisp.h>

/***********************************************************
 *
 *		函数名:	DlpDispOut()
 *		功	能:	将显示缓冲区数据送到显示器
 *
 **********************************************************/
void DlpDispOut(void)
{   
	byte i;
    SDA=SPACE;
    DlpSDelay();
    SCL=SPACE;
    DlpSDelay();      
    DlpI2CWrite(0x70);
    DlpI2CWrite(0xe0);                       
    DlpI2CWrite(0x00);     
    for(i=0;i<20;i++)
        DlpI2CWrite(aLargeBuf[i]);      // 传送大显示器数据
    SCL=MARK;
    DlpSDelay();
    SDA=MARK;
    DlpSDelay();

}
// End function: DlpDispOut() 
 
/***********************************************************
 *
 *		函数名:	DlpI2CWrite()
 *		功	能:	向显示器传送一个字节
 *
 ***********************************************************/
void DlpI2CWrite(byte bDisp)
{     
    bDispBuf=bDisp;
    EA=0;      
    SDA=bDispBuf7;
    SCL=MARK;
    DlpSDelay();
    SCL=SPACE;
    DlpSDelay();
    SDA=bDispBuf6;
    SCL=MARK;
    DlpSDelay();
    SCL=SPACE;
    DlpSDelay();
    SDA=bDispBuf5;
    SCL=MARK;
    DlpSDelay();
    SCL=SPACE;
    DlpSDelay();
    SDA=bDispBuf4;
    SCL=MARK;
    DlpSDelay();
    SCL=SPACE;
    DlpSDelay();
    SDA=bDispBuf3;
    SCL=MARK;
    DlpSDelay();
    SCL=SPACE;
    DlpSDelay();
    SDA=bDispBuf2;
    SCL=MARK;
    DlpSDelay();
    SCL=SPACE;
    DlpSDelay();
    SDA=bDispBuf1;
    SCL=MARK;
    DlpSDelay();
    SCL=SPACE;
    DlpSDelay();
    SDA=bDispBuf0;
    DlpSDelay();
    SCL=MARK;
    DlpSDelay();
    SCL=SPACE;
    SDA=MARK;
    DlpSDelay(); 
    SCL=MARK;
    DlpSDelay();
    DlpSDelay();
    SCL=SPACE;
    SDA=SPACE;
    DlpSDelay();
    EA=1;
}
// End function: DlpI2CWrite()
      
void DlpSDelay(void)         /* short delay,time about 6us */
{   
	_nop_();  
    _nop_();
    _nop_();
    _nop_();
}            

/********************************************************
 *
 *		函数名:	DlpDispInit()	
 *		功	能:	大小显示器初始化
 *		注	意:此函数应在上电100MS后调用
 *
 ********************************************************/

void DlpDispInit(void)
{
    SDA=MARK;         	// 起始条件
    DlpSDelay();
    SCL=MARK;
    DlpSDelay();
    SDA=SPACE;         	// 起始条件
    DlpSDelay();
    SCL=SPACE;
    DlpSDelay();
    DlpI2CWrite(0x70);  // 主显示器辅地址设置
    DlpI2CWrite(0xc8);  // set Large Lcd drive mode:mux(32 rows) M1M0=00
                       	// Display status: Normal E1E0=00;
                       	// System type: PCF8578 mixed mode T=1 
    DlpI2CWrite(0x70);  // set display start bank is bank0 
    SCL=MARK;           // 终止条件
    DlpSDelay();		
    SDA=MARK;
    DlpSDelay();
	
} 
// End function: DlpDispInit()      

/********************************************************
 *
 *	函数名:DlpDispClr()
 *  功	能:清除显示
 *
 ********************************************************/
void DlpDispClr(void)
{   
	byte i;
	for(i=0;i<20;i++)
		aLargeBuf[i]='\0';
    DlpDispOut();
} 
// End function: DlpDispClr() 

/***********************************************************
 *
 *	函数名:DlpDispSymbol()
 *  功	能:显示各种符号。如:挂机、摘机、闪烁及锁机标志  
 *  输	入:显示符号代码值
 *
 **********************************************************/
void DlpDispSymbol(byte bCode)
{   
    if(bCode==LARGE_PHONE){ 
        aLargeBuf[1]|=0x08;    
        aLargeBuf[2]&=0xf7;    
    }
    else if(bCode==LARGE_UNPHONE)
        aLargeBuf[1]&=0xf7;   
    else if(bCode==LARGE_HOOK){ 
        aLargeBuf[1]&=0xf7;    
        aLargeBuf[2]|=0x08;
    }            
    else if(bCode==LARGE_UNHOOK)
        aLargeBuf[2]&=0xf7;    
	else if(bCode==LARGE_FLASH) 
        aLargeBuf[3]|=0x08;
    else if(bCode==LARGE_UNFLASH)
        aLargeBuf[3]&=0xf7;    
 	else if(bCode==LARGE_LOCK) 
        aLargeBuf[12]|=0x08;    
    else if(bCode==LARGE_UNLOCK)
        aLargeBuf[12]&=0xf7;    
	else if(bCode==LARGE_COMM)
	    aLargeBuf[18]|=0x08;
	else if(bCode==LARGE_UNCOMM)
	    aLargeBuf[18]&=0xf7;
    DlpDispOut();
}
// End function: DlpDispSymol()

/***********************************************************
 *
 *		函数名:DlpDispErrorCode()
 *  	功	能:显示出错代码,bCode为出错代码值.
 *
 **********************************************************/
void DlpDispErrorCode(byte bCode)
{   
	byte i;
	DlpSpeaker(50);
	for(i=0;i<20;i++)
		aLargeBuf[i]='\0';
   	aLargeBuf[0]=0xf1;//E r r o r
    aLargeBuf[1]=0x60;
   	aLargeBuf[2]=0x60;
   	aLargeBuf[3]=0xe4;
   	aLargeBuf[4]=0x60;
   	aLargeBuf[5]=0x20;
    aLargeBuf[6]=aDlpLCDSegment[bCode>>4];
    aLargeBuf[7]=aDlpLCDSegment[bCode&0x0f];
    DlpDispOut();
    DlpDelaySecond(2);
}
// End function: DlpDispErrorCode()

/***********************************************************
 *
 *	函数名:DlpDispCmd()
 *  功	能:显示命令代码或接收包数量
 *
 **********************************************************/
void DlpDispCmd(byte bCmd)
{   
    aLargeBuf[12]=aDlpLCDSegment[bCmd>>4];
    aLargeBuf[11]=aDlpLCDSegment[bCmd&0x0f];
    DlpDispOut();
}
// End function: DlpDispErrorCode()

/***********************************************************
 *
 *	函数名:DlpDispLP()
 *  功	能:
 *
 ***********************************************************/
void DlpDispLP(void)
{
	byte i;
	aLargeBuf[19]|=0xd0;				// L
	aLargeBuf[18]|=0x73;				// P
	i=(byte)(iAddress>>8);
	aLargeBuf[17]=aDlpLCDSegment[i&0x0f];
	i=(byte)(iAddress);
	aLargeBuf[16]=aDlpLCDSegment[i>>4];
	aLargeBuf[15]=aDlpLCDSegment[i&0x0f];
	//
	if(aLargeBuf[17]!=0xd7);
	else if(aLargeBuf[16]==0xd7){
		aLargeBuf[17]=0;
		aLargeBuf[16]=0;
	}
	else
		aLargeBuf[17]=0;
	DlpDispOut();
}
// End function: DlpDispLP()

/***********************************************************
 *
 *	函数名:DlpDelsy5MS()
 *  功	能:毫秒延时函数(单位:5MS).
 *
 ***********************************************************/
void DlpDelay5MS(byte bDelay)
{
	cbDelay5MS=bDelay;
	fDelay5MS=FALSE;
	while(!fDelay5MS) IDLE;
}
// End function: DlpDelayMS()

/***********************************************************
 *
 *	函数名:DlpDelaySecond()
 *  功	能:秒延时函数(bToDelay不能设为0xff),本函数误差5MS.
 *
 **********************************************************/
void DlpDelaySecond(byte bDelay)
{
	byte i;
	for(i=0;i<bDelay;i++)
	{
		cbDelay5MS=200;
		fDelay5MS=FALSE;
		while(!fDelay5MS) 
			IDLE;
	}
}	
// End function: DlpDelaySecond()

/***********************************************************
 *
 *	函数名:DlpSpeaker()
 *  功	能:控制12887发出提示音,bTeme是发声时间.
 *
 **********************************************************/
void DlpSpeaker(byte bTime)
{
    cbDelay5MS=bTime;
    fDelay5MS=FALSE;
	DlpPage(6);
    XBYTE[RTC_CONTROLA]=0x27;            
    XBYTE[RTC_CONTROLB]=0x1a;            
	DlpPage(5);
}
// End function: DlpSpeaker()

/***********************************************************
 *
 *	函数名:DlpDispOK()
 *  功	能:显示成功标志,bTimes为发声次数.
 *
 **********************************************************/
void DlpDispOK(byte bTimes)
{
	byte i;
	DlpDispClr();
	aLargeBuf[0]=0xe4;		// "o"
	aLargeBuf[1]=0x76;		// "H"
	DlpDispOut();
    for(i=0;i<bTimes;i++){
    	DlpSpeaker(20);
    	while(!fDelay5MS) IDLE;
    	cbDelay5MS=160;
    	fDelay5MS=0;
    	while(!fDelay5MS) IDLE;
    }
}
// End function: DlpDispOK()
    
// 
// End file: jbddisp.c
//

⌨️ 快捷键说明

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