259 lines
8.2 KiB
Plaintext
Raw Normal View History

2022-05-25 14:59:38 +08:00
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)