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

📄 lcdkey.lst

📁 /* LJD-IV 液晶、键盘驱动 /* 作者:刘延军 /* 2007年10月2日
💻 LST
字号:
C51 COMPILER V8.05a   LCDKEY                                                               05/14/2008 15:41:40 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE LCDKEY
OBJECT MODULE PLACED IN E:\PROJECTS\CYDLJK1\LCDKEY.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\PROJECTS\CYDLJK1\LCDKEY.C DB SB OE OT(0)

line level    source

   1          /********************************************/
   2          /* LJD-IV 液晶、键盘驱动
   3          /* 作者:刘延军
   4          /* 2007年10月2日
   5          /********************************************/
   6          
   7          #include <lcdkey.h>
   8          #include <reg52.h>
   9          /***********LCD******************************/
  10          
  11          /*LCD显示初始化*/
  12          void LcdInitialize(void)
  13          {
  14   1        LCD8255CONTROL=0x88;
  15   1        LCD8255C=0x84;
  16   1        LCD8255C=0x82;
  17   1        LCD8255B=0;
  18   1      }
  19          /*查询ASK状态*/
  20          bit QueryAsk()
  21          {
  22   1        if(LCD8255C&0x80)
  23   1          return 1;
  24   1        else
  25   1          return 0;
  26   1      
  27   1      }
  28          /*延时*/
  29          void LcdDelay()
  30          {
  31   1        unsigned char t1,t2;
  32   1      
  33   1        for(t1=0;t1<0x0a;t1++)
  34   1           for(t2=0;t2<0xff;t2++)
  35   1             {
  36   2             }
  37   1      }
  38          /*向LCD发送数据ch,握手协议ASK/ANSWER*/
  39          void SendDataToLcd(unsigned char ch)
  40          {
  41   1        LCD8255A=ch;    //命令ch送数据口
  42   1        LcdDelay();        //延时
  43   1        LCD8255B=0xff;  //置ANSWER为高电平,锁存数据到LCD
  44   1        LcdDelay();        //延时
  45   1        while(QueryAsk==0)
  46   1        {
  47   2                        //判断LCD模块是否忙于内部处理数据(ASK=1?)
  48   2        }
  49   1        LCD8255B=0;     //ASK=1后,拉低ANSWER
  50   1        while(QueryAsk==1)
  51   1        {
  52   2                        //等待ASK=0,准备发送下一个数据
  53   2        }
  54   1      }
  55          
