📄 hello.lst
字号:
219 1 while(m==P0); /*按钮放开否?*/
220 1 send_to_Led_a(); /*串行发送到DTLED-6副程式*/
221 1 } /*返回上一层程式*/
222 /****************************************************/
223 void wxb1(void)
224 {
225 1 switch(tab[ptr]) /*是则测试ptr键盘扫描计数器指标至TAB[]取到的键盘码*/
226 1 {
227 2 case 0x02:
228 2 dispbuf[dispbuf[0]]++; /*是按“上”,是则呼叫设定密码SET*/
229 2 if(dispbuf[dispbuf[0]]>9)
230 2 {dispbuf[dispbuf[0]+1]++;
231 3 dispbuf[dispbuf[0]]=0;
232 3 }
233 2 if(dispbuf[dispbuf[0]+1]==6)
234 2 {dispbuf[dispbuf[0]+1]=dispbuf[dispbuf[0]]=0;
235 3 }
236 2 break; /*跳出此循环*/
237 2 case 0x08:
238 2 if(dispbuf[dispbuf[0]]==0) /*是按“下”,是则呼叫清除显示器CLEAR*/
239 2 {if(dispbuf[dispbuf[0]+1]==0)
C51 COMPILER V7.07 HELLO 11/07/2006 19:17:04 PAGE 5
240 3 dispbuf[dispbuf[0]+1]=6;
241 3 dispbuf[dispbuf[0]]=10;
242 3 dispbuf[dispbuf[0]+1]--;
243 3 }
244 2 dispbuf[dispbuf[0]]--;
245 2 break; /*跳出此循环*/
246 2 case 0x04: /*是按“左”,未规划键待用户自己定义*/
247 2 dispbuf[0]=dispbuf[0]+2; /*小数点左移一位*/
248 2 if(dispbuf[0]>6)
249 2 dispbuf[0]=1;
250 2 break; /*跳出此循环*/
251 2 case 0x06: /*是按“右”,未规划键待用户自己定义*/
252 2 if(dispbuf[0]<3)
253 2 dispbuf[0]=7;
254 2 dispbuf[0]=dispbuf[0]-2; /*小数点右移一位*/
255 2 break; /*跳出此循环*/
256 2 case 0x0a: /*是按“*”,已侦测过*/
257 2 FLAG5=1;
258 2 break; /*跳出此循环*/
259 2 case 0x0c: /*是否按“A”,未规划键待用户自己定义*/
260 2 FLAG4=FLAG5=P3_6=1;
261 2 dispbuf[0]=0x03; /*小数点位*/
262 2 break; /*跳出此循环*/
263 2 default: /*以上均不是*/
264 2 break; /*跳出此循环*/
265 2 }
266 1 } /*返回上一层程式*/
267 /****************************************************/
268 void wxb2(void)
269 {switch(tab[ptr]) /*是则测试ptr键盘扫描计数器指标至TAB[]取到的键盘码*/
270 1 {case 0x02:
271 2 dispbuf[dispbuf[0]]++; /*是按“上”,是则呼叫设定密码SET*/
272 2 if(dispbuf[dispbuf[0]+1]==2)
273 2 {if(dispbuf[dispbuf[0]]>4)
274 3 {dispbuf[dispbuf[0]+1]=dispbuf[dispbuf[0]]=0;}
275 3 }
276 2 else
277 2 {if(dispbuf[dispbuf[0]]>9)
278 3 {dispbuf[dispbuf[0]+1]++; dispbuf[dispbuf[0]]=0;}
279 3 if(dispbuf[dispbuf[0]+1]>2)
280 3 {dispbuf[dispbuf[0]+1]=dispbuf[dispbuf[0]]=0;}
281 3 }
282 2 break; /*跳出此循环*/
283 2 case 0x08:
284 2 if(dispbuf[dispbuf[0]]==0) /*是按“下”,是则呼叫清除显示器CLEAR*/
285 2 {if(dispbuf[dispbuf[0]+1]==0)
286 3 {dispbuf[dispbuf[0]+1]=2;
287 4 dispbuf[dispbuf[0]]=5;
288 4 }
289 3 else
290 3 {dispbuf[dispbuf[0]]=10; dispbuf[dispbuf[0]+1]--;
291 4 }
292 3 }
293 2 dispbuf[dispbuf[0]]--;
294 2 break; /*跳出此循环*/
295 2 case 0x04: /*是按“左”,未规划键待用户自己定义*/
296 2 dispbuf[0]=dispbuf[0]+2; /*小数点左移一位*/
297 2 if(dispbuf[0]>6)
298 2 dispbuf[0]=1;
299 2 break; /*跳出此循环*/
300 2 case 0x06: /*是按“右”,未规划键待用户自己定义*/
301 2 if(dispbuf[0]<3)
C51 COMPILER V7.07 HELLO 11/07/2006 19:17:04 PAGE 6
302 2 dispbuf[0]=7;
303 2 dispbuf[0]=dispbuf[0]-2; /*小数点右移一位*/
304 2 break; /*跳出此循环*/
305 2 case 0x0a: /*是按“*”,已侦测过*/
306 2 FLAG5=1;
307 2 break; /*跳出此循环*/
308 2 case 0x0c: /*是否按“A”,未规划键待用户自己定义*/
309 2 FLAG4=FLAG5=P3_6=1;
310 2 dispbuf[0]=0x03; /*小数点位*/
311 2 break; /*跳出此循环*/
312 2 default: /*以上均不是*/
313 2 break; /*跳出此循环*/
314 2 }
315 1 } /*返回上一层程式*/
316 /****************************************************/
317 void save_clocks(void) /*按显示时间更改时钟*/
318 {clocktmp[0]=dispbuf[1]|(dispbuf[2]<<4);
319 1 clocktmp[1]=dispbuf[3]|(dispbuf[4]<<4);
320 1 clocktmp[2]=dispbuf[5]|(dispbuf[6]<<4);
321 1 Wr1302();
322 1 FLAG2=1;
323 1 nop;
324 1 }
325 /****************************************************/
326 void xch(void) /*显示向右移动副程式*/
327 {char c; /*宣告变数*/
328 1 for(c=6;c>0;c--)
329 1 {dispbuf[c]=dispbuf[c-1];/*将显示器dispbuf[]移位交换,dispbuf[3]->dispbuf[4]->dispbuf[5]...*/
330 2 }
331 1 dispbuf[0]=0; /*有安键时,小数点不亮*/
332 1 dispbuf[1]=tab[ptr]; /*新的按键值存入dispbuf[1],最低位*/
333 1 } /*返回上一层程式*/
334 /****************************************************/
335 void open(void) /*开门比较密码副程式*/
336 {char c; /*宣告变数*/
337 1 FLAG1=1; /*设开门标号为1*/
338 1 for(c=1;c<6;c++) /*比较六个密码*/
339 1 {if(dispbuf[c]!=bufdata[c]) /*显示值(按键值disbuf[])与密码TAB[]比较是否相等*/
340 2 FLAG1=0;
341 2 if(FLAG1==0) /*FLAG1=0 表示不相等*/
342 2 break; /*跳出此循环*/
343 2 }
344 1 if(FLAG1==1) /*如FLAG1=1 表示密码相等,令电锁P2.0置0动作*/
345 1 { /*密码正确*/
346 2 dispbuf[8]=0x09; /*蜂鸣器设定开/二次分频*/
347 2 dispbuf[0]=0x01; /*小数点到最高位位*/
348 2 P3_6=0; /*P3.6置0,使绿色下载指示灯亮(喇叭响)*/
349 2 TMOD=0x11;
350 2 TR1=1; /**/
351 2 IE=0x8a; /*8是允许中断,a是TIMER0,TIMER1中断致能位*/
352 2 send_to_Led_a(); /*串行发送到DTLED-6副程式*/
353 2 while(FLAG5==0) /*等待设置死循环*/
354 2 {
355 3 //scan(); /*呼叫键盘扫描副程式有按FLAG0会为1*/
356 3 if(FLAG0==1)
357 3 {
358 4 temp_setclock(); /*判断有按键输入否?*/
359 4 }
360 3 }
361 2 if(FLAG4==0)
362 2 save_clocks(); /*按显示时间更改时钟*/
363 2 }
C51 COMPILER V7.07 HELLO 11/07/2006 19:17:04 PAGE 7
364 1 else P3_6=1; /*密码错,P3.6置1,关闭绿色下载指示灯灭(喇叭不响)*/
365 1 } /*返回上一层程式*/
366 /******************************************************/
367 void clear(void) /*清除显示器dispbuf[]为00副程式*/
368 {char c; /*宣告变数*/
369 1 for(c=1;c<7;c++) /*将00存入显示阵列dispbuf[]*/
370 1 {dispbuf[c]=0x00;
371 2 }
372 1 } /*返回上一层程式*/
373 /******************************************************/
374 void Wr1302(void) /*写时钟芯片DS1302*/
375 {char i,j,ts0,conb,conbyt;
376 1 conb=0x80;
377 1 ts0=conb;
378 1 //
379 1 for(j=0;j<3;j++) /*写秒,分,时三次循环*/
380 1 {clk=RST=0; /*DS1302系统初始化*/
381 2 nop;nop;
382 2 RST=1;
383 2 for(i=0;i<8;i++) /*写控制字到DS1302*/
384 2 {clk=0; /*清时钟*/
385 3 if(conb&0x01)
386 3 DINOUT=1;
387 3 else DINOUT=0;
388 3 clk=1; /*时钟上升沿,发送数据有效*/
389 3 conb=conb>>1;
390 3 nop;
391 3 }
392 2 clk=0; /*清时钟*/
393 2 conb=ts0+2+j*2;
394 2 conbyt=clocktmp[j]&0x7f;
395 2 for(i=0;i<8;i++) /*写设定值到DS1302*/
396 2 {clk=0; /*清时钟*/
397 3 if(conbyt&0x01)
398 3 DINOUT=1;
399 3 else DINOUT=0;
400 3 clk=1; /*时钟上升沿,发送数据有效*/
401 3 conbyt=conbyt>>1;
402 3 nop;
403 3 }
404 2 delay(5);
405 2 RST=0;
406 2 nop;
407 2 }
408 1 }
409 /*返回主程式*/
410 /******************************************************/
411 void Rd1302st() /*启动时钟芯片振荡器*/
412 {
413 1 char i,ts0,conb,conbyt;
414 1 Rd1302();
415 1 conbyt=clocktmp[0]&0x7f;
416 1 conb=0x80;
417 1 ts0=conb;
418 1 clk=RST=0; /*DS1302系统初始化*/
419 1 nop;nop;
420 1 RST=1;
421 1 for(i=0;i<8;i++) /*写控制字到DS1302*/
422 1 { clk=0; /*清时钟*/
423 2 if(conb&0x01)
424 2 DINOUT=1;
425 2 else DINOUT=0;
C51 COMPILER V7.07 HELLO 11/07/2006 19:17:04 PAGE 8
426 2 clk=1; /*时钟上升沿,发送数据有效*/
427 2 conb=conb>>1;
428 2 nop;
429 2 }
430 1 clk=0; /*清时钟*/
431 1 for(i=0;i<8;i++) /*写控制字到DS1302*/
432 1 { clk=0; /*清时钟*/
433 2 if(conbyt&0x01)
434 2 DINOUT=1;
435 2 else DINOUT=0;
436 2 clk=1; /*时钟上升沿,发送数据有效*/
437 2 conbyt=conbyt>>1;
438 2 nop;
439 2 }
440 1 delay(5);
441 1 RST=0;
442 1 nop;
443 1 } /*返回主程式*/
444 //**************************************************************
445 void read24c02() /*读24c02的存储值*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -