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

📄 main.lst

📁 这是本人有幸收集的最完整的10多级液晶显示程序模块
💻 LST
📖 第 1 页 / 共 5 页
字号:
 508   1         {
 509   2            if(++remote_fault_count>5)
 510   2            {
 511   3              remote_fault_count=0;
 512   3              old_dis_number=dis_number;
 513   3              ComunicationFault();
 514   3              remote_build();
 515   3              dis_number=old_dis_number;
 516   3       //       key=nokey;
 517   3       //       display();
 518   3            }
 519   2            goto again;
 520   2      
 521   2         }
 522   1         else
 523   1           remote_fault_count=0;
 524   1       }
 525          /*
 526          void WriteOrder(void)
 527          {
 528           //数据打包
 529           unsigned j;
 530          again:
 531              trbuf[0]=address_device;
 532              trbuf[1]=0x06;
 533              for(j=0;j<4;j++)
 534              {
 535                trbuf[j+2]=*(read_order_p+j);       //[行][列]*(p+i*long_dis_message+j)
 536              }
 537              TxdLength=6;//用于计算效验码 ,在计算完后加二形成发送长度.
 538              crc_account();
 539               Txded_Number=0;
 540              receive_byte_number=8;   //报文接收字节数
 541              RemoteTypeBak=0;     //当前交互报文类型
 542              Current_Message_End=1;
 543               REN=0;                   //启动发送                                                        //起动输出
 544             CLK=1;
 545             RI=0;
C51 COMPILER V7.01  MAIN                                                                   12/21/2003 15:17:23 PAGE 10  

 546              SBUF=trbuf[0];
 547              WaitTime=0;
 548             while((Current_Message_End!=0)&&(WaitTime<100))
 549               WD_SDA=~WD_SDA;
 550             if(Current_Message_End!=0)
 551             {
 552                if(++remote_fault_count>5)
 553                {
 554                  remote_fault_count=0;
 555                  old_dis_number=dis_number;
 556                  ComunicationFault();
 557                  remote_build();
 558                  dis_number=old_dis_number;
 559           //       key=nokey;
 560           //       display();
 561                }
 562                goto again;
 563          
 564             }
 565             else
 566               remote_fault_count=0;
 567          
 568          }*/
 569          
 570          void GetState(void)
 571          {
 572   1      again:
 573   1          if((program_state==1)||(alone_user==1))  return;//编程状态或单机模式
 574   1          trbuf[0]=address_device;
 575   1          trbuf[1]=state_message_tab[0];
 576   1          trbuf[2]=state_message_tab[1];
 577   1          trbuf[3]=state_message_tab[2];
 578   1          trbuf[4]=state_message_tab[3];
 579   1          trbuf[5]=state_message_tab[4];
 580   1          TxdLength=6;
 581   1          receive_byte_number=5 + trbuf[5] * 2;
 582   1          RemoteTypeBak=4;
 583   1          write_rebuf_p=union_state.state_buf;
 584   1          crc_account();
 585   1          Current_Message_End=1;
 586   1           Txded_Number=0;
 587   1            REN=0;                  //启动发送                                                        //起动输出
 588   1            CLK=1;
 589   1            RI=0;
 590   1          SBUF=trbuf[0];
 591   1          WaitTime=0;
 592   1         //Current_Message_End=0;//for debug
 593   1         while((Current_Message_End!=0)&&(WaitTime<200))
 594   1           WD_SDA=~WD_SDA;
 595   1         //Current_Message_End=0;//for debug
 596   1         if(Current_Message_End!=0)
 597   1         {
 598   2            if(++remote_fault_count>5)
 599   2            {
 600   3              remote_fault_count=0;
 601   3              old_dis_number=dis_number;
 602   3              ComunicationFault();
 603   3              remote_build();
 604   3              dis_number=old_dis_number;
 605   3       //       key=nokey;
 606   3       //       display();
 607   3            }
C51 COMPILER V7.01  MAIN                                                                   12/21/2003 15:17:23 PAGE 11  

 608   2            goto again;
 609   2      
 610   2         }
 611   1         else
 612   1           remote_fault_count=0;
 613   1      
 614   1      
 615   1      }
 616          
 617          
 618          
 619          
 620          
 621          /********************************************************************
 622          *
 623          * 名称: crc_account
 624          * 说明: 根据发送缓存使用长度,计算并添加其crc.
 625                          更新使用长度值,read_trbuf_p (读取发送缓存指针)保持原值.
 626          * 功能: CRC 计算
 627          * 调用:
 628          * 输入: 全局变量
 629          * 返回值: 无,
 630          ***********************************************************************/
 631          void crc_account(void)
 632          { //TxdLength为要校验的字节数
 633   1              idata union{
 634   1                           uint wordd;
 635   1                           uchar charr[2];
 636   1                         }crcreg;                                                             //crc寄存器
 637   1              idata uchar temp1,i=0,j;
 638   1              uint  da;
 639   1              crcreg.wordd=0xffff;
 640   1              do                                                                                                      //所有参加计算字节的循环
 641   1                      {
 642   2                              temp1=trbuf[i];                                 //(read_trbuf_p=rebuf)
 643   2                              crcreg.wordd^=temp1;                                            //nnn高8位无影响?
 644   2                              for(j=0;j<8;j++)                                                        //一个字节的8次移位循环
 645   2                                      {
 646   3                                              da=crcreg.wordd;
 647   3                                              crcreg.wordd>>=1;
 648   3                                              if(da&0x0001) crcreg.wordd^=CRC;        //移出前最低位判断(define CRC 0xa001)
 649   3                                      }
 650   2                              i++;
 651   2                      }
 652   1              while(i<TxdLength);                                     //参加crc计算的字节完毕
 653   1          trbuf[i]=crcreg.charr[1];
 654   1          crch_bak=crcreg.charr[0];                   //低字节
 655   1          i++;
 656   1          trbuf[i]=crcreg.charr[0];
 657   1          crcl_bak=crcreg.charr[1];                   //高字节
 658   1              TxdLength+=2;
 659   1      }//crc_account
 660          
 661          
 662          
 663          /********************************************************************
 664          *
 665          * 名称: uart_interrupt
 666          * 说明: 串口发送中断:未取完成则取指针++,填下一个需发送字节
 667                          接收:存数据,计数,存指针++
 668                                          接收完成后,置单条报文完成标志item_end=0;
 669          * 功能: 串口中断
C51 COMPILER V7.01  MAIN                                                                   12/21/2003 15:17:23 PAGE 12  

 670          * 调用:
 671          * 输入: 全局变量
 672          * 返回值: 无
 673          ***********************************************************************/
 674          void uart_interrupt (void) interrupt 4 using 1
 675          {
 676   1        idata uchar rechar,j;
 677   1        uint da;
 678   1        //WDTRST=0x1e;
 679   1        //WDTRST=0xe1;
 680   1        if(TI)
 681   1        {
 682   2         TI=0;
 683   2          if(Current_Message_End==0)
 684   2            return;
 685   2         if(++Txded_Number>=TxdLength)
 686   2         {
 687   3      
 688   3                                                                                      //抑制循环nnn,使能接收中断
 689   3          CLK=0;
 690   3          rebuf_write_count=0;                                //初始化接收缓存计数器
 691   3          Txded_Number=0;
 692   3          REN=1;
 693   3         }
 694   2         else
 695   2      
 696   2          SBUF=trbuf[Txded_Number];                                   //发送的第一个字节由通讯控制程序写入
 697   2        }
 698   1        if(RI)
 699   1        {
 700   2          rechar=SBUF;
 701   2              RI=0;
 702   2      
 703   2              //              if(remote_sign_program_state==1) return;//编程器连接,则交出通讯权nnn
 704   2              if (Current_Message_End==0)
 705   2                return;
 706   2              if(remote_type_address==1)
 707   2              {//特殊指令接收
 708   3                rebuf_write_count++;
 709   3                if(rebuf_write_count==1||rebuf_write_count==4)
 710   3                {
 711   4                  if(rechar!=0x68)rebuf_write_count=0;//改变波特率重试,重记数
 712   4                      return;
 713   4                }
 714   3                if(rebuf_write_count==2)
 715   3                      address_device=rechar;                  //保存设备地址
 716   3                if(rebuf_write_count==3)                      //验证设备地址
 717   3                {
 718   4                  if(rechar!=address_device)rebuf_write_count=0;//改变波特率重试,重记数
 719   4                      return;
 720   4                }
 721   3                if(rebuf_write_count==5)
 722   3                {//特殊报文校验码接收nnn
 723   4                      if(rechar==((address_device*2+0xd0)%256))
 724   4                       {
 725   5                         remote_type_address=0;
 726   5                         remote_sign_built=1;         //特殊报文校验码,通讯建立,
 727   5             alone_user=0;          //联机模式---唯一此处能转工作模式
 728   5                         REN=0;
 729   5             CLK=1;
 730   5             RI=0;
 731   5      
C51 COMPILER V7.01  MAIN                                                                   12/21/2003 15:17:23 PAGE 13  

 732   5                       }
 733   4                }
 734   3                return;
 735   3              }//特殊指令接收
 736   2      //以下为标准协议指令接收
 737   2      
 738   2              if(rebuf_write_count==0)                                                //读第一字节
 739   2              {
 740   3                if(rechar!=address_device) return;            //普通报文地址校对
 741   3                      recrc.recrc_int=0xffff;                                 //初始化接收CRC初值
 742   3              }
 743   2              rebuf_write_count++;
 744   2                                                                              //接收缓存写计数++
 745   2              if(rebuf_write_count>receive_byte_number-2)
 746   2              {//>接收crc
 747   3            if(rebuf_write_count>receive_byte_number-1)
 748   3            {//crch效验
 749   4                 if(rechar==recrc.recrc[0])
 750   4                 {//=接收crch
 751   5              //CRC正确,指令和状态接收结束
 752   5              Current_Message_End=0;                  //条报文完成标志仅由通讯程序置位
 753   5              remote_fault_count=0;
 754   5              switch (RemoteTypeBak)
 755   5              {
 756   6               case 0:remote_type_order=0;
 757   6                      break;
 758   6               case 1: remote_type_set=0;
 759   6                      break;
 760   6               case 3: break;
 761   6                default:break;
 762   6              }
 763   5              REN=0;
 764   5              CLK=1;
 765   5              RI=0;
 766   5                 }//CRC正确
 767   4                 else
 768   4                 {

⌨️ 快捷键说明

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