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

📄 key.lst

📁 proteus实例集锦
💻 LST
📖 第 1 页 / 共 2 页
字号:
 167   1        
 168   1        pic=P3&0x3f;
 169   1        mask=0x4;
 170   1        while(pic&mask)
 171   1              {
 172   2                   ++row;
 173   2                   mask=_crol_(mask,1);
 174   2              }
 175   1      /*等待按键释放*/
 176   1        
 177   1          while((P3&0x3f)!=0x3f);
 178   1              P1=0xff;
 179   1          /*计算按键序号并将其转换成ASCII码值返回 */
C51 COMPILER V8.02   KEY                                                                   08/26/2008 16:25:31 PAGE 4   

 180   1        pic=row*4+col;
 181   1        if(pic<10)
 182   1          pic+=0x30;
 183   1        else
 184   1          pic+=0x31;
 185   1        return (pic);
 186   1      }
 187          
 188          //---------------------------------------------------------
 189          //
 190          //     有无按键按下       bit kb_hit(void)  
 191          //       无 retrun 0
 192          //
 193          //----------------------------------------------------------
 194          bit kb_hit(void)
 195          {
 196   1         
 197   1         P1=0x0F;                                /*往矩阵键盘列线 送低电平*/
 198   1         if((P3&0x3f)==0x3f)                     /*输入并检测行线状态*/
 199   1             return((bit)0);
 200   1         delay(16);                             /*延时8MS消颤*/
 201   1         if((P3&0x3f)==0x3f)                    /*再次输入并检测行线状态*/
 202   1              return((bit)0);                    /*行线为高电平时返回0*/
 203   1         
 204   1         return((bit)1);
 205   1         
 206   1      }
 207          
 208          //---------------------------------------------------------------
 209          //
 210          //        void delay(int x)
 211          //        延时程序
 212          //---------------------------------------------------------------
 213          void delay(int x)
 214          {
 215   1         Uchar i,y;
 216   1         while(x--)
 217   1         {
 218   2             i=3;
 219   2                 while(i--)
 220   2                 {  y=40;
 221   3                    while(y--);
 222   3                      }
 223   2          }
 224   1      }
 225          
 226          /*******************************************************************************
 227                 函数原型 *get_str(Uchar *str,Uchar len);
 228              功能:  从矩阵键盘输入长度为LEN的字符串,并将其存储在由指针STR所指向的存
 229                         储器空间,并返回该指针。在输入的同时滚动显示所输入的字符
 230          ********************************************************************************/
 231          
 232          Uchar *get_str(Uchar *str,Uint len)              
 233          {
 234   1         Uchar data i;
 235   1         Uchar data ch=0,temp_ch;
 236   1         Uchar data keyboard_buf[14];
 237   1         Uchar data *ptr;
 238   1      
 239   1         Uchar  data keybuf_pos=0;
 240   1        while(keybuf_pos<len)
 241   1        {
C51 COMPILER V8.02   KEY                                                                   08/26/2008 16:25:31 PAGE 5   

 242   2                temp_ch=get_ch();
 243   2                       if(!temp_ch)
 244   2                          return 0;
 245   2                       
 246   2                 switch (temp_ch)             //按键分析
 247   2                       {
 248   3                 case 0x30:addflag=1;
 249   3                           ch=0x41;break;
 250   3                 case 0x34:subflag=1;
 251   3                          ch=0x42;break;
 252   3                 case 0x38:mulflag=1;
 253   3                          ch=0x43;break;
 254   3                 case  0x3d:divflag=1;
 255   3                          ch=0x44;break;
 256   3                 case 0x33:offflag=~offflag;
 257   3                                  ch=0x46;
 258   3                                  break;
 259   3                 case 0x31:equflag=1;
 260   3                          ch=0x45;break;
 261   3      
 262   3                 case 0x32:ch=0; break;
 263   3                 case 0x35:ch=3; break;
 264   3                 case 0x36:ch=2; break;
 265   3                 case 0x37:ch=1; break;
 266   3      
 267   3                 case 0x39:ch=6;      break;
 268   3                 case 0x3b:ch=5;   break;
 269   3                 case 0x3c:ch=4;   break;
 270   3                
 271   3                 case 0x3e:ch=9;   break;
 272   3                 case 0x3f:ch=8;   break;
 273   3                 case 0x40:ch=7;   break;
 274   3                 
 275   3                 default:     break; 
 276   3              }
 277   2              if(!offflag)
 278   2                
 279   2                  return 0;
 280   2              SBUF=ch;
 281   2              while(!TI);
 282   2              TI=0;   //         从串口发出去.
 283   2              if(ch!=0x46)
 284   2                 {
 285   3                    if(ch<10)
 286   3                        keyboard_buf[keybuf_pos++]=ch+0x30;
 287   3                         else
 288   3                            keyboard_buf[keybuf_pos++]=ch;
 289   3                 }
 290   2              //ch=0;
 291   2              if(equflag)
 292   2                break;
 293   2      
 294   2        }
 295   1         
 296   1        ptr=str;
 297   1        for(i=0;i<keybuf_pos;i++)
 298   1         {
 299   2           *str=keyboard_buf[i];
 300   2                str++;
 301   2              }
 302   1          str=ptr;/*拷贝键盘缓冲区中的输入串*/
 303   1        return(str);
C51 COMPILER V8.02   KEY                                                                   08/26/2008 16:25:31 PAGE 6   

 304   1      }
 305          //-----------------------------------------------------------------------
 306          void initflag(void)
 307          {
 308   1        addflag=0;   //加标志位
 309   1        subflag=0;   //减标志位
 310   1        mulflag=0;   //乘标志位
 311   1        divflag=0;    //除标志位
 312   1        offflag=0;   //关开键
 313   1        equflag=0;    //等于键
 314   1        
 315   1         PCON=0x80 ;
 316   1         SCON=0x40 ;
 317   1         TMOD=0x20 ;    
 318   1         TL1=0xF9      ; 
 319   1         TH1=0xF9  ;
 320   1         EA=0; //禁止中断
 321   1         TR1=1;//T1启动
 322   1              
 323   1      }


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