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

📄 a.lst

📁 用8255扩展键盘
💻 LST
字号:
C51 COMPILER V7.20   A                                                                     04/25/2008 11:14:09 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE A
OBJECT MODULE PLACED IN a.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE a.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*-------------说明--------------------------*/
   2          //P0液晶数据
   3          //P1矩阵键盘
   4          //P2液晶功能端
   5          /*-----------------------------------------------*/
   6          #include <stdio.h>
   7          #include <reg51.h>
   8          #include<absacc.h>
   9          #include<intrins.h>
  10          unsigned char k=' '; 
  11          
  12          sbit rs = P1^0;   //1=数据; 0=指令;
  13          sbit rw = P1^1;   //1=读; 0=写;
  14          sbit  e = P1^2;   //1=使能;
  15          
  16          #define PA XBYTE[0x1FFC]
  17          #define PB XBYTE[0x1FFD]
  18          #define PC XBYTE[0x1800]
  19          #define COM XBYTE[0x1C00]
  20          #define LCD XBYTE[0x2FFF]
  21          #define unchar  unsigned char
  22          #define unint   unsigned int  
  23          
  24          
  25          
  26          
  27          /*-------------键盘去抖动延时--------------------------*/
  28          void delay1(void)
  29          {
  30   1      unsigned char i;
  31   1      for(i=0;i<200;i++)
  32   1      {}
  33   1      }
  34          
  35          /*-------------键盘扫描--------------------------*/
  36          unsigned char keyscan(void)
  37          {
  38   1      unsigned char code_h;
  39   1      unsigned char code_l;
  40   1      COM=0x88;
  41   1      PC=0xF0;
  42   1      if((PC&0xF0)!=0xf0)
  43   1       {
  44   2        delay1();
  45   2        if((PC&0xF0)!=0xf0)
  46   2         {
  47   3          code_h=0xfe;
  48   3          while((code_h&0x10)!=0)
  49   3           {    
  50   4            PC=code_h;                          
  51   4            if((PC&0xF0)!=0xf0)
  52   4             {
  53   5              code_l=(PC&0xf0)|0x0f;
  54   5              return((~code_h)+(~code_l));
  55   5             }
C51 COMPILER V7.20   A                                                                     04/25/2008 11:14:09 PAGE 2   

  56   4             else
  57   4             code_h=(code_h<<1)|0x01;
  58   4           }
  59   3          }
  60   2         }
  61   1        return(0);
  62   1      }
  63          /*-------------键盘数字识别--------------------------*/
  64          unsigned char identify(void)
  65          {
  66   1      unsigned char a;
  67   1      a=keyscan();
  68   1      switch(a)
  69   1       {
  70   2        case 0x11:k='1';break;
  71   2        case 0x21:k='5';break;
  72   2        case 0x41:k='9';break;
  73   2        case 0x81:k='C';break;
  74   2        case 0x12:k='2';break;
  75   2        case 0x22:k='6';break;
  76   2        case 0x42:k='0';break;
  77   2        case 0x82:k='D';break;
  78   2        case 0x14:k='3';break;
  79   2        case 0x24:k='7';break;
  80   2        case 0x44:k='A';break;
  81   2        case 0x84:k='E';break;
  82   2        case 0x18:k='4';break;
  83   2        case 0x28:k='8';break;
  84   2        case 0x48:k='B';break;
  85   2        case 0x88:k='F';break;
  86   2        default:break;
  87   2       }
  88   1      return(k);
  89   1      }
  90          
  91          /*-------------测忙延时--------------------------*/
  92          void delay(unsigned char i)    //225不稳定,确保安全230-250 约0.5ms
  93          { 
  94   1      while(--i);
  95   1      }
  96          
  97          /*---------------写数据------------------------*/
  98          lcd_write_data(unsigned char c) 
  99          { 
 100   1      delay(250);
 101   1      rs=1;
 102   1      rw=0;
 103   1      LCD=c;
 104   1      e=1;
 105   1      _nop_();
 106   1      _nop_();
 107   1      e=0;
 108   1      }
 109          
 110          /*---------------写指令------------------------*/
 111          lcd_write_comm(unsigned char c) 
 112          { 
 113   1      delay(250);
 114   1      rs=0;
 115   1      rw=0;
 116   1      LCD=c;
 117   1      e=1;
C51 COMPILER V7.20   A                                                                     04/25/2008 11:14:09 PAGE 3   

 118   1      _nop_();
 119   1      _nop_(); 
 120   1      e=0;
 121   1      }
 122          
 123          /*------------------初始化-----------------*/
 124          void init_lcd (void)
 125          {
 126   1      lcd_write_comm (0x30);  //基本指令集  
 127   1      lcd_write_comm (0x01);  //清屏,地址指针指向00H
 128   1      lcd_write_comm (0x06);  //光标的移动方向
 129   1      lcd_write_comm (0x0c);  //开显示,关游标
 130   1      }
 131          
 132          /************************************************************************************************
 133          lcd_write_sentence函数:
 134          指定起始行,起始列,连续写入字符串;注意:字符串长度必须小于8;行:1-4;列:0-7
 135          *************************************************************************************************/
 136          
 137          void lcd_write_sentence(unchar row,unchar col,unchar *string,unchar lenth)   
 138          {
 139   1        unchar i=0;
 140   1        lcd_write_comm (0x30);
 141   1        switch(row)
 142   1        {
 143   2          case 1:
 144   2               lcd_write_comm(0x80+col);        //第一行
 145   2               break;
 146   2              case 2:
 147   2               lcd_write_comm(0x90+col);        //第二行
 148   2               break;
 149   2          case 3:
 150   2               lcd_write_comm(0x88+col);        //第三行
 151   2               break;
 152   2              case 4:
 153   2               lcd_write_comm(0x98+col);        //第四行
 154   2               break;
 155   2               default: 
 156   2               lcd_write_comm(0x80);            //缺省为第一行
 157   2               break;
 158   2         }
 159   1        while(lenth-->0)
 160   1        { 
 161   2          lcd_write_data(string[i]);            //写入字符串
 162   2              i++;
 163   2        }
 164   1      }
 165          
 166          
 167          /*------------------主程序--------------------*/
 168          void main ()
 169          {
 170   1       unsigned char buf1[20],i;
 171   1        init_lcd ();
 172   1      
 173   1      while (1)
 174   1       {
 175   2      for(i=0;i<3;i++)
 176   2      {buf1[i]=identify();}
 177   2       lcd_write_sentence(1,0,"键值:",6);
 178   2       lcd_write_sentence(2,0,buf1,3);
 179   2       }
C51 COMPILER V7.20   A                                                                     04/25/2008 11:14:09 PAGE 4   

 180   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    424    ----
   CONSTANT SIZE    =      7    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      26
   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 + -