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

📄 lcdkey.c

📁 /* LJD-IV 液晶、键盘驱动 /* 作者:刘延军 /* 2007年10月2日
💻 C
字号:
/********************************************/
/* LJD-IV 液晶、键盘驱动
/* 作者:刘延军
/* 2007年10月2日
/********************************************/

#include <lcdkey.h>
#include <reg52.h>
/***********LCD******************************/

/*LCD显示初始化*/
void LcdInitialize(void)
{
  LCD8255CONTROL=0x88;
  LCD8255C=0x84;
  LCD8255C=0x82;
  LCD8255B=0;
}
/*查询ASK状态*/
bit QueryAsk()
{
  if(LCD8255C&0x80)
    return 1;
  else
    return 0;

}
/*延时*/
void LcdDelay()
{
  unsigned char t1,t2;

  for(t1=0;t1<0x0a;t1++)
     for(t2=0;t2<0xff;t2++)
       {
       }
}
/*向LCD发送数据ch,握手协议ASK/ANSWER*/
void SendDataToLcd(unsigned char ch)
{
  LCD8255A=ch;    //命令ch送数据口
  LcdDelay();        //延时
  LCD8255B=0xff;  //置ANSWER为高电平,锁存数据到LCD
  LcdDelay();        //延时
  while(QueryAsk==0)
  {
                  //判断LCD模块是否忙于内部处理数据(ASK=1?)
  }
  LCD8255B=0;     //ASK=1后,拉低ANSWER
  while(QueryAsk==1)
  {
                  //等待ASK=0,准备发送下一个数据
  }
}

/*显示ASCII字符*/
void LcdDisplayAsc(unsigned char xx,unsigned char yy,unsigned char asc)
{
  while(QueryAsk==1) ; //ASK为0后方可发送数据
  SendDataToLcd(0xF1); //显示ASCII字符,操作码F1
  SendDataToLcd(xx);
  SendDataToLcd(yy);
  SendDataToLcd(asc);
}

/*显示区位码汉字*/
void LcdDisplayWord(unsigned char xx,unsigned char yy,
                         unsigned char qq,unsigned char ww)
{
  while(QueryAsk==1) ; //ASK为0后方可发送数据
  SendDataToLcd(0xF0); //显示区位码汉字,操作码F0
  SendDataToLcd(xx);
  SendDataToLcd(yy);
  SendDataToLcd(qq);
  SendDataToLcd(ww);
}

/*显示浮点型数据*/
void LcdDisplayFloat(unsigned char xx,unsigned char yy,float fdata)
{
  unsigned char ascArr[17],*p,x,y;

  x=xx;y=yy;
  p=ascArr;
  sprintf(p,"%f",fdata);
  for(;*p;p++)
    {
      LcdDisplayAsc(x++,y,*p);
    }

}
/*显示位点阵*/
void LcdDisplayDotBit(unsigned char xx,unsigned char yy)
{
  while(QueryAsk==1) ; //ASK为0后方可发送数据
  SendDataToLcd(0xF2); //显示位点阵,操作码F2
  SendDataToLcd(xx);
  SendDataToLcd(yy);
}
/*显示字节点阵*/
void LcdDisplayDotByte(unsigned char xx,unsigned char yy,unsigned char bt)
{
   while(QueryAsk==1) ; //ASK为0后方可发送数据
  SendDataToLcd(0xF3); //显示字节点阵,操作码F3
  SendDataToLcd(xx);
  SendDataToLcd(yy);
  SendDataToLcd(bt);
}
/*清屏*/
void LcdClear(void)
{
  while(QueryAsk==1) ; //ASK为0后方可发送数据
  SendDataToLcd(0xF4);
}
/*局部清屏*/
void LcdClearSection(unsigned char xx,unsigned char yy)
{
  while(QueryAsk==1) ; //ASK为0后方可发送数据
  SendDataToLcd(0xF0);
  SendDataToLcd(xx);
  SendDataToLcd(yy);
  SendDataToLcd(55);
  SendDataToLcd(90);

}
/*上移*/
void LcdShiftUp(void)
{
  while(QueryAsk==1) ; //ASK为0后方可发送数据
  SendDataToLcd(0xF5);
}

/*下移*/
void LcdShiftDown(void)
{
  while(QueryAsk==1) ; //ASK为0后方可发送数据
  SendDataToLcd(0xF6);
}

/*左移*/
void LcdShiftLeft(void)
{
  while(QueryAsk==1) ; //ASK为0后方可发送数据
  SendDataToLcd(0xF7);
}

/*右移*/
void LcdShiftRight(void)
{
  while(QueryAsk==1) ; //ASK为0后方可发送数据
  SendDataToLcd(0xF8);
}

/*************LCD END****************/


/*************KEY********************/
void KeyInitialize(void)
{

   KEY8279COM=0xDF;       //总清除命令
    do
    {
        ACC=KEY8279COM;    //读取8279状态
    }while(ACC^7==1);      //等待清除命令结束

    KEY8279COM=0x01;       //译码扫描键盘

    KEY8279COM=0x32;       //18分频,8279CLK接ALE(主频/6)

}

bit KeyPressed(void)       /*判断FIFO有键按下*/
{
     if( KEY8279COM&0x0f)
        return 1;
     else
        return 0;

}

unsigned char ReadKey(void)  //读取键盘码
{
   unsigned char ScanCode,Key;

   while(KeyPressed()==0) ;  //无键按下等待
   KEY8279COM=0x40;          //读FIFO RAM的命令
   ScanCode=KEY8279DATA;     //取键盘数据
   //ScanCode=ScanCode&0x3f;  //取低六位为键盘值

   switch(ScanCode)
     {

     	case 0xd8:{Key=1;break;}
        case 0xd9:{Key=2;break;}
        case 0xda:{Key=3;break;}
        case 0xdb:{Key=4;break;}
        case 0xdc:{Key=5;break;}
        case 0xd0:{Key=6;break;}
        case 0xd1:{Key=7;break;}
        case 0xd2:{Key=8;break;}
        case 0xd3:{Key=9;break;}
        case 0xd4:{Key=0;break;}  //数字键

        case 0xc8:{Key=0x0a;break;}   //Next
        case 0xc9:{Key=0x0b;break;}   //Pre
        case 0xca:{Key=0x0c;break;}   //OK
        case 0xcb:{Key=0x0d;break;}   //Cancel
        case 0xcc:{Key=0x0e;break;}   //STOP
        default : Key=0xff;
      }
    return Key;
}
/*************KEY END****************/

⌨️ 快捷键说明

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