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

📄 386.lst

📁 C开发的报警程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 511   2         case 9: NUMSERIAL=233;break; //数组9的起始位置=91 长3位
 512   2      
 513   2        } 
 514   1          for(i=1;i<=NUMBYT;i++)
 515   1            {
 516   2             startWrite:  START24C02();     //START24C02()执行完后,scl=0,sda=0
 517   2             WriteOneByte(160);            //寻址字节为0A0H,“写”;执行完后,scl=0,sda=0
 518   2             Check_bit=Check24C02();      //校验应答位;执行完后,scl=0,sda不管
 519   2             if(Check_bit==1)              //如果出错,从新启动总线
 520   2             goto startWrite;
 521   2      
 522   2             WriteOneByte(NUMSERIAL);      //确定片内寻址地址
 523   2             Check_bit=Check24C02();      //校验应答位
 524   2             if(Check_bit==1)              //如果出错,从新启动总线
 525   2             goto startWrite;
 526   2      
 527   2             WriteOneByte(NUMBERW[i]);  //原数组把组的序号放在“0”位置,组成员个数放在“1”位置
 528   2             Check_bit=Check24C02();
 529   2             if(Check_bit==1)              //如果出错,从新启动总线
 530   2             goto startWrite;
 531   2           
 532   2             STOP24C02();                 //执行完后,scl=0,sda=1
 533   2             NUMSERIAL=NUMSERIAL+1;
 534   2           } 
 535   1      }//---------------------------------------写整个数组到24c02结束----------------------------------//
 536          
 537          void Write24C02_139()
 538             {
 539   1             bit Check_bit=1;
 540   1          startWrite:   START24C02();     //START24C02()执行完后,scl=0,sda=0
 541   1             WriteOneByte(160);            //寻址字节为0A0H,“写”;执行完后,scl=0,sda=0
 542   1             Check_bit=Check24C02();      //校验应答位;执行完后,scl=0,sda不管
 543   1             if(Check_bit==1)              //如果出错,从新启动总线
 544   1             goto startWrite;
 545   1      
 546   1             WriteOneByte(99);      //确定片内寻址地址
 547   1             Check_bit=Check24C02();      //校验应答位
 548   1             if(Check_bit==1)              //如果出错,从新启动总线
 549   1             goto startWrite;
 550   1      
C51 COMPILER V6.10  386                                                                    03/14/2006 10:33:03 PAGE 10  

 551   1             WriteOneByte(139);  //原数组把组的序号放在“0”位置,组成员个数放在“1”位置
 552   1             Check_bit=Check24C02();
 553   1             if(Check_bit==1)              //如果出错,从新启动总线
 554   1             goto startWrite;
 555   1             STOP24C02();                 //执行完后,scl=0,sda=1
 556   1            
 557   1         }
 558          
 559          void Write24C02_1390()
 560             {
 561   1             bit Check_bit=1;
 562   1          startWrite:   START24C02();     //START24C02()执行完后,scl=0,sda=0
 563   1             WriteOneByte(160);            //寻址字节为0A0H,“写”;执行完后,scl=0,sda=0
 564   1             Check_bit=Check24C02();      //校验应答位;执行完后,scl=0,sda不管
 565   1             if(Check_bit==1)              //如果出错,从新启动总线
 566   1             goto startWrite;
 567   1      
 568   1             WriteOneByte(99);      //确定片内寻址地址
 569   1             Check_bit=Check24C02();      //校验应答位
 570   1             if(Check_bit==1)              //如果出错,从新启动总线
 571   1             goto startWrite;
 572   1      
 573   1             WriteOneByte(0);  
 574   1             Check_bit=Check24C02();
 575   1             if(Check_bit==1)              //如果出错,从新启动总线
 576   1             goto startWrite;
 577   1             STOP24C02();                 //执行完后,scl=0,sda=1
 578   1            
 579   1         }
 580          
 581          void Write24C02_FIRST()
 582             {
 583   1             bit Check_bit=1;
 584   1          startWrite:   START24C02();     //START24C02()执行完后,scl=0,sda=0
 585   1             WriteOneByte(160);            //寻址字节为0A0H,“写”;执行完后,scl=0,sda=0
 586   1             Check_bit=Check24C02();      //校验应答位;执行完后,scl=0,sda不管
 587   1             if(Check_bit==1)              //如果出错,从新启动总线
 588   1             goto startWrite;
 589   1      
 590   1             WriteOneByte(98);      //确定片内寻址地址
 591   1             Check_bit=Check24C02();      //校验应答位
 592   1             if(Check_bit==1)              //如果出错,从新启动总线
 593   1             goto startWrite;
 594   1      
 595   1             WriteOneByte(138);  
 596   1             Check_bit=Check24C02();
 597   1             if(Check_bit==1)              //如果出错,从新启动总线
 598   1             goto startWrite;
 599   1             STOP24C02();                 //执行完后,scl=0,sda=1
 600   1            
 601   1         }
 602          
 603          
 604          
 605          //-----------------------------------读内容到整个结构,数组------------------------------------------//
 606          struct ReadArray Read24C02_Array(unsigned char NUMSERIAL)
 607          {
 608   1       bit Check_bit;
 609   1       unsigned char i;
 610   1       struct ReadArray READARRAY;
 611   1        switch(NUMSERIAL)             //设定数组存放起始位置
 612   1        {
C51 COMPILER V6.10  386                                                                    03/14/2006 10:33:03 PAGE 11  

 613   2         case 1: NUMSERIAL=102; break; //数组1的起始位置=0 长20位
 614   2         case 2: NUMSERIAL=124;break; //数组2的起始位置=20 长13位
 615   2         case 3: NUMSERIAL=144;break; //数组3的起始位置=33 长13位
 616   2         case 4: NUMSERIAL=164;break; //数组4的起始位置=46 长13位
 617   2         case 5: NUMSERIAL=184;break; //数组5的起始位置=59 长13位
 618   2         case 6: NUMSERIAL=204;break; //数组6的起始位置=72 长13位
 619   2         case 7: NUMSERIAL=224;break; //数组7的起始位置=85 长5 位
 620   2         case 8: NUMSERIAL=230;break; //数组8的起始位置=89 长2位
 621   2         case 9: NUMSERIAL=233;break; //数组9的起始位置=90 长3位
 622   2        } 
 623   1       
 624   1        startRead:  START24C02();
 625   1         WriteOneByte(160);            //寻址字节为0A0H,“写”
 626   1         Check_bit=Check24C02();      //校验应答位
 627   1         if(Check_bit==1)              //如果出错,从新启动总线
 628   1         goto startRead;
 629   1         
 630   1         WriteOneByte(NUMSERIAL);      //确定片内寻址地址
 631   1         Check_bit=Check24C02();      //校验应答位
 632   1         if(Check_bit==1)              //如果出错,从新启动总线
 633   1         goto startRead;
 634   1         STOP24C02();            //  执行完后,scl=0,sda=1
 635   1      
 636   1        startReadD: START24C02();
 637   1         WriteOneByte(161);            //寻址字节为0A1H,“读”
 638   1         Check_bit=Check24C02();      //校验应答位
 639   1         if(Check_bit==1)              //如果出错,从新启动总线
 640   1         goto startReadD;
 641   1            
 642   1         READARRAY.Number24[1]=ReadOneByte();  //读出本组有多少个成员,[0]位预留,组成员个数放在[1]位置
 643   1                                               //执行“读”完后,scl=0,sda任意
 644   1         if(READARRAY.Number24[1]==0)
 645   1            MNACK();    
 646   1         else
 647   1          {
 648   2         MACK();                               //发送校验
 649   2             for(i=0;i<READARRAY.Number24[1];i++)
 650   2            {
 651   3             READARRAY.Number24[i+2]=ReadOneByte();
 652   3             if(i<READARRAY.Number24[1]-1)
 653   3               MACK();
 654   3             else MNACK();
 655   3            } 
 656   2          }
 657   1        STOP24C02();
 658   1        return(READARRAY);
 659   1      }//---------------------------读内容到整个结构,数组结束------------------------------------------//
 660          
 661          
 662          //------------------------------处理在一次摘机“编程”过程中的读取 ,存储---------------------------------
             --//
 663          
 664          void Make_Program()    
 665          { 
 666   1        unsigned char Number_Note=0;   //记录是第几个“电话机输入键”
 667   1        unsigned char Number_Array=0;  //标记是生成的第几号数组。
 668   1        unsigned char Number_Key;          //存储“电话机输入键值”的中间变量
 669   1        Number NUMBER;       //生成记录一次摘机过程的数组
 670   1        bit SaveTo24C02=0;
 671   1                      Reset=0;
 672   1         ReadStatus: MT8880_StatusRegister_READ();
 673   1                 
C51 COMPILER V6.10  386                                                                    03/14/2006 10:33:03 PAGE 12  

 674   1         if(MT8880_D2==1)     //是否有键值生成              
 675   1          {
 676   2              MT8880_CP2=0; //停动8880总线 
 677   2              MT8880_CS=1;  //停动8880总线
 678   2      
 679   2           MT8880_DataRegister_READ();   //读入的一个值出现在MT8880_D0-D3
 680   2           
 681   2           if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1)  //输入“1” 
 682   2             {Number_Key=1; LED_DRIVER(0,0,0,0,0,1,1,0); }//显示“1”
 683   2           if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0)  //输入“2” 
 684   2             {Number_Key=2; LED_DRIVER(1,1,0,1,1,0,1,0);} //显示“2”
 685   2           if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1)  //输入“3” 
 686   2             {Number_Key=3; LED_DRIVER(1,1,0,0,1,1,1,0);} //显示“3”
 687   2           if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0)  //输入“4” 
 688   2             {Number_Key=4; LED_DRIVER(1,0,0,0,0,1,1,1);} //显示“4”
 689   2           if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==1)  //输入“5” 
 690   2             {Number_Key=5; LED_DRIVER(1,1,0,0,1,1,0,1); }//显示“5”
 691   2           if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==0)  //输入“6” 
 692   2             {Number_Key=6; LED_DRIVER(1,1,0,1,1,1,0,1); }//显示“6”
 693   2           if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==1)  //输入“7” 
 694   2             {Number_Key=7; LED_DRIVER(0,1,0,0,0,1,1,0); } //显示“7”
 695   2           if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==0)  //输入“8” 
 696   2             {Number_Key=8; LED_DRIVER(1,1,0,1,1,1,1,1); }//显示“8”
 697   2           if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1)  //输入“9” 
 698   2             {Number_Key=9; LED_DRIVER(1,1,0,0,1,1,1,1); } //显示“9”
 699   2           if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0)  //输入“0” 
 700   2             {Number_Key=10; LED_DRIVER(0,1,0,1,1,1,1,1); }//显示“0”
 701   2           if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1)  //输入“*” 
 702   2             {Number_Key=11; LED_DRIVER(1,0,0,1,1,1,0,1); }//显示“b” 代替
 703   2           if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0)  //输入“#” 
 704   2             {Number_Key=12;  LED_DRIVER(1,0,0,1,0,1,1,1);}//显示“#”="H"
 705   2      
 706   2      
 707   2          // if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==1)  //输入“A” 
 708   2          //   Number_Key=13;
 709   2          // if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==0)  //输入“B” 
 710   2          //   Number_Key=14;
 711   2          // if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==1)  //输入“C” 
 712   2          //   Number_Key=15;
 713   2          // if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==0)  //输入“D” 
 714   2          //   Number_Key=0;
 715   2             
 716   2             MT8880_CP2=0; //停动8880总线
 717   2             MT8880_CS=1;  //停动8880总线
 718   2      
 719   2           if(Number_Note==0)     //处理本次摘机编程的第一次电话机键盘数据
 720   2             {
 721   3              Number_Array=Number_Key;
 722   3              if(Number_Array==10||Number_Array==1||Number_Array==2||Number_Array==3||Number_Array==4||Number_Ar
             -ray==5||Number_Array==6||Number_Array==7||Number_Array==8||Number_Array==9)
 723   3                {
 724   4                 if(Number_Array==10){NUMBER[0]=0;Reset=1;}
 725   4                 else{NUMBER[0]=Number_Array;}     //把组的序号放在“0”位置
 726   4                 Number_Note=Number_Note+1;
 727   4               
 728   4                 if(ISD1420_REC_ZJ==0)    //还处在摘机状态,则继续读状态
 729   4                    goto ReadStatus;
 730   4                    else return;
 731   4                }  
 732   3              else return; 
 733   3             }
 734   2           if(Number_Note==1)   //处理本次摘机编程的第二次电话机键盘数据,已经处理了1次电话机键盘数据
