📄 aaa.lst
字号:
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 + -