C51 COMPILER V8.05a   LCDKEY                                                               05/14/2008 15:41:40 PAGE 2   

  56          /*显示ASCII字符*/
  57          void LcdDisplayAsc(unsigned char xx,unsigned char yy,unsigned char asc)
  58          {
  59   1        while(QueryAsk==1) ; //ASK为0后方可发送数据
  60   1        SendDataToLcd(0xF1); //显示ASCII字符,操作码F1
  61   1        SendDataToLcd(xx);
  62   1        SendDataToLcd(yy);
  63   1        SendDataToLcd(asc);
  64   1      }
  65          
  66          /*显示区位码汉字*/
  67          void LcdDisplayWord(unsigned char xx,unsigned char yy,
  68                                   unsigned char qq,unsigned char ww)
  69          {
  70   1        while(QueryAsk==1) ; //ASK为0后方可发送数据
  71   1        SendDataToLcd(0xF0); //显示区位码汉字,操作码F0
  72   1        SendDataToLcd(xx);
  73   1        SendDataToLcd(yy);
  74   1        SendDataToLcd(qq);
  75   1        SendDataToLcd(ww);
  76   1      }
  77          
  78          /*显示浮点型数据*/
  79          void LcdDisplayFloat(unsigned char xx,unsigned char yy,float fdata)
  80          {
  81   1        unsigned char ascArr[17],*p,x,y;
  82   1      
  83   1        x=xx;y=yy;
  84   1        p=ascArr;
  85   1        sprintf(p,"%f",fdata);
  86   1        for(;*p;p++)
  87   1          {
  88   2            LcdDisplayAsc(x++,y,*p);
  89   2          }
  90   1      
  91   1      }
  92          /*显示位点阵*/
  93          void LcdDisplayDotBit(unsigned char xx,unsigned char yy)
  94          {
  95   1        while(QueryAsk==1) ; //ASK为0后方可发送数据
  96   1        SendDataToLcd(0xF2); //显示位点阵,操作码F2
  97   1        SendDataToLcd(xx);
  98   1        SendDataToLcd(yy);
  99   1      }
 100          /*显示字节点阵*/
 101          void LcdDisplayDotByte(unsigned char xx,unsigned char yy,unsigned char bt)
 102          {
 103   1         while(QueryAsk==1) ; //ASK为0后方可发送数据
 104   1        SendDataToLcd(0xF3); //显示字节点阵,操作码F3
 105   1        SendDataToLcd(xx);
 106   1        SendDataToLcd(yy);
 107   1        SendDataToLcd(bt);
 108   1      }
 109          /*清屏*/
 110          void LcdClear(void)
 111          {
 112   1        while(QueryAsk==1) ; //ASK为0后方可发送数据
 113   1        SendDataToLcd(0xF4);
 114   1      }
 115          /*局部清屏*/
 116          void LcdClearSection(unsigned char xx,unsigned char yy)
 117          {
C51 COMPILER V8.05a   LCDKEY                                                               05/14/2008 15:41:40 PAGE 3   

 118   1        while(QueryAsk==1) ; //ASK为0后方可发送数据
 119   1        SendDataToLcd(0xF0);
 120   1        SendDataToLcd(xx);
 121   1        SendDataToLcd(yy);
 122   1        SendDataToLcd(55);
 123   1        SendDataToLcd(90);
 124   1      
 125   1      }
 126          /*上移*/
 127          void LcdShiftUp(void)
 128          {
 129   1        while(QueryAsk==1) ; //ASK为0后方可发送数据
 130   1        SendDataToLcd(0xF5);
 131   1      }
 132          
 133          /*下移*/
 134          void LcdShiftDown(void)
 135          {
 136   1        while(QueryAsk==1) ; //ASK为0后方可发送数据
 137   1        SendDataToLcd(0xF6);
 138   1      }
 139          
 140          /*左移*/
 141          void LcdShiftLeft(void)
 142          {
 143   1        while(QueryAsk==1) ; //ASK为0后方可发送数据
 144   1        SendDataToLcd(0xF7);
 145   1      }
 146          
 147          /*右移*/
 148          void LcdShiftRight(void)
 149          {
 150   1        while(QueryAsk==1) ; //ASK为0后方可发送数据
 151   1        SendDataToLcd(0xF8);
 152   1      }
 153          
 154          /*************LCD END****************/
 155          
 156          
 157          /*************KEY********************/
 158          void KeyInitialize(void)
 159          {
 160   1      
 161   1         KEY8279COM=0xDF;       //总清除命令
 162   1          do
 163   1          {
 164   2              ACC=KEY8279COM;    //读取8279状态
 165   2          }while(ACC^7==1);      //等待清除命令结束
 166   1      
 167   1          KEY8279COM=0x01;       //译码扫描键盘
 168   1      
 169   1          KEY8279COM=0x32;       //18分频,8279CLK接ALE(主频/6)
 170   1      
 171   1      }
 172          
 173          bit KeyPressed(void)       /*判断FIFO有键按下*/
 174          {
 175   1           if( KEY8279COM&0x0f)
 176   1              return 1;
 177   1           else
 178   1              return 0;
 179   1      
C51 COMPILER V8.05a   LCDKEY                                                               05/14/2008 15:41:40 PAGE 4   

 180   1      }
 181          
 182          unsigned char ReadKey(void)  //读取键盘码
 183          {
 184   1         unsigned char ScanCode,Key;
 185   1      
 186   1         while(KeyPressed()==0) ;  //无键按下等待
 187   1         KEY8279COM=0x40;          //读FIFO RAM的命令
 188   1         ScanCode=KEY8279DATA;     //取键盘数据
 189   1         //ScanCode=ScanCode&0x3f;  //取低六位为键盘值
 190   1      
 191   1         switch(ScanCode)
 192   1           {
 193   2      
 194   2              case 0xd8:{Key=1;break;}
 195   2              case 0xd9:{Key=2;break;}
 196   2              case 0xda:{Key=3;break;}
 197   2              case 0xdb:{Key=4;break;}
 198   2              case 0xdc:{Key=5;break;}
 199   2              case 0xd0:{Key=6;break;}
 200   2              case 0xd1:{Key=7;break;}
 201   2              case 0xd2:{Key=8;break;}
 202   2              case 0xd3:{Key=9;break;}
 203   2              case 0xd4:{Key=0;break;}  //数字键
 204   2      
 205   2              case 0xc8:{Key=0x0a;break;}   //Next
 206   2              case 0xc9:{Key=0x0b;break;}   //Pre
 207   2              case 0xca:{Key=0x0c;break;}   //OK
 208   2              case 0xcb:{Key=0x0d;break;}   //Cancel
 209   2              case 0xcc:{Key=0x0e;break;}   //STOP
 210   2              default : Key=0xff;
 211   2            }
 212   1          return Key;
 213   1      }
 214          /*************KEY END****************/
C51 COMPILER V8.05a   LCDKEY                                                               05/14/2008 15:41:40 PAGE 5   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


LcdClear . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
KeyPressed . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
LcdDelay . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  t1 . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  t2 . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
_LcdDisplayAsc . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  xx . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  yy . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
  asc. . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0002H  1
_sprintf . . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
IE . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A8H  1
_LcdDisplayWord. . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  xx . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  yy . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
  qq . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0002H  1
  ww . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0003H  1
size_t . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
LcdShiftRight. . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
IP . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B8H  1
LcdShiftLeft . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
ReadKey. . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  ScanCode . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  Key. . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
LcdInitialize. . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
_LcdDisplayDotByte . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  xx . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  yy . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
  bt . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0002H  1
LcdShiftDown . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
SCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0098H  1
TCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0088H  1
QueryAsk . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
_LcdDisplayDotBit. . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  xx . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  yy . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
KeyInitialize. . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
ACC. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00E0H  1
_LcdClearSection . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  xx . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  yy . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
LcdShiftUp . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
_SendDataToLcd . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  ch . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
T2CON. . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00C8H  1
_LcdDisplayFloat . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  xx . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  yy . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
  fdata. . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0002H  4
  ascArr . . . . . . . . . . . . . . .  AUTO     DATA   ARRAY    0006H  17
  p. . . . . . . . . . . . . . . . . .  AUTO     DATA   PTR      0017H  3
  x. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   001AH  1
  y. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   001BH  1
PSW. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00D0H  1


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V8.05a   LCDKEY                                                               05/14/2008 15:41:40 PAGE 6   

   CODE SIZE        =    763    ----
   CONSTANT SIZE    =      3    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     47    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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