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

📄 yxktvtest.c

📁 C51环境下的KTV用的娱乐投票器
💻 C
📖 第 1 页 / 共 3 页
字号:
        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 + -