📄 jbddisp.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 + -