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

📄 hicj6.lst

📁 实用的空调计费系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 614   3                Write1B(0,175+i);  // Clear Break_Bak
 615   3               }
 616   2             for(i=200;i<240;i++)
 617   2               {
 618   3                 Write1B(0x21,i);
 619   3               }
 620   2             for(i=240;i<255;i++)
 621   2               {
 622   3                 Write1B(0xff,i);
 623   3               }
 624   2                Write1B(0x80,255);    //Start
 625   2             for(i=0;i<40;i++)        //House Code
 626   2               {
 627   3                 Write1B(1,i*3+0x100);
 628   3                 j=((i+1)/10)*16+(i+1)%10;
 629   3                 Write1B(j,i*3+1+0x100);
 630   3                 Write1B(0,i*3+2+0x100);
 631   3               }
 632   2             for(i=120;i<160;i++)
 633   2               {
 634   3                 Write1B(0x36,i+0x100);
 635   3               }
 636   2             for(i=200;i<240;i++)
 637   2               {
 638   3                 Write1B(0x87,i+0x100);   //最大负荷
 639   3               }
 640   2      
 641   2      
 642   2                 Write1B(1,240+0x100);
 643   2                 Write1B(0,241+0x100);
 644   2      
 645   2           }
 646   1      
 647   1            for(i=0;i<5;i++)
 648   1             {
 649   2              Hdd_En[i]=Read1B(250+i);
 650   2              Short_En[i]=Read1B(240+i);
 651   2              Break_En[i]=Read1B(245+i);
 652   2             }
 653   1             for(i=0;i<40;i++)
 654   1             {
 655   2              HddVal[i]=0;
 656   2             }
 657   1             Station=Read1B(164);
 658   1            // Write1B(0x0,255);
 659   1           House=House_Max-1;
 660   1             Start=Read1B(255);
 661   1             Relay_Station=Read1B(0x100+240);
 662   1      
 663   1      }
 664          
 665          
 666          /**********************************************************
 667          *名        称:InitTimer
 668          *功        能:定时器初始化
 669          *说        明:
 670          *调        用:
 671          *入口参数:无
 672          *返 回 值:无
 673          ***********************************************************/
 674          void InitTimer(void)
 675          {
C51 COMPILER V7.50   HICJ6                                                                 07/20/2005 09:16:51 PAGE 12  

 676   1        TMOD=0x22; /*定时器1为模式2(8位自动重装),
 677   1                     定时器0为模式2(8位自动重装) */
 678   1        PCON=00;
 679   1      
 680   1        TR0=0; //在发送或接收才开始使用
 681   1        TF0=0;
 682   1        TH0=(256-192); //4800bps 就是 1000000/4800=208.333微秒 执行的
 683   1                      //timer是 208.333*11.0592/12= 192
 684   1      
 685   1        TL0=TH0;
 686   1      
 687   1      
 688   1      
 689   1         TH1=0xfa;   //9600-FD  4800-FA 2400-F4 1200-E8  300-A0
 690   1         TL1=0xfa;
 691   1         SCON=0x50;
 692   1      
 693   1         T2CON  = 0x04;   //定时器2为16位自动重装,递增计数
 694   1         T2MOD  = 0x00;
 695   1         TH2    = 0xb8;  //dc 10ms
 696   1         TL2    = 0x00;
 697   1         RCAP2H = 0xb8;    //20ms定时
 698   1         RCAP2L = 0x00;    //11.0592M晶振,
 699   1                           //20000*11.0592/12=0x4800  0x100-0x48=0xb8
 700   1      
 701   1         IP=0x10;          //串口中断为高优先级,定时器2低优先级
 702   1         ET2=1;
 703   1      
 704   1         ET0=1;
 705   1        // EX1=1;
 706   1         ES=1;
 707   1      
 708   1         TR1=1;
 709   1        // ET1=1;
 710   1      
 711   1         EA=1;
 712   1         TI=0;
 713   1      
 714   1      }
 715          /**********************************************************
 716          *名        称:InitDD
 717          *功        能:电度口状态初始化
 718          *说        明:
 719          *调        用:
 720          *入口参数:无
 721          *返 回 值:无
 722          ***********************************************************/
 723          void InitDD(void)
 724          {
 725   1       BYTE data i,j,P1_Tmp;
 726   1      
 727   1        for (i=0;i<5;i++)            //初始化电度状态 Hdd_New[10][5]
 728   1          {
 729   2           for(j=0;j<8;j++)
 730   2            {
 731   3              P1_Tmp=1<<(i+3);
 732   3              P1_Tmp=~P1_Tmp&0xf8;
 733   3              P1=P1_Tmp|A8_A10[j];
 734   3              long_delay();
 735   3             if(Hdd==0)
 736   3              {
 737   4                Hdd_Old[i]|=(1<<j);
C51 COMPILER V7.50   HICJ6                                                                 07/20/2005 09:16:51 PAGE 13  

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

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

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

 924   1      //if (Ac_Tmp)

⌨️ 快捷键说明

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