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

📄 aaa.lst

📁 用51单片机编译成的频率计的源程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 905   1        printchar(1,1,'f');
 906   1        printchar(2,1,0x3a);        //":"
 907   1        printchar(3,1,pinlv[0]+48);
 908   1        printchar(4,1,pinlv[1]+48);
 909   1        printchar(5,1,pinlv[2]+48);
 910   1        printchar(6,1,'H');
 911   1        printchar(7,1,'z');
 912   1        printchar(9,1,'P');
 913   1        printchar(10,1,0x3a);            //":"
 914   1        printchar(14,1,'W');
 915   1      
 916   1      
 917   1      }
 918          
 919          
 920          /***********************************************************
 921          *        void dat_get (void)
 922                   *进入输入频率程序
C51 COMPILER V7.50   AAA                                                                   09/12/2005 06:33:21 PAGE 16  

 923          
 924          ***********************************************************/
 925          void dat_get (void)
 926          {
 927   1         void pwmwork(void ); 
 928   1         
 929   1       code uchar hz[]={"Hz"};
 930   1       code uchar putf[] = {"Please Input f:"};
 931   1         uchar i;
 932   1       clrlcd();
 933   1       printstr(0,0,putf);
 934   1       printchar(4,1,102);   // "f"
 935   1       printchar(5,1,58);    // ":"
 936   1       do{keyv=getkey();}while(keyv==0x0e);     //有数字键按下则开始输入频率
 937   1       for(i=0;i<3;i++)
 938   1       {
 939   2       
 940   2                do{ 
 941   3                     pinlv[i] = keyv;
 942   3                     printchar(6+i,1,keyv+48);
 943   3                         
 944   3                         keyv=getkey();
 945   3                   }while(keyv!=0x0e);
 946   2                if(i<=1)              
 947   2                 {
 948   3                  do{keyv=getkey();}while((keyv == 0x0e));    // && (i != 0x02)
 949   3                      }
 950   2         }
 951   1         
 952   1         printstr(9,1,hz);
 953   1      
 954   1      
 955   1         delay1ms(500);
 956   1      
 957   1           pwmwork();                 //开始PWM
 958   1      
 959   1         
 960   1      }
 961          
 962          /*********************************************************************
 963          *           m_get()
 964          *输入调制度
 965          *********************************************************************/
 966          /* void m_get(void )
 967           {
 968             xdata uchar i,j=2;
 969          // code uchar ok[]={"OK"};
 970           code uchar putm[] = {"Please Input M:"};
 971           
 972           clrlcd();
 973           printstr(0,0,putm);
 974           printchar(4,1,77);   // "M"
 975           printchar(5,1,58);    // ":"
 976           do{keyv=getkey();}while(keyv==0x0e);     //有数字键按下则开始输入频率
 977           for(i=0;i<3;i++)
 978           {
 979           
 980                    do{ 
 981                         mm[i] = keyv;
 982                         printchar(6+i,1,keyv+48);
 983                             
 984                             keyv=getkey();
C51 COMPILER V7.50   AAA                                                                   09/12/2005 06:33:21 PAGE 17  

 985                       }while(keyv!=0x0e);
 986                    
 987                    if(i<=1)              
 988                     {
 989                      do{keyv=getkey();}while((keyv == 0x0e));    // && (i != 0x02)
 990                          }
 991             }
 992             
 993             printstr(14,1,OK);
 994          
 995          
 996             delay1ms(300);
 997          
 998              pwmwork();                        //开始PWM
 999           
1000           }      */
1001          /**********************************************************
1002           *key_deal
1003            键盘处理
1004          
1005          ***********************************************************/
1006           void key_deal(void)
1007          {
1008   1        code uchar str_d0 [] ={"A:Input Fre:"};
1009   1        code uchar str_d1 [] ={"B:Get V and A:"};
1010   1        code uchar str_d2 [] ={"C:Get f and P:"};
1011   1        code uchar str1[] =   {"Please Choose:"};
1012   1       // code uchar str_m[] =  {"D:Input the M:"};
1013   1      //  do{ keyv=getkey(); }while(keyv != 0x0e);// 开始     
1014   1            clrlcd();
1015   1            printstr(0,0,str1);                 //Please input          
1016   1        do{keyv=getkey();} while(keyv==0x0e); 
1017   1       
1018   1          switch (keyv=getkey())
1019   1               {                         
1020   2                     case 0x0a:{ 
1021   3                                      clrlcd();
1022   3                                                      printstr(0,0,str1);
1023   3                                      printstr(0,1,str_d0);                        //输入频率
1024   3                                                      do{keyv=getkey();}while(keyv==0x0a);
1025   3                                                      
1026   3                                                      if(keyv==0x0e)
1027   3                                                        {
1028   4                                                          printstr(14,1,OK);
1029   4                                                          delay1ms(500);
1030   4                                                          dat_get() ;
1031   4                                                        }  break;                                      //输入频率值
1032   3                                               }  
1033   2               
1034   2      
1035   2                                
1036   2                         case 0x0b:{ 
1037   3                                      clrlcd();
1038   3                                                  printstr(0,0,str1);
1039   3                                                                                   //得到电压和电流
1040   3                                          printstr(0,1,str_d1);
1041   3                                                  delay1ms(15);
1042   3                                                  do{keyv=getkey();}while(keyv==0x0b);
1043   3                                                  if(keyv==0x0e)                                            //确认键  
1044   3                                                    {
1045   4                                                      printstr(14,1,OK);
1046   4                                                          delay1ms(700);
C51 COMPILER V7.50   AAA                                                                   09/12/2005 06:33:21 PAGE 18  

1047   4                                                          getVA (0);
1048   4                                              
1049   4                                                     }  
1050   3                              break;                                   
1051   3                                       
1052   3                                               } 
1053   2                                                
1054   2                         case 0x0c:{  
1055   3                                      clrlcd();
1056   3                                                      printstr(0,0,str1);                    //算得功率,再次输入频率
1057   3                                                                      
1058   3                                          printstr(0,1,str_d2);
1059   3                                                      delay1ms(15);
1060   3                                                      do{keyv=getkey();}while(keyv==0x0c);
1061   3                                                      if(keyv==0x0e) 
1062   3                                                      {
1063   4                                                       printstr(14,1,OK);
1064   4                                                       delay1ms(500);
1065   4                                                       getPf();
1066   4                                                      }
1067   3                                                  break;
1068   3                                      
1069   3                                            } 
1070   2              /*      case 0x0d:       {      
1071   2                                      clrlcd();
1072   2                                                      printstr(0,0,str1);      
1073   2                                                      printstr(0,1,str_m);     //"Input the M:"
1074   2                                  do{keyv=getkey();}while(keyv==0x0d);
1075   2                                                      if(keyv==0x0e)
1076   2                                                        {
1077   2                                                          printstr(14,1,OK);
1078   2                                                          delay1ms(500);
1079   2                                                          m_get() ;                      //输入调制度
1080   2                                                        }  break;             
1081   2                                   }     */
1082   2                     default: break;
1083   2                   }
1084   1      
1085   1      
1086   1      
1087   1      }
1088          
1089          /****************************************************
1090                 **********主程序*************
1091          *****************************************************/
1092          void main (void)
1093          {  
1094   1         code uchar str0[] = {"Welcome!"};
1095   1         code uchar str1[] = {"Please opt step:"};
1096   1         
1097   1          POWK = 1;                                   //电源关
1098   1              
1099   1              POWZ = 1;
1100   1      
1101   1         PSD33_reg.CONTROL_A = 0;               //MCU I/O模式
1102   1         PSD33_reg.DIRECTION_A =0xff;   //输出模式      
1103   1         init_lcd();
1104   1         ADC_EnableAll();
1105   1         printstr(4,0,str0);            //"Welcom!"
1106   1         printstr(0,1,str1);            //"Please opt step:"
1107   1         delay1ms(10);
1108   1         do{ keyv=getkey(); }while(keyv != 0x0e);
C51 COMPILER V7.50   AAA                                                                   09/12/2005 06:33:21 PAGE 19  

1109   1         key_deal();
1110   1      }
1111          
1112          
1113          void pwmwork(void)
1114          {       
1115   1          
1116   1          unsigned char  ADC_channel;
1117   1              unsigned long ADC_result;
1118   1              uchar f;
1119   1              int du,err1,err2,uad;
1120   1          
1121   1      //      POWK = 0;                                       //电源关
1122   1              
1123   1      //      POWZ = 0;
1124   1      
1125   1              CCON0=0x10;
1126   1              ADC_Init (0) ;
1127   1      
1128   1              Ts = 1667;                                      //采样周期,晶振40M,则载波为1/(Ts*T)
1129   1              Half_Ts =  833*3;                               //半采样周期
1130   1      //      k1=120;
1131   1      
1132   1              K_M = 256;                                      //调制系数放大倍数
1133   1              K_F = 256;                                      //输入频率放大倍数
1134   1      //      K_sin = 256;                            //sin表放大倍数
1135   1      //      K_coe = K_M * K_sin;                    //总放大倍数,K_M * K_sin;
1136   1      
1137   1              F_min = 100;                            //最小频率 
1138   1      
1139   1      
1140   1              
1141   1              f = pinlv[0]*100 + pinlv[1]*10 + pinlv[0] ;
1142   1      
1143   1         
1144   1          F = K_F * f;
1145   1      
1146   1      //      M = mm[0]*100 + mm[1]*10 + mm[2];
1147   1              M = 160;
1148   1              N = (K_F*1000)/F ;                                                      // N = 1000/f;载波为1K
1149   1      
1150   1              POWK = 0;
1151   1              delay1ms(1000);
1152   1      
1153   1              POWZ = 0;                                                                                                
             -                                      
1154   1      
1155   1      
1156   1      
1157   1              ST = 0;                          //脉冲芯片使能
1158   1      
1159   1              if ( F > F_min)
1160   1              { 
1161   2      
1162   2                      first();
1163   2                      timer0_init(); 
1164   2                      PCA_init();
1165   2              }
1166   1       
1167   1      
1168   1      //主循环,一个采样周期后,读取AD的给定频率值重新计算调制度M和载波比N
1169   1      
C51 COMPILER V7.50   AAA                                                                   09/12/2005 06:33:21 PAGE 20  

1170   1      //如果计算时间不够的话,可以另设M2,N2变量,在定时器中断程序中判断K=2*N时,
1171   1      //将主循环中的计算值M2,N2赋给M,N进行计算
1172   1      
1173   1              while(1)
1174   1               {
1175   2                 if(Tm==240)
1176   2                   {
1177   3                         Tm = 0;
1178   3                         uad =  ADC_Read(0 );
1179   3                     err1 = u36 - uad;
1180   3                     du =(err1 - err2)/4;
1181   3                         M = M + du;
1182   3                         err2 = err1;
1183   3                  }
1184   2                keyv = getkey();
1185   2                while(keyv!=0x0e)key_deal();
1186   2                
1187   2              }
1188   1      
1189   1       }
*** WARNING C280 IN LINE 1116 OF AAA.C: 'ADC_channel': unreferenced local variable
*** WARNING C280 IN LINE 1117 OF AAA.C: 'ADC_result': unreferenced local variable


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3176    ----
   CONSTANT SIZE    =    337    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =    111    ----
   IDATA SIZE       =     28    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  2 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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