📄 yxktvtest.c
字号:
if (K4==0) {KeyTemp=KeyTemp+1;break;}
if (K5==0) {KeyTemp=KeyTemp+2;break;}
if (K6==0) {KeyTemp=KeyTemp+3;break;}
if (K7==0) {KeyTemp=KeyTemp+4;break;}
KeyTemp=0;
P1=0xff;
};
P1=0xff;
if (KeyTemp==0)
{ KeyNo=0xff;
KonT=0;
return;
}
KeyTemp=KEYTAB[KeyTemp];
if (KeyTemp==KESC)//V1.1
{ KonT++; /*长按2s关机*/
if (KonT>120) PwrOff();
}else
{ KonT=0;
}
if (KeyTemp==KeyNo ) return;
KeyNo=KeyTemp;
bKeyOk=1;
LCDLED=0;
LedTimer=30;
}
/*---24c02--*/
void Start24()
{ SDA=1;
NOP
SCL=1;//When CLK=1,SDA 1->0 =START!
NOP
SDA=0;
NOP
SCL=0;
NOP
}
void Stop24()
{
SDA=0;
NOP
SCL=1;
NOP
SDA=1;
NOP
}
unsigned char Rd24(void)
{ register unsigned char i;
SDA=1;
/* SCL=1;a7=SDA;SCL=0;
SCL=1;a6=SDA;SCL=0;
SCL=1;a5=SDA;SCL=0;
SCL=1;a4=SDA;SCL=0;
SCL=1;a3=SDA;SCL=0;
SCL=1;a2=SDA;SCL=0;
SCL=1;a1=SDA;SCL=0;
SCL=1;a0=SDA;SCL=0;*/
ICData=0;
SCL=0;
for (i=0;i<8;i++)
{ SCL=1; NOP /*实测5V下不延时也可*/
ICDataB0=SDA; NOP
SCL=0; NOP
if (i!=7) ICData=ICData<<1;
}
SDA=bAck;
SCL=1;NOP
SCL=0;NOP /*写应答位*/
return(ICData);
}
bit Wr24(unsigned char dd)
{ register unsigned char i;
/* ACC=dd;
SDA=a7;SCL=1;SCL=0;
SDA=a6;SCL=1;SCL=0;
SDA=a5;SCL=1;SCL=0;
SDA=a4;SCL=1;SCL=0;
SDA=a3;SCL=1;SCL=0;
SDA=a2;SCL=1;SCL=0;
SDA=a1;SCL=1;SCL=0;
SDA=a0;SCL=1;SCL=0; */
ICData=dd;
for (i=0;i<8;i++)
{
SDA=ICDataB7; NOP /*实测5V下不延时也可*/
SCL=1; NOP
SCL=0; NOP
ICData=ICData<<1;
}
SDA=1;SCL=1; /*等待应答0*/
for (i=0;i<100;i++)
{ if (SDA==0) break;
}
bAck=SDA;
SCL=0;
return bAck;
}
bit RdBytes24(unsigned int iAddr,uchar iLen)
{ unsigned char ddd,i;
ddd=((iAddr&0x7ff)/256)<<1;
Start24();
if (Wr24(0xa0|ddd)==1)
{bAck=0;goto RDSTOP;}//err
Wr24(iAddr);
NOP
Start24();Wr24(0xa1|ddd);
for (i=0;i<iLen;i++)
{
bAck=0;if (i==(iLen-1)) bAck=1;
IcBuf[i]=Rd24();
};
Stop24();
return bAck;
RDSTOP:
Stop24();
return bAck;
}
bit WrBytes24(unsigned int iAddr,uchar iLen)
{
unsigned char ddd,i;
ddd=((iAddr&0x7ff)/256)<<1;
Start24();
if (Wr24(0xa0|ddd)==1)
{bAck=0;goto WRSTOP;}//err
Wr24(iAddr);
for (i=0;i<iLen;i++)
{
if (Wr24(IcBuf[i])==1)
{bAck=0;goto WRSTOP;}//err
};
bAck=1;//OK
Stop24();
//DelayMs(10); //wait 10ms...
return bAck;
WRSTOP:
Stop24();
return bAck;
}
void WrBytes(uchar iAddr,uchar data *Datas,uchar iLen)
{ uchar i,j;
for (i=0;i<iLen;i=i+8)
{ for (j=0;j<8;j++) IcBuf[j]=Datas[i+j];
if ((i+8)<=iLen) j=8;else j=iLen-i;
WrBytes24(iAddr,j);
iAddr=iAddr+8;
DelayMs(10);
}
}
void Tst24()
{ Stop24();NOP
RdBytes24(0,6);
// WrBytes24(0,6);
}
void DelayMs(uchar Ms)
{ uchar i;
do
{ WDTRST=0x1E; /*Reset WDT*/
WDTRST=0xE1;
for (i=0;i<100;i++) ; /*12us*100?*/
Ms--;
} while (Ms!=0);
}
void Beep()
{
return;
}
void LcdWrCmd(uchar uData)
{ uchar i;
LCDRS=0; //cmd
LCDRW=1;//read status
LCDE=1;
P0=0xff;
i=0xff;
do
{ //判断是否Busy
if (i--==0) break;
} while (P07==1);
LCDE=0;
LCDRW=0; //write
P0=uData;
LCDE=1;
LCDE=0;
P0=0xff;
}
void LcdWrData(uchar uData)
{ uchar i;
LCDRS=0; //cmd
LCDRW=1;//read status
LCDE=1;
P0=0xff;
i=0xff;
do
{ if (i--==0) break;
} while (P07==1);
LCDE=0;
LCDRS=1;//data
LCDRW=0;//write
P0=uData;
LCDE=1;
LCDE=0;
P0=0xff;
}
void LcdHome()
{ LcdWrCmd(3);
LcdX=0;LcdY=0;
}
uchar LcdRdData()
{ uchar uData;
LCDRS=1;//data
LCDRW=1;//read
LCDE=1;
uData=P0;
LCDE=0;
return uData;
}
void LcdReverse(uchar uLine)
{//Line=0--3,并且有显示数据的才反相显示
LcdWrCmd(0x34);//extern instrution
//LcdWrCmd(0x36);
LcdWrCmd((4+uLine)&0x07);
LcdWrCmd(0x30);//basic instrution
}
void LcdXY()
{ uchar iAddr;
iAddr=DDRAMTAB[LcdY-1]+LcdX-1;
LcdWrCmd(iAddr);//set DDRAM
}
void LcdClr(uchar Y)
{ uchar iAddr;
switch (Y)
{ case 0:
LcdWrCmd(1);
break;
case 1:
case 2:
case 3:
case 4:
iAddr=DDRAMTAB[Y-1];
LcdWrCmd(iAddr);
for (iAddr=0;iAddr<16;iAddr++)
{ LcdWrData(0x20);
}
break;
}
LcdX=1;LcdY=Y;
}
void LcdLine()
{
LcdX=1;
LcdY=LcdY+1;
if (LcdY>4) LcdY=1;
LcdXY();
}
void LcdNext()
{ LcdX=LcdX+1;
if (LcdX>8) LcdLine();
}
void Prints(uchar y,uchar x,uchar idata *str,uchar Len)
{ uchar i,c,j;
LcdWrCmd(0x0c);//display on
LcdWrCmd(0x30);//basic instrution
if ((x+y)>0)
{ //LcdClr();
LcdX=x;LcdY=y;
LcdXY();//set pos
}
if (Len==0) Len=64;
i=0;
do
{ c=str[i];
if (c==0) return;
if ((c==13)||(c=='`'))
{ if (!bLoopShow) LcdLine();
i=i+1;goto NEXT;
};
if (c==0x0a) {i=i+1;goto NEXT;}
LcdWrData(c);
j=c;
i=i+1;
if (i>=Len) return;
c=str[i];
if (c==0) return;
if ((c==13)||(c=='`'))
{ if (!bLoopShow) LcdLine();
i=i+1;goto NEXT;
};
if (c==0x0a) {i=i+1;goto NEXT;}
if ((j<0xA0)&&(c>=0xA0))//汉字半位置
{ LcdWrData(0x20);
LcdNext();
}else
{
LcdWrData(c);
LcdNext();
i=i+1;
}
NEXT:
;
}
while (i<Len);
}
void PrintsRom(char y,char x,char code *str,char Len)
{ uchar i,c,j;
LedTimer=C_LED; //亮
if ((x+y)>0)
{ if (x>4) LcdClr(0);
else
{ LcdX=x;LcdY=y;
LcdXY();//set pos
}
}
if (Len==0) Len=64;
i=0;
do
{ c=str[i];
if (c==0) return;
if ((c==13)||(c=='`'))
{ LcdLine();
i=i+1;goto NEXT;
};
LcdWrData(c);
j=c;
c=str[i+1];
if (c==0) return;
if ((c==13)||(c=='`'))
{ LcdLine();
i=i+1;goto NEXT;
};
if ((j<0xA0)&&(c>=0xA0))//汉字半位置
{ LcdWrData(0x20);
LcdNext();
i=i+1;
}else
{
LcdWrData(c);
LcdNext();
i=i+2;
}
NEXT:
;
}
while (i<Len);
}
void ShowLoop0()
{ uchar Len;
bLoop=0;
if (LoopPos>=CharN) LoopPos=0;
if ((LoopPos+16)<=CharN) Len=16;else Len=CharN-LoopPos;
Prints(2,1,&CharData[LoopPos+2],Len);
LoopPos=LoopPos+2;
}
void ShowLoop()
{ uchar Len;
bLoop=0;
LcdClr(2);
if (LoopPos>=(CharN+16)) LoopPos=0;
if (LoopPos==0) LoopPos=2;
if (LoopPos<=16)
{ Len=LoopPos;
if (Len>CharN) Len=CharN;
Prints(2,(16-LoopPos)/2+1,&CharData[2],Len);
}else
{
if ((LoopPos)<=CharN) Len=16;else Len=CharN-LoopPos+16;
Prints(2,1,&CharData[LoopPos+2-16],Len);
}
LoopPos=LoopPos+2;
}
void LcdInit()
{ uchar code SHOWTAB[]=
{"长沙中天电子www.psunsky.com.cn`0731-5123999 13973199797"
};
LCDE=0;
LCDRST=0;
NOP
LCDRST=1;
LCDPSB=1;//Parall Mode
LCDLED=0;
// LCDLED=1;
LcdWrCmd(0x0c);//0f);//display on
LcdWrCmd(0x30);//basic instrution
LcdClr(0);
LcdWrCmd(0x80);//DDram=0
PrintsRom(1,1,&SHOWTAB,0);
IniPos=1;
ShowIni();
}
void ShowEprom()
{ uchar iAddr,i,j,iLen;
iAddr=0x80;
RdBytes24(iAddr,8);
DelayMs(1);
iLen=IcBuf[0];
if (iLen>64) iLen=64;
for (i=0;i<iLen+2;i=i+8)
{
if ((i+8)<=(iLen+2)) j=8;else j=iLen-i+2;
RdBytes24(iAddr,j);
for (j=0;j<8;j++)
{
if ((i+j)<C_CHARN) CharData[i+j]=IcBuf[j];
}
iAddr=iAddr+8;
}
CharN=iLen;
LcdClr(0);
LCDLED=0;
LedTimer=C_LED; //亮
bLoopShow=1;
LoopPos=0;
InputMode=0;
}
void ShowNums()
{ uchar i,j;
LcdWrCmd(0x9C);//pos
LcdWrData('[');
for (i=0;i<6;i++)
{ j=LcdBuf[i];
switch (j)
{
case 0x0a:
j='.';
break;
case 0x0f:
j=' ';
break;
default:
j=j+0x30;
break;
}
LcdWrData(j);
}
LcdWrData(']');
return;
}
void PrintNum(uchar Num,uchar Pos)
{ uchar i;
i=Num/10;
LcdBuf[Pos-1]=i;
i=Num-i*10;
LcdBuf[Pos]=i;
}
void ShowMoney()
{
PrintNum(Money,5);
}
void SendAck0() using 1
{ uchar Crc;
Crc=1;
Crc=Crc^0x50;
Crc=Crc^AddL;
Crc=Crc^AddH;
SerN=Crc;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -