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

📄 shumaguan3.lst

📁 通过对键盘的编程
💻 LST
📖 第 1 页 / 共 2 页
字号:
 190   2              }
 191   1              return result;
 192   1      }
 193                                                                          
 194          
 195          /**********************************************************************
 196          **函数功能:判断按键的键值是功能键还是数字键                                             **
 197          **参数:整型数                                                                                                           **
 198          **返回:BOOL型                                                                                                           **
 199          **********************************************************************/
 200          bit isdigit(unsigned char kvalue)
 201          {
 202   1              if(kvalue>='0'&&kvalue<='9')
 203   1              return 1;
 204   1              else 
 205   1              return 0;
 206   1      }
 207          /**********************************************************************
 208          **函数功能:把数字的ASCII转换成整型                                                                      **
 209          **参数:整型数                                                                                                           **
 210          **返回:整型                                                                                                             **
 211          **********************************************************************/
 212          unsigned char transition(unsigned char kvalue)
 213          {
 214   1              if(kvalue>='0'&&kvalue<='9')
 215   1                      return (kvalue-'0');
 216   1              else
 217   1                      return 0;
 218   1      }
 219          /**********************************************************************
 220          **函数功能:键盘扫描功能                                                                                         **
 221          **参数:无                                                                                                                       **
 222          **返回:返回键值                                                                                                         **
 223          **********************************************************************/
 224          unsigned char key_scan(void)
 225          {
 226   1              unsigned char line,row,temp,a,b,kvalue;
 227   1              temp=0xfe;
 228   1              //flag=0;
 229   1              P1=0xf0;
 230   1              if((P1&0xf0)!=0xf0)
 231   1              {
 232   2                      delay(10);
 233   2                      P1=0xf0;
 234   2                      if((P1&0xf0)!=0xf0)
 235   2                      {                       
 236   3                              
 237   3                              delay(10);
 238   3                              for(line=0;line<4;line++) //进行行扫描
 239   3                              {
 240   4                                      a=temp<<line;
 241   4                                      b=temp>>(8-line);
C51 COMPILER V8.02   SHUMAGUAN3                                                            10/22/2006 19:31:20 PAGE 5   

 242   4                                      P1=a|b;
 243   4                                      P1=P1&0x0f;
 244   4                                      P1=P1|0xf0;
 245   4                                      kvalue=P1&0xf0;
 246   4                                      if(kvalue!=0xf0)
 247   4                                      break;
 248   4                              }
 249   3                      
 250   3                              P1=P1&0x0f;
 251   3                              P1=P1|0xf0;
 252   3                              P1=0xf0;
 253   3                              while((P1&0xf0)!=0xf0)  //判断键弹起
 254   3                              {               
 255   4                              }
 256   3              
 257   3                              if(kvalue==0xe0) //确定是第几列
 258   3                              row=0;
 259   3                              else if(kvalue==0xd0)
 260   3                                      row=1;
 261   3                                      else if(kvalue==0xb0)
 262   3                                              row=2;
 263   3                                              else  if(kvalue==0x70)
 264   3                                                       row=3;
 265   3                                                       else 
 266   3                                                       return 0;
 267   3                              P1=0xf0;
 268   3                              return keyvalue[line][row];
 269   3                      }
 270   2              
 271   2              
 272   2              }
 273   1              P1=0xf0; 
 274   1              return 0;
 275   1      }       
 276          
 277          /**********************************************************************
 278          **函数功能:在数码管上显示数据                                                                           **
 279          **参数:整型数                                                                                                           **
 280          **返回:无                                                                                                                       **
 281          **********************************************************************/
 282          void display(int disnum)
 283          {
 284   1              int ge,shi,bai,qian,i,j;
 285   1              int num[5]={0,0,0,0,10};
 286   1              if(disnum<=9999)
 287   1              {
 288   2                      ge=disnum%10;
 289   2                      shi=(disnum%100)/10;
 290   2                      bai=(disnum/100)%10;
 291   2                      qian=disnum/1000;
 292   2                      num[0]=ge;
 293   2                      num[1]=shi;
 294   2                      num[2]=bai;
 295   2                      num[3]=qian;
 296   2                      if(qian!=0)
 297   2                      {
 298   3                              for(i=0;i<4;i++)
 299   3                              {
 300   4                                      
 301   4                                      P2=num_tab1[i];            //先送位码
 302   4                                      P0=num_tab2[num[i]];   //再送段码
 303   4                                      delay(1);
C51 COMPILER V8.02   SHUMAGUAN3                                                            10/22/2006 19:31:20 PAGE 6   

 304   4                              }
 305   3                      }
 306   2                      else
 307   2                      {
 308   3                              if(bai!=0)
 309   3                              {
 310   4                                      for(i=0;i<3;i++)
 311   4                                      {
 312   5                                              
 313   5                                              P2=num_tab1[i];
 314   5                                              P0=num_tab2[num[i]];
 315   5                                              delay(1);
 316   5                                      }
 317   4                              }
 318   3                              else
 319   3                              {
 320   4                                      if(shi!=0)
 321   4                                      {
 322   5                                              for(i=0;i<2;i++)
 323   5                                              {
 324   6                                                      
 325   6                                                      P2=num_tab1[i];
 326   6                                                      P0=num_tab2[num[i]];
 327   6                                                      delay(1);
 328   6                                              }
 329   5                                      }       
 330   4                                      else
 331   4                                      {
 332   5                                              for(i=0;i<1;i++)
 333   5                                              {
 334   6                                                      for(j=0;j<4;j++)
 335   6                                                      {
 336   7                                                              if(j==0)
 337   7                                                              {
 338   8                                                                      
 339   8                                                                      P2=num_tab1[j];
 340   8                                                                      P0=num_tab2[num[i]];
 341   8                                                                      delay(1);
 342   8                                                              }
 343   7                                                              else
 344   7                                                              {
 345   8                                                                      
 346   8                                                                      P2=num_tab1[j];
 347   8                                                                      P0=num_tab2[num[4]];
 348   8                                                                      delay(1);
 349   8                                                              }
 350   7                                                      }
 351   6                                              }
 352   5                                      }
 353   4                              }
 354   3                      }
 355   2              }
 356   1              else
 357   1              ;
 358   1      }
 359          /**********************************************************************
 360          **函数功能:延时时间                                                                                             **
 361          **参数:整型数                                                                                                           **
 362          **返回:无                                                                                                                       **
 363          **********************************************************************/ 
 364          void delay(unsigned int time)
 365          {
C51 COMPILER V8.02   SHUMAGUAN3                                                            10/22/2006 19:31:20 PAGE 7   

 366   1              int i;
 367   1              int k;
 368   1              for(i=0;i<time;i++)
 369   1              for(k=0;k<100;k++);
 370   1      }
 371          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1422    ----
   CONSTANT SIZE    =     56    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     47    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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