📄 pinlvji3.lst
字号:
C51 COMPILER V7.50 PINLVJI3 11/17/2008 18:59:29 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE PINLVJI3
OBJECT MODULE PLACED IN pinlvji3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE pinlvji3.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 unsigned char data key,flag_ft,point,buffer,j,INT1_ready,couter,couter0,bus0,bus1,cycle;
3 //键盘,频率判决结果,判决频率寄存,小数点位置标志,显示缓冲变量,显示循环变量,边沿触发界定,定时器0定时寄存,定
-时器1定时寄存,显示刷新循环寄存CT0计数值寄存,CT1计数值寄存
4 unsigned int data Z,delay,k,turn;//脉宽,占空比,程序延迟循环变量,
5 float data T,F,T_T,F_F,W;//周期,频率
6 unsigned char code BitTab[4]={0x7f,0xbf,0xdf,0xef};//位驱动码
7 unsigned char code DispTab[]={0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20,0xA0,0xf7};//字形码
8 /* 0 1 2 3 4 5 6 7 8 9 - */
9 unsigned char data DispBuf[4];//待显示数据寄存
10 sbit P0_0=P0^0;//位变量定义
11 sbit P0_1=P0^1;
12 sbit P0_2=P0^2;
13 sbit P0_3=P0^3;
14
15 sbit P1_0=P1^0;
16 sbit P1_1=P1^1;
17 sbit P1_2=P1^2;
18 sbit P1_3=P1^3;
19 sbit P1_4=P1^4;
20 sbit P1_5=P1^5;
21 sbit P1_6=P1^6;
22 sbit P1_7=P1^7;
23
24 sbit P2_5=P2^5;
25
26 sbit P3_3=P3^3;
27 ///////////////////////////////////////////////////////////////////
28 void Ft();//1KHZ/16KHZ门限频率判决函数
29 void Ft_10();//10KH门限频率判决函数
30 void test_af();//小于1KHZ的频率测量函数
31 void test_w();//小于10KHZ脉冲宽度测量函数
32 void test_bf();//1KHZ~16KHZ频率测量函数
33 void test_z();//占空比测量函数
34 void test_at();//小于1KHZ的周期测量函数
35 void test_bt();//1KHZ~16KHZ周期测量函数
36 void test_cf();//16KHZ以上频率测量函数
37 void test_ct();//16KHZ以上周期测量函数
38 void Display();//显示驱动函数
39 void Delay_5m();//软件延迟约5ms函数
40 void Measure();//按键处理与对应测量函数
41 /////////////////////////////////////////////////////////////////////
42 void Ft()//判决1KHZ/16KHZ
43 {
44 1 //unsigned char p;
45 1 TMOD=0x15;
46 1 TL1=0xb0;
47 1 TH1=0x3c;
48 1 TH0=0;
49 1 TL0=0;
50 1
51 1 TR1=1;
52 1 TR0=1;
53 1
54 1 for(;TF1==0;);
C51 COMPILER V7.50 PINLVJI3 11/17/2008 18:59:29 PAGE 2
55 1
56 1 TF1=0;
57 1 for(;TF1==0;);
58 1 TR0=0;
59 1 TR1=0;
60 1
61 1 k=TL0|(TH0<<8);
62 1
63 1 if(k>131) flag_ft=3;//p=1;
64 1 else if(k>10) flag_ft=2;//p=2;
65 1 else flag_ft=1;//p=3;
66 1 //return(p);
67 1 }
68 ////////////////////////////////////////////////////////////////////////////////
69 void Ft_10()//判决10KHZ函数
70 {
71 1 TMOD=0X15;
72 1 TL1=0XC0;
73 1 TH1=0XE0;
74 1 TH0=0;
75 1 TL0=0;
76 1
77 1 TR1=1;
78 1 TR0=1;
79 1
80 1 for(;TF1==0;);
81 1
82 1 TF1=0;
83 1 TR0=0;
84 1 TR1=0;
85 1
86 1 k=TL0|(TH0<<8);
87 1
88 1 if(k<=5) flag_ft=4;
89 1 else flag_ft=5;
90 1 }
91 ////////////////////////////////////////////////////////////////////////////////
92 void test_af(void)//测量小于1KHZ的频率,用INT1和CT0。
93 {
94 1 F=0;
95 1 test_at();
96 1 P1=P1|0xff;//情上次单位指示
97 1 F=1000000/T_T;
98 1
99 1 if(F<10)
100 1 {
101 2 F*=1000;point=1;
102 2 }
103 1 else if(F<100)
104 1 {
105 2 F*=100;point=2;
106 2 }
107 1 else if(F<1000)
108 1 {
109 2 F*=10;point=3;
110 2 }
111 1 else
112 1 {
113 2 point=4;
114 2 }
115 1 P1_2=0;//HZ指示灯亮
116 1 }
C51 COMPILER V7.50 PINLVJI3 11/17/2008 18:59:29 PAGE 3
117 /////////////////////////////////////////////////////////////////////////////////////
118 void test_w()//测量脉冲宽度
119 {
120 1 W=0;
121 1 TMOD=0x90;//初始化
122 1 TH1=0x00;
123 1 TL1=0x00;
124 1 ET1=1;//开中断
125 1 EA=1;
126 1
127 1 bus1=0;
128 1
129 1 for(;P3_3==1;);//等待无效高电平过去
130 1 TR1=1;
131 1 for(;P3_3==0;);//等待高电平
132 1 for(;P3_3==1;);//等待低电平关闭计数器
133 1 TR1=0;
134 1 W=bus1*65536;
135 1 W+=TL1|(TH1<<8);
136 1
137 1 if(W<100)
138 1 {
139 2 W*=100;point=2;P1_1=0;//us指示灯亮
140 2 }
141 1 else if(W<1000)
142 1 {
143 2 W*=10;point=3;P1_1=0;//us指示灯亮
144 2 }
145 1 else if(W<10000)
146 1 {
147 2 point=4;P1_1=0;//us指示灯亮
148 2 }
149 1 else if(W<100000)
150 1 {
151 2 W/=10;point=2;P1_0=0;//ms指示灯亮
152 2 }
153 1 else if(W<1000000)
154 1 {
155 2 W/=100;point=3;P1_0=0;//ms指示灯亮
156 2 }
157 1 else if(W<10000000)
158 1 {
159 2 W/=1000;point=4;P1_0=0;//ms指示灯亮
160 2 }
161 1 else
162 1 {
163 2 point=0;
164 2 }
165 1 }
166 //////////////////////////////////////////////////////////////////
167 void test_bf(void)//测量测量1~16KHZ频率T1记数,T0定时
168 {
169 1 F=0;
170 1 TMOD=0x51;
171 1 TL1=0x00;
172 1 TH1=0x00;
173 1 TL0=0xbc;
174 1 TH0=0xbd;
175 1
176 1 ET0=1;
177 1 ET1=1;
178 1 EA=1;
C51 COMPILER V7.50 PINLVJI3 11/17/2008 18:59:29 PAGE 4
179 1
180 1 TR0=1;
181 1 TR1=1;
182 1 couter=0;
183 1 bus1=0;
184 1
185 1 for(;couter<16;);
186 1 TR1=0;
187 1 TR0=0;
188 1 F=bus1*65536;//取CT1记数值
189 1 F+=TL1|(TH1<<8);
190 1 F_F=F;
191 1
192 1 if(F<10000)
193 1 {
194 2 point=1;
195 2 }
196 1 else if(F<100000)
197 1 {
198 2 F/=10;point=2;
199 2 }
200 1 else
201 1 {
202 2 point=0;
203 2 }
204 1 P1_3=0;//KHZ指示灯亮
205 1 }
206 ///////////////////////////////////////////
207 void test_z()
208 {
209 1 Z=0;
210 1 Ft();//flag_ft=Ft();
211 1
212 1 if(flag_ft==1) test_at();
213 1 else test_bt();
214 1 test_w();
215 1 P1=P1|0xff;//情上次单位指示
216 1 Z=(unsigned int)((W/T)*100);
217 1 if(Z<10)
218 1 {
219 2 Z*=1000;point=1;
220 2 }
221 1 else if(Z<=100)
222 1 {
223 2 Z*=100;point=2;
224 2 }
225 1 /*else if(Z<1000)
226 1 {
227 1 Z*=10;point=3;
228 1 }*/
229 1 else
230 1 {
231 2 point=2;
232 2 }
233 1 }
234 ///////////////////////////////////////////////////////////////////////////////////
235 void test_at(void)//测量小于1KHZ的周期
236 {
237 1 T=0;
238 1 TMOD=0x01;
239 1 IT1=1;
240 1 EX1=1;
C51 COMPILER V7.50 PINLVJI3 11/17/2008 18:59:29 PAGE 5
241 1 ET0=1;
242 1 EA=1;
243 1
244 1
245 1 TL0=0x00;
246 1 TH0=0x00;
247 1 bus0=0;
248 1
249 1 TR0=0;//新加的
250 1
251 1 INT1_ready=0;
252 1 for(;INT1_ready<2;);
253 1 EX1=0;//关INT1中断
254 1
255 1 T=bus0*65536;
256 1 T+=TL0|(TH0<<8);
257 1 T_T=T;//传递给频率测量函数
258 1
259 1 if(T<1000)
260 1 {
261 2 T=T*10;point=3;P1_1=0;//us指示灯亮
262 2 }
263 1 else if(T<10000)
264 1 {
265 2 point=4;P1_1=0;//us指示灯亮
266 2 }
267 1 else if(T<100000)
268 1 {
269 2 T/=10;point=2;P1_0=0;//ms指示灯亮
270 2 }
271 1 else if(T<1000000)
272 1 {
273 2 T/=100;point=3;P1_0=0;//ms指示灯亮
274 2 }
275 1 else if(T<10000000)
276 1 {
277 2 T/=1000;point=4;P1_0=0;//ms指示灯亮
278 2 }
279 1 else
280 1 {
281 2 point=0;
282 2 }
283 1 }
284 //////////////////////////////////////////////////////////////////////////////////
285
286 void test_bt(void)//测量测量1~16KHZ周期
287 {
288 1 T=0;
289 1
290 1 test_bf();
291 1 P1=P1|0xff;//情上次单位指示
292 1 T=1000000/F_F;
293 1
294 1 if(T<1000)
295 1 {
296 2 T=T*10;point=3;
297 2 }
298 1 else if(T<10000)
299 1 {
300 2 point=4;
301 2 }
302 1 else
C51 COMPILER V7.50 PINLVJI3 11/17/2008 18:59:29 PAGE 6
303 1 {
304 2 point=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -