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

📄 0.lst

📁 键盘程序51单片机的 快来下载 很推荐的
💻 LST
字号:
C51 COMPILER V6.12  0                                                                      10/02/2007 21:20:08 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 0
OBJECT MODULE PLACED IN .\0.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\0.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <intrins.h>
   2          #include<reg51.h>                 
   3          #define uchar unsigned char
   4          #define uint  unsigned int
   5          #include"absacc.h"
   6          
   7          #include"intrins.h"
   8          #define dport P1
   9          #define unchar unsigned char
  10          sbit RS=P3^4;
  11          sbit RW=P3^3;
  12          sbit E=P3^2;
  13          unchar xpos;   //列方向地址指针
  14          unchar ypos;   //行方向地址指针
  15          #define nodisp 0
  16          #define nocur 1
  17          #define curnoflash 2
  18          #define curflsh 3
  19          void lcdwcn(unchar);
  20          void lcdwc(unchar);
  21          void writechar(unchar);
  22          void lcdpos();
  23          void lcdwd(unchar);
  24          void lcdwdn(unchar);
  25          
  26          uchar table[10]= {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};//数码管代码
  27          
  28          sbit BEEP = P3^5;         //蜂鸣器驱动线
  29          uchar dis_buf;            //显示缓存
  30          uchar  temp;
  31          uchar  key;               //键顺序吗
  32          void mdelay(unsigned int delay)
  33          {unsigned int i;
  34   1      for( ; delay>0; delay--)
  35   1      {for(i=0;i<124;i++)
  36   2      { ; }
  37   2       }
  38   1       }
  39           void setcur(unchar cur)   //光标设置
  40           {switch(cur)
  41   1       {case 0x0:
  42   2       {lcdwc(0x08); //关显示
  43   3       break;
  44   3       }
  45   2       case 0x1:
  46   2       {lcdwc(0xc); //开显示但无光标
  47   3       break;
  48   3       }
  49   2       case 0x2:
  50   2       {lcdwc(0x0e);//开显示有光标但不闪
  51   3       break;
  52   3       }
  53   2       case 0x3:
  54   2       {lcdwc(0x0f);  //开显示有光标且闪
  55   3       break;
C51 COMPILER V6.12  0                                                                      10/02/2007 21:20:08 PAGE 2   

  56   3       }
  57   2       default: break;
  58   2      
  59   2       }
  60   1       }
  61           void clrlcd()   //清屏
  62           {lcdwc(0x01);}  //在指定的行和列显示
  63           void writechar(unchar c)
  64           {lcdpos();
  65   1        lcdwd(c);
  66   1        }
  67            void waitidle()//正常读写之前LCD控制器
  68            {unchar tmp;
  69   1        dport=0xff;
  70   1        RS=0;
  71   1        RW=1;
  72   1        E=1;
  73   1        _nop_();
  74   1        for( ; ; )
  75   1        {tmp=dport;
  76   2        tmp&=0x80;
  77   2        if(tmp==0)
  78   2        break;
  79   2        }
  80   1        E=0;
  81   1        }
  82            void lcdwdn(unchar c)//不检测忙子程序
  83            {
  84   1         RS=1;
  85   1      	RW=0;
  86   1      	dport=c;//写入待写字符
  87   1      E=1;
  88   1      	_nop_();
  89   1      	E=0;
  90   1      	}
  91          void lcdwd(unchar c)//带忙坚检测的控制字子程序
  92          	{waitidle();
  93   1      	lcdwdn(c);}
  94          	void lcdwcn(unchar c)
  95          	{RS=0;
  96   1      	RW=0;
  97   1      	dport=c;
  98   1          E=1;
  99   1      	_nop_();
 100   1      	E=0;
 101   1      	}
 102          void lcdwc(unchar c)//检测忙信号的送控制字子程序
 103          {waitidle();
 104   1      lcdwcn(c);
 105   1      }
 106          void lcdpos()
 107          {unchar tmp;
 108   1      xpos&=0x0f;//范围为0~15个字符
 109   1      ypos&=0x01;//范围为0~1
 110   1      tmp=xpos;
 111   1      if(ypos==1)
 112   1      {tmp+=0x40;
 113   2      }
 114   1      tmp|=0x80;//地址加80H
 115   1      lcdwc(tmp);
 116   1      }
 117          void rstlcd()//LCD的复位程序
