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

📄 shumaguan4.lst

📁 串行口的设计
💻 LST
📖 第 1 页 / 共 3 页
字号:
 156          **函数功能:中断服务子程序                                                                                       **
 157          **参数:无                                                                                                                       **
 158          **返回:无                                                                                                                       **
 159          **********************************************************************/
 160          
 161          void int0_isr(void) interrupt 0 using 1
 162          {
 163   1      
 164   1              if(!flag)
 165   1              {
 166   2                      EX0=0;
 167   2                      flag=1;
 168   2              }
 169   1      
 170   1              
 171   1      }
 172          /**********************************************************************
 173          **函数功能:键值处理函数(处理+.-.*./.=)                                                          **
 174          **参数:字符型                                                                                                           **
 175          **返回:整型                                                                                                             **
 176          **********************************************************************/
 177          unsigned int process(unsigned char kvalue)
 178          {
 179   1      
C51 COMPILER V8.02   SHUMAGUAN4                                                            12/01/2006 21:14:03 PAGE 4   

 180   1                              if(isdigit(kvalue))//&&!flag)     //如果是数字,求值
 181   1                                      {
 182   2                                              currentvalue=transition(kvalue)+currentvalue*10;
 183   2                                              result=currentvalue;
 184   2                                              
 185   2      
 186   2                                       }
 187   1                              else                                               //如果是功能键
 188   1                                      if(kvalue=='o')                    //如果是ON/C,清0
 189   1                                      {
 190   2                                               result=0;
 191   2                                              currentvalue=0;
 192   2                                              lastvalue=0;
 193   2                                      }
 194   1                                      else if(kvalue=='+')      //如果是“+”
 195   1                                      {
 196   2                                                lastop=kvalue;           //lastop保存操作码
 197   2                                                lastvalue=result;//当前值成为上次值
 198   2                                                currentvalue=0;                  //当前值清0
 199   2                                      }
 200   1                                              else if(kvalue=='-')
 201   1                                              {
 202   2                                                      lastop=kvalue;
 203   2                                                      lastvalue=result;
 204   2                                                      currentvalue=0;
 205   2                                              }
 206   1                                                      else if(kvalue=='*')
 207   1                                                      {
 208   2                                                              lastop=kvalue;
 209   2                                                              lastvalue=result;
 210   2                                                              currentvalue=0;
 211   2                                                      }
 212   1                                                              else if(kvalue=='/')
 213   1                                                              {
 214   2                                                                      lastop=kvalue;
 215   2                                                                      lastvalue=result;
 216   2                                                                      currentvalue=0;
 217   2                                                              }                                                                               
 218   1      
 219   1                                                                      else if(kvalue=='=')     //如果是“=”
 220   1                                                                      {       
 221   2                                                                              switch(lastop)    //判断操作码是什么
 222   2                                                                              {
 223   3                                                                                      case '+':
 224   3                                                                                      {
 225   4                                                                                              result=currentvalue+lastvalue;
 226   4                                                                                              lastvalue=result;
 227   4                                                                                              break;
 228   4                                                                                      }
 229   3                                                                                      case '-':
 230   3                                                                                      {
 231   4                                                                                              result=lastvalue-currentvalue;
 232   4                                                                                              lastvalue=result;
 233   4                                                                                              break;
 234   4                                                                                      }
 235   3                                                                                      case '*':
 236   3                                                                                      {
 237   4                                                                                              result=currentvalue*lastvalue;
 238   4                                                                                              lastvalue=result;
 239   4                                                                                              break;
 240   4                                                                                      }
 241   3                                                                                      case '/':
C51 COMPILER V8.02   SHUMAGUAN4                                                            12/01/2006 21:14:03 PAGE 5   

 242   3                                                                                      {
 243   4                                                                                              result=lastvalue/currentvalue;
 244   4                                                                                              lastvalue=result;
 245   4                                                                                              break;
 246   4                                                                                      }
 247   3                                                                              }
 248   2                                                              }
 249   1              if(result>9999)
 250   1              {
 251   2                      result=0;
 252   2                      currentvalue=0;
 253   2              }
 254   1              return result;
 255   1      }
 256                                                                          
 257          
 258          /**********************************************************************
 259          **函数功能:判断按键的键值是功能键还是数字键                                             **
 260          **参数:整型数                                                                                                           **
 261          **返回:BOOL型                                                                                                           **
 262          **********************************************************************/
 263          bit isdigit(unsigned char kvalue)
 264          {
 265   1              if(kvalue>='0'&&kvalue<='9')
 266   1              return 1;
 267   1              else 
 268   1              return 0;
 269   1      }
 270          /**********************************************************************
 271          **函数功能:把数字的ASCII转换成整型                                                                      **
 272          **参数:整型数                                                                                                           **
 273          **返回:整型                                                                                                             **
 274          **********************************************************************/
 275          unsigned char transition(unsigned char kvalue)
 276          {
 277   1              if(kvalue>='0'&&kvalue<='9')
 278   1                      return (kvalue-'0');
 279   1              else
 280   1                      return 0;
 281   1      }
 282          /**********************************************************************
 283          **函数功能:键盘扫描功能                                                                                         **
 284          **参数:无                                                                                                                       **
 285          **返回:返回键值                                                                                                         **
 286          **********************************************************************/
 287          unsigned char key_scan(void)
 288          {
 289   1              unsigned char line,row,temp,a,b,kvalue1;
 290   1              temp=0xfe;
 291   1              //flag=0;
 292   1              P1=0xf0;
 293   1              if((P1&0xf0)!=0xf0)
 294   1              {
 295   2                      delay(10);
 296   2                      P1=0xf0;
 297   2                      if((P1&0xf0)!=0xf0)
 298   2                      {                       
 299   3                              
 300   3                              delay(10);
 301   3                              for(line=0;line<4;line++) //进行行扫描
 302   3                              {
 303   4                                      a=temp<<line;
C51 COMPILER V8.02   SHUMAGUAN4                                                            12/01/2006 21:14:03 PAGE 6   

 304   4                                      b=temp>>(8-line);
 305   4                                      P1=a|b;
 306   4                                      P1=P1&0x0f;
 307   4                                      P1=P1|0xf0;
 308   4                                      kvalue1=P1&0xf0;
 309   4                                      if(kvalue1!=0xf0)
 310   4                                      break;
 311   4                              }
 312   3                      
 313   3                              P1=P1&0x0f;
 314   3                              P1=P1|0xf0;
 315   3                              P1=0xf0;
 316   3                              while((P1&0xf0)!=0xf0)  //判断键弹起
 317   3                              {               

⌨️ 快捷键说明

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