📄 51
字号:
154 1 delay(10); //延时10ms,给硬件一点反应时间
155 1 WriteAddress(0x01); // 从第1行第3列开始显示
156 1 k = 0; //指向字符数组的第1个元素
157 1 while(string[k] != '\0')
158 1 {
159 2 WriteData(string[k]);
160 2 k++; //指向下字符数组一个元素
161 2 }
162 1 i=0;
163 1
164 1 flag=0;
165 1 Tx=0; //首先拉低脉冲输入引脚
166 1 TMOD=0x10; //定时器0,定时器1,16位工作方式
167 1 // TR0=1; //启动定时器0
168 1 IT0=0; //由高电平变低电平,触发外部中断
169 1 //ET0=1; //打开定时器0中断
170 1 EX0=0; //关闭外部中断
171 1 EA=1; //打开总中断0
172 1
173 1
174 1 while(1) //程序循环
175 1 {
176 2 WriteAddress(0x41); // 从第2行第6列开始显示
177 2 WriteData('J'); //将万位数字的字符常量写入LCD
178 2 WriteData('U'); //将万位数字的字符常量写入LCD
179 2 WriteData('L'); //将万位数字的字符常量写入LCD
C51 COMPILER V8.18 超蒧波显示 01/07/2010 23:31:15 PAGE 4
180 2 WriteData('I'); //将万位数字的字符常量写入LCD
181 2 WriteData(':'); //将万位数字的字符常量写入LCD
182 2 WriteData(digit[bai]); //将万位数字的字符常量写入LCD
183 2 WriteData(digit[shi]); //将千位数字的字符常量写入LCD
184 2 WriteData('.'); //将万位数字的字符常量写入LCD
185 2 WriteData(digit[ge]); //将百位数字的字符常量写入LCD
186 2 WriteData(' '); //将百位数字的字符常量写入LCD
187 2 WriteData('C'); //将万位数字的字符常量写入LCD
188 2 WriteData('M'); //将万位数字的字符常量写入LCD
189 2 EA=0;
190 2 Tx=1;
191 2 delay_20us();
192 2 Tx=0; //产生一个20us的脉冲,在Tx引脚
193 2 while(Rx==0); //等待Rx回波引脚变高电平
194 2 succeed_flag=0; //清测量成功标志
195 2 EX0=1; //打开外部中断
196 2 TH1=0; //定时器1清零
197 2 TL1=0; //定时器1清零
198 2 TF1=0; //
199 2 TR1=1; //启动定时器1
200 2 EA=1;
201 2
202 2 while(TH1 < 30);//等待测量的结果,周期65.535毫秒(可用中断实现)
203 2 TR1=0; //关闭定时器1
204 2 EX0=0; //关闭外部中断
205 2
206 2 if(succeed_flag==1)
207 2 {
208 3 distance_data=outcomeH; //测量结果的高8位
209 3 distance_data<<=8; //放入16位的高8位
210 3 distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据
211 3 distance_data*=12; //因为定时器默认为12分频
212 3 distance_data/=58; //微秒的单位除以58等于厘米
213 3 } //为什么除以58等于厘米, Y米=(X秒*344)/2
214 2 // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
215 2 if(succeed_flag==0)
216 2 {
217 3 distance_data=0; //没有回波则清零
218 3
219 3 }
220 2
221 2 distance[i]=distance_data; //将测量结果的数据放入缓冲区
222 2 i++;
223 2 if(i==3)
224 2 {
225 3 distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;
226 3
227 3 pai_xu();
228 3 distance_data=distance[1];
229 3
230 3
231 3 a=distance_data;
232 3 if(b==a) CONT_1=0;
233 3 if(b!=a) CONT_1++;
234 3 if(CONT_1>=3)
235 3 { CONT_1=0;
236 4 b=a;
237 4 conversion(b);
238 4 }
239 3 i=0;
240 3 }
241 2 }
C51 COMPILER V8.18 超蒧波显示 01/07/2010 23:31:15 PAGE 5
242 1 }
243 //***************************************************************
244 //外部中断0,用做判断回波电平
245 INTO_() interrupt 0 // 外部中断是0号
246 {
247 1 outcomeH =TH1; //取出定时器的值
248 1 outcomeL =TL1; //取出定时器的值
249 1 succeed_flag=1; //至成功测量的标志
250 1 EX0=0; //关闭外部中断
251 1 }
252 //****************************************************************
253 //定时器0中断,用做显示
254 timer0() interrupt 1 // 定时器0中断是1号
255 {
256 1 // TH0=0xfd; //写入定时器0初始值
257 1 // TL0=0x77;
258 1
259 1 }
260
261 //显示数据转换程序
262 void conversion(uint temp_data)
263 {
264 1 uchar ge_data,shi_data,bai_data ;
265 1 bai_data=temp_data/100 ;
266 1 temp_data=temp_data%100; //取余运算
267 1 shi_data=temp_data/10 ;
268 1 temp_data=temp_data%10; //取余运算
269 1 ge_data=temp_data;
270 1
271 1 //bai_data=SEG7[bai_data];
272 1 //shi_data=SEG7[shi_data]&0x7f;
273 1 //ge_data =SEG7[ge_data];
274 1
275 1 EA=0;
276 1 bai = bai_data;
277 1 shi = shi_data;
278 1 ge = ge_data ;
279 1 EA=1;
280 1 }
281 //******************************************************************
282
283
284 void delay_20us()
285 { uchar bt ;
286 1 for(bt=0;bt<60;bt++);
287 1 }
288 void pai_xu()
289 { uint t;
290 1 if (distance[0]>distance[1])
291 1 {t=distance[0];distance[0]=distance[1];distance[1]=t;}
292 1 if(distance[0]>distance[2])
293 1 {t=distance[2];distance[2]=distance[0];distance[0]=t;}
294 1 if(distance[1]>distance[2])
295 1 {t=distance[1];distance[1]=distance[2];distance[2]=t;}
296 1 }
297
298
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 666 ----
CONSTANT SIZE = 25 ----
C51 COMPILER V8.18 超蒧波显示 01/07/2010 23:31:15 PAGE 6
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 7
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -