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

📄 hicj6.lst

📁 这是一个
💻 LST
📖 第 1 页 / 共 5 页
字号:
 616   2               {
 617   3                 Write1B(1,i*3+0x100);
 618   3                 j=((i+1)/10)*16+(i+1)%10;
 619   3                 Write1B(j,i*3+1+0x100);
 620   3                 Write1B(0,i*3+2+0x100);
 621   3               }
 622   2             for(i=120;i<160;i++)
 623   2               {
 624   3                 Write1B(0x36,i+0x100);
 625   3               }
 626   2             for(i=200;i<240;i++)
 627   2               {
 628   3                 Write1B(0x87,i+0x100);
 629   3               }
 630   2      
 631   2           }
 632   1      
 633   1            for(i=0;i<5;i++)
 634   1             {
 635   2              Hdd_En[i]=Read1B(250+i);
 636   2              Short_En[i]=Read1B(240+i);
 637   2              Break_En[i]=Read1B(245+i);
 638   2             }
 639   1             for(i=0;i<40;i++)
 640   1             {
 641   2              HddVal[i]=0;
 642   2             }
 643   1             Station=Read1B(164);
 644   1            // Write1B(0x0,255);
 645   1           //House=House_Max-1;
 646   1             Start=Read1B(255);
 647   1      
 648   1      }
 649          
 650          
 651          /**********************************************************
 652          *名	   称:InitTimer
 653          *功	   能:定时器初始化
 654          *说	   明:
 655          *调	   用:
 656          *入口参数:无
 657          *返 回 值:无
 658          ***********************************************************/
 659          void InitTimer(void)
 660          {
 661   1        TMOD=0x22; /*定时器1为模式2(8位自动重装),
 662   1                     定时器0为模式2(8位自动重装) */
 663   1        PCON=00;
 664   1      
 665   1        TR0=0; //在发送或接收才开始使用
 666   1        TF0=0;
 667   1        TH0=(256-192); //4800bps 就是 1000000/4800=208.333微秒 执行的
 668   1                      //timer是 208.333*11.0592/12= 192
 669   1      
 670   1        TL0=TH0;
 671   1      
 672   1      
 673   1      
 674   1         TH1=0xfa;   //9600-FD  4800-FA 2400-F4 1200-E8  300-A0
 675   1         TL1=0xfa;
C51 COMPILER V6.12  HICJ6                                                                  01/10/2005 07:10:30 PAGE 12  

 676   1         SCON=0x50;
 677   1      
 678   1         T2CON  = 0x04;   //定时器2为16位自动重装,递增计数
 679   1         T2MOD  = 0x00;
 680   1         TH2    = 0xb8;  //dc 10ms
 681   1         TL2    = 0x00;
 682   1         RCAP2H = 0xb8;    //20ms定时
 683   1         RCAP2L = 0x00;    //11.0592M晶振,
 684   1                           //20000*11.0592/12=0x4800  0x100-0x48=0xb8
 685   1      
 686   1         IP=0x10;          //串口中断为高优先级,定时器2低优先级
 687   1         ET2=1;
 688   1      
 689   1         ET0=1;
 690   1        // EX1=1;
 691   1         ES=1;
 692   1      
 693   1         TR1=1;
 694   1        // ET1=1;
 695   1      
 696   1         EA=1;
 697   1         TI=0;
 698   1      
 699   1      }
 700          /**********************************************************
 701          *名	   称:InitDD
 702          *功	   能:电度口状态初始化
 703          *说	   明:
 704          *调	   用:
 705          *入口参数:无
 706          *返 回 值:无
 707          ***********************************************************/
 708          void InitDD(void)
 709          {
 710   1       BYTE data i,j,P1_Tmp;
 711   1      
 712   1        for (i=0;i<5;i++)            //初始化电度状态 Hdd_New[10][5]
 713   1          {
 714   2           for(j=0;j<8;j++)
 715   2            {
 716   3              P1_Tmp=1<<(i+3);
 717   3              P1_Tmp=~P1_Tmp&0xf8;
 718   3              P1=P1_Tmp|A8_A10[j];
 719   3              long_delay();
 720   3             if(Hdd==0)
 721   3              {
 722   4                Hdd_Old[i]|=(1<<j);
 723   4              }
 724   3               else
 725   3               {
 726   4                Hdd_Old[i]&=~(1<<j);
 727   4               }
 728   3      
 729   3            }
 730   2            Hdd_New_Bak[i]=Hdd_Old[i];
 731   2            Hdd_Old_Bak[i]=Hdd_Old[i];
 732   2          }
 733   1      
 734   1      }
 735          
 736          
 737          /**********************************************************
C51 COMPILER V6.12  HICJ6                                                                  01/10/2005 07:10:30 PAGE 13  

 738          *名	   称:WatchDog
 739          *功	   能:清看门狗
 740          *说	   明:
 741          *调	   用:
 742          *入口参数:无
 743          *返 回 值:无
 744          ***********************************************************/
 745          /*
 746          void WatchDog(void)
 747          {
 748          WDT=0x1e;
 749          WDT=0xe1;
 750          }
 751              */
 752          
 753          /**********************************************************
 754          *名	   称:Init
 755          *功	   能:初始化
 756          *说	   明:
 757          *调	   用:
 758          *入口参数:无
 759          *返 回 值:无
 760          ***********************************************************/
 761          
 762          void Init()
 763          {
 764   1         BYTE data i;
 765   1      
 766   1          for(i=0;i<40;i++)
 767   1          {
 768   2           Hdd10s[i]=0;
 769   2           TrsOffCount[i]=0;
 770   2          }
 771   1          for(i=0;i<5;i++)
 772   1           {
 773   2            RelayOff[i]=0;
 774   2            TrsRelayOff[i]=0;
 775   2            Keep_Flag[i]=0;
 776   2           }
 777   1      
 778   1      
 779   1          Sp_Flag=0;
 780   1          Key_Count=0;
 781   1          Key_New=Key_Old=Key;
 782   1          Ac_Old=~Ac_Check;
 783   1          Press_Count=1000;
 784   1          Rcv_Wp=0;
 785   1          Rcv_Rp=0;
 786   1          Run_Count=0;
 787   1          HddEn_Count=1;
 788   1          ms500=0;
 789   1          Hdd_Wp=0;
 790   1          WriteOrder=0;
 791   1          LedTest();
 792   1          InitFram();
 793   1          InitDD();
 794   1          ShowVer();
 795   1          InitTimer();
 796   1          //WatchDog();
 797   1      
 798   1       }
 799          
