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

📄 play.lst

📁 基于c8051f单片机的工控机的开发
💻 LST
📖 第 1 页 / 共 5 页
字号:
 253          void LCDSHOW(uchar number)//调用预置画面
 254          {
 255   1              LCDGBOC(0);//关光标
 256   1              LCDXY(0,0);//将光标置于(0,0)处
 257   1              LCDOVERLAP(0);//采用重叠方式
 258   1              LCDDAT(0x1B);
 259   1              LCDDAT(0x50);
 260   1              LCDDAT(number);//调用相关画面
 261   1      }
 262          //*********************************************************************
 263          void ALARM(uchar alarm)//报警画面显示函数
 264          {
 265   1              MOTORSTOP;//关电机
 266   1              DAC0CN=0x00;//将DAC0CN寄存器的最高位DAC0EN置0表示关DAC0
 267   1              SFRPAGE=DAC1_PAGE;
 268   1              DAC1CN=0x00;
 269   1              SFRPAGE=LEGACY_PAGE;
 270   1              BEEP=1;//蜂明器鸣叫
 271   1              LCDSHOW(alarm);//显示错误画面
 272   1      }
 273          //*********************************************************************
 274          void AIWR(uchar dat)//向串口0写数据函数
 275          {
 276   1              SBUF0=dat;
 277   1              while(!TI0){}
 278   1              TI0=0;
 279   1      }
 280          //
 281          uint WRITEAI(uchar addr,uint dat)//AI8080P写数据函数
 282          {
 283   1              uint CRC;       
 284   1              ERRORNUM=0;
 285   1      again:
 286   1              CRC=AIADDR+0x43+addr*256+dat;
 287   1              AIOVERFLG=0;
 288   1              AITIME=0;
 289   1              delay100us();
 290   1              TR=1;
 291   1              delay100us();
 292   1              REN0=0;//暂时不能接收数据
 293   1              RI0=0;
 294   1              TI0=0;
 295   1              ES0=0;
 296   1              AIDATNUM=0;
 297   1              TIMEFLG=0;              
 298   1              AIWR(AIADDR+0x80);
 299   1              AIWR(AIADDR+0x80);//传2遍地址
 300   1              AIWR(0x43);
 301   1              AIWR(addr);
 302   1              AIWR(dat%256);
 303   1              AIWR(dat/256);//传数据
C51 COMPILER V7.07   PLAY                                                                  04/24/2003 17:03:47 PAGE 6   

 304   1              AIWR(CRC%256);
 305   1              AIWR(CRC/256);//传CRC码
 306   1              delay100us();
 307   1              ES0=1;//开串口0的中断,准备接收数据
 308   1              REN0=1;//允许接收数据   
 309   1              TR=0;
 310   1              while(!AIOVERFLG){}
 311   1              TR=1;
 312   1              if(TIMEFLG)
 313   1              {
 314   2                      ERRORNUM++;
 315   2                      if(ERRORNUM == 10)
 316   2                      {
 317   3                              ALARM(COMMUERROR);
 318   3                              while(1){}
 319   3                      }
 320   2                      goto again;     
 321   2              }
 322   1              else
 323   1              {
 324   2                      CRC=AIBUF[0]+AIBUF[1]*256+AIBUF[2]+AIBUF[3]*256+AIBUF[4]+AIBUF[5]*256+AIBUF[6]+AIBUF[7]*256+AIADDR;
 325   2                      if(CRC != (AIBUF[8]+AIBUF[9]*256))//如果校验错误则表有问题
 326   2                      {
 327   3                              ERRORNUM++;
 328   3                              if(ERRORNUM == 10)
 329   3                              {
 330   4                                      ALARM(COMMUERROR);
 331   4                                      while(1){}
 332   4                              }
 333   3                              goto again;             
 334   3                      }
 335   2                      else
 336   2                      {
 337   3                              return(AIBUF[0]+AIBUF[1]*256);
 338   3                      }
 339   2              }
 340   1      }
 341          //
 342          uint READAI(uchar addr)//AI808P读数据函数
 343          {
 344   1              uint CRC;
 345   1              ERRORNUM=0;
 346   1      again:  
 347   1              CRC=AIADDR+0x52+addr*256;
 348   1              AIOVERFLG=0;
 349   1              AITIME=0;
 350   1              delay100us();
 351   1              TR=1;
 352   1              delay100us();
 353   1              REN0=0;//暂时不能接收数据
 354   1              RI0=0;
 355   1              TI0=0;
 356   1              ES0=0;
 357   1              AIDATNUM=0;
 358   1              TIMEFLG=0;              
 359   1              AIWR(AIADDR+0x80);
 360   1              AIWR(AIADDR+0x80);//传2遍地址
 361   1              AIWR(0x52);
 362   1              AIWR(addr);
 363   1              AIWR(0);
 364   1              AIWR(0);//传数据
 365   1              AIWR(CRC%256);
C51 COMPILER V7.07   PLAY                                                                  04/24/2003 17:03:47 PAGE 7   

 366   1              AIWR(CRC/256);//传CRC码
 367   1              delay100us();
 368   1              ES0=1;//开串口0的中断,准备接收数据
 369   1              REN0=1;//允许接收数据   
 370   1              TR=0;
 371   1              while(!AIOVERFLG){}
 372   1              TR=1;
 373   1              if(TIMEFLG)
 374   1              {
 375   2                      ERRORNUM++;
 376   2                      if(ERRORNUM == 10)
 377   2                      {
 378   3                              ALARM(COMMUERROR);
 379   3                              while(1){}
 380   3                      }
 381   2                      goto again;     
 382   2              }
 383   1              else
 384   1              {
 385   2                      CRC=AIBUF[0]+AIBUF[1]*256+AIBUF[2]+AIBUF[3]*256+AIBUF[4]+AIBUF[5]*256+AIBUF[6]+AIBUF[7]*256+AIADDR;
 386   2                      if(CRC != (AIBUF[8]+AIBUF[9]*256))//如果校验错误则表有问题
 387   2                      {
 388   3                              ERRORNUM++;
 389   3                              if(ERRORNUM == 10)
 390   3                              {
 391   4                                      ALARM(COMMUERROR);
 392   4                                      while(1){}
 393   4                              }
 394   3                              goto again;     
 395   3                      }
 396   2                      else
 397   2                      {
 398   3                              return(AIBUF[6]+AIBUF[7]*256);
 399   3                      }
 400   2              }
 401   1      }
 402          //
 403          void AISAVE()//存储工艺参数到AI808P表
 404          {
 405   1              uchar i;
 406   1              for(i=0;i<20;i++)
 407   1              {       
 408   2                      WRITEAI(0x1A+i*2,GY[GYNUM].temperature[i]);
 409   2                      if(GY[GYNUM].time[i+1]==0)
 410   2                      {
 411   3                              WRITEAI(0x1B+i*2,-121);
 412   3                              break;
 413   3                      }
 414   2                      else
 415   2                      {
 416   3                              WRITEAI(0x1B+i*2,GY[GYNUM].time[i+1]);
 417   3                      }
 418   2              }
 419   1      }
 420          //*********************************************************************
 421          //键盘函数
 422          uchar keycode()//该函数是在有键按下时才进入的函数
 423          {
 424   1              if(((key_temp[0] != 0x3F) && (key_temp[1] != 0x3F))||
 425   1                 ((key_temp[0] != 0x3F) && (key_temp[2] != 0x3F))||
 426   1                 ((key_temp[1] != 0x3F) && (key_temp[2] != 0x3F)) )//如果出现有2个以上键同时按下的情况则返回0xFF作
 427   1              {
C51 COMPILER V7.07   PLAY                                                                  04/24/2003 17:03:47 PAGE 8   

 428   2                      return (0xFF);//所以返回0xFF
 429   2              }
 430   1              else//如果不是则进行下面
 431   1              {
 432   2                      if(key_temp[2] == 0x3F)//如果2排没有键按下,那么只有可能是0排或者1排有键按下,因为同时按下已经在前面过滤
             -了
 433   2                      {
 434   3                              if(key_temp[0] != 0x3F)//如果0排有键按下,那么返回按下的键值
 435   3                              {
 436   4                                      switch(key_temp[0])
 437   4                                      {
 438   5                                              case 0x3E: {return ('S');break;}//返回 确定
 439   5                                              case 0x3D: {return ('C');break;}//返回 取消
 440   5                                              case 0x3B: {return ('M');break;}//返回 手动
 441   5                                              case 0x37: {return ('U');break;}//返回 上
 442   5                                              case 0x2F: {return ('R');break;}//返回 右
 443   5                                              default:   {return (0xFF);break;}//避免同一排有2个以上的键按下
 444   5                                      }
 445   4                              }
 446   3                              else//如果0排没有键按下,那么只有可能是1排了
 447   3                              {
 448   4                                      switch(key_temp[1])
 449   4                                      {
 450   5                                              case 0x3E: {return ('0');break;}//返回 0
 451   5                                              case 0x3D: {return ('1');break;}//返回 1
 452   5                                              case 0x3B: {return ('2');break;}//返回 2
 453   5                                              case 0x37: {return ('3');break;}//返回 3
 454   5                                              case 0x2F: {return ('4');break;}//返回 4
 455   5                                              case 0x1F: {return ('L');break;}//返回 左
 456   5                                              default:   {return (0xFF);break;}//避免同一排有2个以上的键按下
 457   5                                      }
 458   4                              }
 459   3                      }
 460   2                      else//如果2排有键按下,则进行下面
 461   2                      {
 462   3                              switch(key_temp[2])//返回2排的键值
 463   3                              {
 464   4                                      case 0x3E: {return ('5');break;}//返回 5
 465   4                                      case 0x3D: {return ('6');break;}//返回 6
 466   4                                      case 0x3B: {return ('7');break;}//返回 7
 467   4                                      case 0x37: {return ('8');break;}//返回 8
 468   4                                      case 0x2F: {return ('9');break;}//返回 9
 469   4                                      case 0x1F: {return ('D');break;}//返回 下
 470   4                                      default:   {return (0xFF);break;}//避免不规范的组合键
 471   4                              }
 472   3                      }
 473   2              }
 474   1      }
 475          //
 476          void kbscan (void)//键盘扫面函数
 477          {
 478   1              uchar record[3];
 479   1              KEYX0=0;KEYX1=0;KEYX2=0;        
 480   1              //P1 |=0x3F;
 481   1              if((P1 & 0x3F) != 0x3F)//有键按下才进入
 482   1              {
 483   2                      KEYX0=0;KEYX1=1;KEYX2=1;
 484   2                      record[0]=P1 & 0x3F;
 485   2                      KEYX0=1;KEYX1=0;KEYX2=1;
 486   2                      record[1]=P1 & 0x3F;
 487   2                      KEYX0=1;KEYX1=1;KEYX2=0;
 488   2                      record[2]=P1 & 0x3F;    
C51 COMPILER V7.07   PLAY                                                                  04/24/2003 17:03:47 PAGE 9   

 489   2                      if((key_temp[0]==record[0]) && (key_temp[1]==record[1]) && (key_temp[2]==record[2]))
 490   2                      {//第一次按下一个键,那么该条件等式可定不成立
 491   3                              if(keyturn)
 492   3                              {
 493   4                                      KEY=keycode();
 494   4                                      keyturn=0;
 495   4                              }                       
 496   3                      }
 497   2                      else
 498   2                      {
 499   3                              key_temp[0]=record[0];
 500   3                              key_temp[1]=record[1];
 501   3                              key_temp[2]=record[2];
 502   3                              keyturn=1;
 503   3                      }
 504   2              }
 505   1              else//当没有键按下时,初始化键盘相关参数为无键按下状态的值
 506   1              {
 507   2                      key_temp[0]=0x3F;
 508   2                      key_temp[1]=0x3F;
 509   2                      key_temp[2]=0x3F;
 510   2                      KEY=0xFF;
 511   2              }
 512   1      }

⌨️ 快捷键说明

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