C51 COMPILER V6.12  0                                                                      10/02/2007 21:20:08 PAGE 3   

 118          {mdelay(15);//延时15S
 119   1      lcdwcn(0x38);
 120   1      mdelay(5);
 121   1      lcdwcn(0x38);
 122   1      mdelay(5);
 123   1      lcdwcn(0x38);
 124   1      
 125   1      lcdwc(0x38);
 126   1      lcdwc(0x08);
 127   1      lcdwc(0x01);
 128   1      lcdwc(0x06);
 129   1      lcdwc(0x0c);
 130   1      }
 131             
 132          void beep();              //蜂鸣器
 133          void delay0(uchar x);      //x*0.14MS
 134          //--------------------------------------------------
 135          /* 延时子程序*/
 136          
 137          void  delay(uchar x)
 138          { uchar j;
 139   1          while((x--)!=0)
 140   1          { for(j=0;j<125;j++)
 141   2               {;}
 142   2          }
 143   1      }
 144          //--------------------------------------------------
 145           /*键扫描子程序*/
 146           void  keyscan(void)
 147           { 
 148   1          P2=0x0F;         //低四位输入  
 149   1          delay(1);
 150   1          temp=P2;         //读P2口 
 151   1          temp=temp&0x0F;
 152   1          temp=~(temp|0xF0);
 153   1          if(temp==1)
 154   1              key=0;
 155   1          else if(temp==2)
 156   1              key=1;
 157   1          else if(temp==4)
 158   1              key=2;
 159   1          else if(temp==8)
 160   1              key=3;
 161   1          else
 162   1              key=16;
 163   1              
 164   1          P2=0xF0;        //高四位输入
 165   1          delay(1);
 166   1          temp=P2;          //读P2口       
 167   1          temp=temp&0xF0;
 168   1          temp=~((temp>>4)|0xF0);
 169   1          if(temp==1)
 170   1              key=key+0;
 171   1          else if(temp==2)
 172   1              key=key+4;
 173   1          else if(temp==4)
 174   1              key=key+8;
 175   1          else if(temp==8)
 176   1              key=key+12;
 177   1          else
 178   1              key=16;
 179   1           
C51 COMPILER V6.12  0                                                                      10/02/2007 21:20:08 PAGE 4   

 180   1           dis_buf=table[key]; //查表得键值
 181   1       }
 182          //--------------------------------------------------
 183          /*判断键是否按下*/
 184           void  keydown(void)
 185           {  
 186   1         P2=0xF0;
 187   1       if(P2!=0xF0)
 188   1       {
 189   2         keyscan();
 190   2         beep();
 191   2           // while(P1!=0xF0);  //等待键释放
 192   2       }
 193   1       } 
 194          //--------------------------------------------------
 195          void beep()
 196          {
 197   1        unsigned char i;
 198   1        for (i=0;i<100;i++)
 199   1         {
 200   2         delay0(4);
 201   2         BEEP=!BEEP;       //BEEP取反
 202   2         } 
 203   1         BEEP=1;           //关闭蜂鸣器
 204   1         delay(250);       //延时     
 205   1      }
 206          //--------------------------------------------------
 207          void delay0(uchar x)    //x*0.14MS
 208          {
 209   1       unsigned char i;
 210   1        while(x--)
 211   1       {
 212   2        for (i = 0; i<13; i++) {}
 213   2       }
 214   1      }
 215          //-------------------------------------------------- 
 216              main()
 217           {
 218   1          P0=0xFF;        
 219   1                   
 220   1          dis_buf=0xBF;
 221   1          
 222   1          while(1)
 223   1          { int t;
 224   2             keydown();
 225   2             //P0 = dis_buf;   //键值送显示
 226   2      	   t=dis_buf;
 227   2             delay(2);
 228   2      	   rstlcd();
 229   2      	   clrlcd();
 230   2      	   setcur(curflsh);
 231   2      	   xpos=2;
 232   2      	   ypos=0;
 233   2      	   writechar(t);
 234   2      	   }
 235   1             
 236   1          }
 237             
 238          
 239          


C51 COMPILER V6.12  0                                                                      10/02/2007 21:20:08 PAGE 5   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    479    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     15       4
   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 + -