C51 COMPILER V6.12  HICJ6                                                                  01/10/2005 07:10:30 PAGE 14  

 800          /**********************************************************
 801          *名	   称:Hdd_Check
 802          *功	   能:电度采集处理
 803          *说	   明:
 804          *调	   用:
 805          *入口参数:无
 806          *返 回 值:无
 807          ***********************************************************/
 808          
 809          void Hdd_Check(void)
 810          {
 811   1        BYTE i,j;
 812   1        BYTE Hdd_Tmp[5];
 813   1       // BYTE Constant_Range,Range;
 814   1      
 815   1          for (i=0;i<5;i++)
 816   1           {
 817   2           /* if(Press_Count==101)
 818   2            {
 819   2             if(Short_New[i]^Short_Old[i]) Alarm_Check=1;
 820   2             Short_Old[i]=Short_New[i];
 821   2             }
 822   2      */
 823   2        //    Run=1;
 824   2            Hdd_Tmp[i]=Hdd_New[Hdd_Rp][i]^Hdd_Old[i];
 825   2            Hdd_Old[i]=Hdd_New[Hdd_Rp][i];
 826   2      
 827   2            if(Hdd_Tmp[i])                   //有变位
 828   2             {
 829   3             	 for(j=0;j<8;j++)
 830   3               {
 831   4                 if(Hdd_Tmp[i]&(1<<j))
 832   4                  {
 833   5                    Keep_Count[i*8+j]=0;
 834   5                    Keep_Flag[i]|=(1<<j);
 835   5                    //Ac_Count[i*8+j]++;
 836   5                  }
 837   4               }
 838   3      
 839   3             }
 840   2             else                            //无变位
 841   2             {
 842   3             	if(Keep_Flag[i])
 843   3             	 {
 844   4             	  for(j=0;j<8;j++)
 845   4             	   {
 846   5                   if(Keep_Flag[i]&(1<<j))
 847   5                  {
 848   6                    Keep_Count[i*8+j]++;
 849   6                     if(Keep_Count[i*8+j]>Smooth)
 850   6                    {
 851   7                    Keep_Count[i*8+j]=0;
 852   7                    Keep_Flag[i]&=~(1<<j);
 853   7                    Hdd_New_Bak[i]&=~(1<<j);
 854   7                    if (Hdd_New[Hdd_Rp][i]&(1<<j))
 855   7                      {
 856   8                        Hdd_New_Bak[i]|=(1<<j);
 857   8                      }
 858   7                    }
 859   6                  }
 860   5             	   }
 861   4               }
C51 COMPILER V6.12  HICJ6                                                                  01/10/2005 07:10:30 PAGE 15  

 862   3             }
 863   2           }
 864   1      
 865   1      
 866   1          for(i=0;i<5;i++)
 867   1           {
 868   2             Hdd_Tmp[i]=Hdd_New_Bak[i]^Hdd_Old_Bak[i]&Hdd_New_Bak[i];
 869   2             Hdd_Old_Bak[i]=Hdd_New_Bak[i];
 870   2             if(Hdd_Tmp[i])
 871   2              {
 872   3               for(j=0;j<8;j++)
 873   3                {
 874   4                 if(Hdd_Tmp[i]&(1<<j))
 875   4                  {
 876   5                  	HddVal[i*8+j]++;
 877   5                      Hdd10s[i*8+j]++;
 878   5                      Pulse=1;
 879   5                      if(Press_Count<1000) Key_Press=1;
 880   5      
 881   5      
 882   5                  }
 883   4                }
 884   3              }
 885   2           }
 886   1      
 887   1            //       Run=0;
 888   1                   Hdd_Rp++;
 889   1                   if(Hdd_Rp==10) Hdd_Rp=0;
 890   1       }
 891          
 892          
 893          /**********************************************************
 894          *名	   称:Bat_Check
 895          *功	   能:电池剩余电量显示
 896          *说	   明:
 897          *调	   用:
 898          *入口参数:无
 899          *返 回 值:无
 900          ***********************************************************/
 901          void Bat_Check(void)
 902          {
 903   1        BYTE data i,Battery;
 904   1             Ac_Check=1;
 905   1             Ac_New=Ac_Check;
 906   1             Ac_Tmp=Ac_New^Ac_Old;
 907   1             Ac_Old=Ac_New;
 908   1      
 909   1      //if (Ac_Tmp)
 910   1       {
 911   2         if(Ac_New)
 912   2          {
 913   3           write7279(UNDECODE+4,0,1);             // DIG(7+4)=11  Battery Red
 914   3           write7279(UNDECODE+5,Bat_Val[4],1);    // DIG(7+5)=12  Battery Green
 915   3           }
 916   2           else
 917   2           {
 918   3            Cs_Bat=0;
 919   3            P1=0;
 920   3            short_delay();
 921   3            Bat_New=Bat_Old=Bat;
 922   3            if(Bat_New){Battery=Bat_Val[0]; }
 923   3               else{Battery=Bat_Val[4];}
C51 COMPILER V6.12  HICJ6                                                                  01/10/2005 07:10:30 PAGE 16  

 924   3            for(i=0;i<5;i++)
 925   3            {
 926   4              P1=i;
 927   4              short_delay();

⌨️ 快捷键说明

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