2022-05-25 14:59:38 +08:00

259 lines
8.2 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

C51 COMPILER V9.57.0.0 MAIN 05/23/2022 15:58:34 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Objects\main.obj
COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE Main\main.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\Include) DEBUG OBJECTEXTEN
-D PRINT(.\Listings\main.lst) TABS(2) OBJECT(.\Objects\main.obj)
line level source
1 #include<reg52.h>
2 #include<stdio.h>
3
4 #include"public.h"
5 #include"lcd1602.h"
6 #include"key.h"
7 #include"timer.h"
8 #include"com_send.h"
9
10 u16 time_sig;
11 u16 time_50ms;
12 u16 time_gate_ms;
13 u8 send;
14 u8 pause;
15 u8 range_mode;
16 u8 gate_mode;
17 double result;
18
19 u8* range_mode_name[3] = {"L","M","H"};
20 u8* gate_mode_name[4] = {" 1"," 2"," 5","10"};
21 u8 gate_mode_number[4] = {1,2,5,10};
22
23 u8 timer0_th = 0x4c;
24 u8 timer0_tl[3] = {0xa0,0x16,0x14};
25
26
27 u8 range_auto;
28 u8 auto_count;
29 u16 range_h[3] = {100,50000,460000};
30
31 void show_string_mode()
32 {
33 1
34 1 lcd1602_show_string(5,1,range_mode_name[range_mode]);
35 1 lcd1602_show_string(13,1,gate_mode_name[gate_mode]);
36 1 if(range_auto){
37 2 lcd1602_show_string(6,1,"a");
38 2 }
39 1 else{
40 2 lcd1602_show_string(6,1," ");
41 2 }
42 1 }
43
44 void show_string_init()
45 {
46 1 lcd1602_show_string(0,0,"Frq:");
47 1 lcd1602_show_string(14,0,"Hz");
48 1 lcd1602_show_string(0,1,"Mode: Time:");
49 1 if(range_mode){
50 2 lcd1602_show_string(15,1,"s");
51 2 }
52 1 else{
53 2 lcd1602_show_string(15,1,"T");
54 2 }
C51 COMPILER V9.57.0.0 MAIN 05/23/2022 15:58:34 PAGE 2
55 1 }
56
57 void reset(){
58 1 timer0_reset(timer0_th,timer0_tl[range_mode]);
59 1 time_50ms=0;
60 1 if(range_mode)
61 1 {
62 2 timer1_reset(0x00,0x00);
63 2 }else
64 1 {
65 2 timer1_reset(0xFF,0xFF);
66 2 }
67 1 time_sig=0;
68 1 result = 0;
69 1 }
70
71 void change_range()
72 {
73 1 range_mode %= 3;
74 1 show_string_init();
75 1 show_string_mode();
76 1 }
77
78 int main()
79 {
80 1 u8 key=0;
81 1 range_mode = 1;
82 1 gate_mode = 0;
83 1 time_gate_ms = 20*gate_mode_number[gate_mode];
84 1
85 1 lcd1602_init();
86 1 send_init();
87 1
88 1 show_string_init();
89 1 show_string_mode();
90 1
91 1
92 1 timer0_init(0x01,timer0_th,timer0_tl[range_mode]);
93 1 timer1_init(0x50,0x00,0x00);
94 1 timer0_open();
95 1 timer1_open();
96 1
97 1 while(1)
98 1 {
99 2 key=key_scan(0);
100 2 if(key==KEY1_PRESS)
101 2 {
102 3 range_mode++;
103 3 change_range();
104 3 reset();
105 3 }
106 2 else if(key==KEY2_PRESS)
107 2 {
108 3 gate_mode++;
109 3 gate_mode %= 4;
110 3 time_gate_ms = 20*gate_mode_number[gate_mode];
111 3 show_string_mode();
112 3 reset();
113 3 }
114 2 else if(key==KEY3_PRESS)
115 2 {
116 3 range_auto = ~range_auto;
C51 COMPILER V9.57.0.0 MAIN 05/23/2022 15:58:34 PAGE 3
117 3 show_string_mode();
118 3 }
119 2 else if(key==KEY4_PRESS)
120 2 {
121 3 lcd1602_clear();
122 3 show_string_init();
123 3 show_string_mode();
124 3 }
125 2 if(send==1)
126 2 {
127 3 char disp[10];
128 3 if(range_mode)
129 3 {
130 4 result = (double)(time_sig*65536+TH1*256+TL1)/(double)(time_50ms*50+((TH0-timer0_th)*256+TL0-timer0_tl
-[range_mode])/1000)*1000;
131 4 }
132 3 else
133 3 {
134 4 result = (double)1000000*gate_mode_number[gate_mode]/(double)(time_50ms*50006+((TH0-timer0_th)*256)+TL
-0-timer0_tl[range_mode]);
135 4 }
136 3 if(range_auto && auto_count>0)
137 3 {
138 4 auto_count = 0;
139 4 if(range_mode < 2 && result>range_h[range_mode])
140 4 {
141 5 range_mode += 1;
142 5 change_range();
143 5 }
144 4 if(range_mode > 0 && result<range_h[range_mode-1])
145 4 {
146 5 range_mode += 2;
147 5 change_range();
148 5 }
149 4 }
150 3 else
151 3 {
152 4 auto_count++;
153 4 }
154 3 if(range_mode ==2){
155 4 sprintf(disp,"%.2f",result);
156 4 }
157 3 else
158 3 {
159 4 sprintf(disp,"%.3f",result);
160 4 }
161 3 lcd1602_show_string(4,0,disp);
162 3 send_string(disp);
163 3 send_string("\r\n");
164 3 reset();
165 3 timer0_open();
166 3 timer1_open();
167 3 send=0;
168 3 }
169 2 }
170 1 }
171
172 void timer0() interrupt 1 //<2F><>ʱ<EFBFBD><CAB1>0<EFBFBD>жϺ<D0B6><CFBA><EFBFBD>
173 {
174 1 if(range_mode){
175 2 timer0_close();
176 2 timer1_close();
C51 COMPILER V9.57.0.0 MAIN 05/23/2022 15:58:34 PAGE 4
177 2 timer0_reset(timer0_th,timer0_tl[range_mode]);
178 2 time_50ms++;
179 2 if(time_50ms==time_gate_ms)
180 2 {
181 3 send=1;
182 3 }
183 2 else
184 2 {
185 3 timer0_open();
186 3 timer1_open();
187 3 }
188 2 }
189 1 else
190 1 {
191 2 timer0_reset(timer0_th,timer0_tl[range_mode]);
192 2 time_50ms++;
193 2 }
194 1 }
195
196 void timer1() interrupt 3
197 {
198 1 if(range_mode)
199 1 {
200 2 timer1_reset(0x00,0x00);
201 2 time_sig++;
202 2 }
203 1 else
204 1 {
205 2 static u8 start = 0;
206 2 timer1_reset(0xFF,0xFF);
207 2 if(!start)
208 2 {
209 3 timer0_reset(timer0_th,timer0_tl[range_mode]);
210 3 time_50ms = 0;
211 3 start = 1;
212 3 }
213 2 else
214 2 {
215 3 time_sig++;
216 3 }
217 2
218 2 if(time_sig==gate_mode_number[gate_mode])
219 2 {
220 3 timer0_close();
221 3 timer1_close();
222 3 send=1;
223 3 start = 0;
224 3 }
225 2 }
226 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1458 ----
CONSTANT SIZE = 61 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 53 16
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)