C51 COMPILER V6.10  386                                                                    03/14/2006 10:33:03 PAGE 13  

 735   2              {
 736   3               if(Number_Key!=11)  //判断是否为*
 737   3                 return;
 738   3               else
 739   3                 {Number_Note=Number_Note+1;Reset=0;}
 740   3              
 741   3               if(ISD1420_REC_ZJ==0)
 742   3                  goto ReadStatus;
 743   3                  else return;
 744   3              }  
 745   2           if(Number_Note>=22) // 已经处理了22次电话机键盘数据
 746   2              { 
 747   3               LED_DRIVER(0,1,0,1,1,0,0,1); //出错状态,显示c
 748   3               return;           //出错,跳出
 749   3              }
 750   2           else
 751   2             {
 752   3               NUMBER[Number_Note]=Number_Key;  //把键值写入数组
 753   3               Number_Note=Number_Note+1;
 754   3            
 755   3               if(ISD1420_REC_ZJ==0)
 756   3                 {
 757   4                  SaveTo24C02=1;      //表示已经有数据,可以写24C02了
 758   4                  goto ReadStatus;
 759   4                 }
 760   3               else
 761   3                 goto WriteTo24C02;
 762   3                          
 763   3             }
 764   2       
 765   2         }//读键值过程结束
 766   1        else
 767   1          {   
 768   2             MT8880_CP2=0; //停动8880总线 

⌨️ 快捷键说明

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