📄 clock- lcd1602.lst
字号:
194 1 display[1]=input1/10+0x30; //秒单位数据处理
195 1 display[0]=input1%10+0x30;
196 1
197 1 display[3]=input2/10+0x30; //分单位数据处理
198 1 display[2]=input2%10+0x30;
199 1
200 1 display[5]=input3/10+0x30; //时单位数据处理
201 1 display[4]=input3%10+0x30;
202 1
203 1 lcd_pos(0x46);
204 1 lcd_wdat(display[5]); //显示时
205 1 lcd_wdat(display[4]);
206 1 lcd_wdat(0x3a); //显示':'
207 1
208 1 lcd_wdat(display[3]); //显示分
209 1 lcd_wdat(display[2]);
210 1 lcd_wdat(0x3a); //显示':'
211 1
212 1 lcd_wdat(display[1]); //显示秒
213 1 lcd_wdat(display[0]);
214 1 }
215
216 /**********************************************************
217 * *
218 * 时间设定函数 *
219 * *
220 **********************************************************/
221 void set_time()
222 {
223 1 updown=1;
224 1 settime=0;
225 1
226 1 if(K1==0)
227 1 {
228 2 beep();
229 2 while(K1==0);
230 2 settime=1;
231 2 lcd_pos(0x00); //设置显示位置为第一行
232 2 for(m=0;m<16;m++)
233 2 lcd_wdat(cdis5[m]); //显示字符
234 2
235 2 while(settime)
236 2 {
237 3 TR0=0;
238 3 if(K2==0)
239 3 {
240 4 beep();
241 4 if(updown)
C51 COMPILER V8.02 CLOCK__LCD1602 12/24/2006 12:07:26 PAGE 5
242 4 {
243 5 hour++;
244 5 if(hour==24)
245 5 hour=0;
246 5 }
247 4 else
248 4 {
249 5 hour--;
250 5 if(hour==0xff)
251 5 hour=23;
252 5 }
253 4 }
254 3
255 3 if(K3==0)
256 3 {
257 4 beep();
258 4 if(updown)
259 4 {
260 5 min++;
261 5 if(min==60)
262 5 min=0;
263 5 }
264 4 else
265 4 {
266 5 min--;
267 5 if(min==0xff)
268 5 min=59;
269 5 }
270 4 }
271 3
272 3 if(K1==0)
273 3 {
274 4 beep();
275 4 while(K1==0);
276 4 updown=~updown;
277 4 }
278 3
279 3 if(K4==0)
280 3 {
281 4 beep();
282 4 while(K4==0);
283 4 settime=0;
284 4 sec=0;
285 4 TR0=1;
286 4 }
287 3
288 3 play(sec,min,hour);
289 3
290 3 } // end of while(settime)
291 2
292 2 lcd_pos(0x00); //设置显示位置为第一行
293 2 for(m=0;m<16;m++)
294 2 lcd_wdat(cdis3[m]);
295 2
296 2 } // end of if(K1==0)
297 1 }
298
299 /*********************************************************
300 * *
301 * 主函数 *
302 * *
303 *********************************************************/
C51 COMPILER V8.02 CLOCK__LCD1602 12/24/2006 12:07:26 PAGE 6
304 main()
305 {
306 1 TMOD=0x01;
307 1 TH0=0x4c;
308 1 TL0=0x00; //50ms定时
309 1 ET0=1;
310 1 EA=1;
311 1
312 1 lcd_init();
313 1
314 1 lcd_pos(0x00); //设置显示位置为第一行
315 1 for(m=0;m<16;m++)
316 1 {
317 2 lcd_wdat(cdis1[m]); //显示字符
318 2 delay1(50);
319 2 }
320 1 lcd_pos(0x40); //设置显示位置为第二行
321 1 for(m=0;m<16;m++)
322 1 {
323 2 lcd_wdat(cdis2[m]); //显示字符
324 2 delay1(50);
325 2 }
326 1
327 1 delay1(3000);
328 1
329 1 lcd_pos(0x00); //设置显示位置为第一行
330 1 for(m=0;m<16;m++)
331 1 lcd_wdat(cdis3[m]); //显示字符
332 1
333 1 lcd_pos(0x40); //设置显示位置为第二行
334 1 for(m=0;m<16;m++)
335 1 lcd_wdat(cdis4[m]);
336 1
337 1 TR0=1;
338 1
339 1 while(1)
340 1 {
341 2 play(sec,min,hour);
342 2 set_time();
343 2 }
344 1 }
345
346 /**********************************************************
347 * *
348 * Time0中断函数 *
349 * *
350 **********************************************************/
351 void Time0(void) interrupt 1 using 0
352 {
353 1 TH0=0x4c; //50ms定时
354 1 TL0=0x00;
355 1
356 1 msec++;
357 1 if(msec==20) //50*20=1S
358 1 {
359 2 msec=0;
360 2 sec++; //秒加1
361 2 if(sec==60)
362 2 {
363 3 sec=0;
364 3 min++; //分加1
365 3 if(min==60)
C51 COMPILER V8.02 CLOCK__LCD1602 12/24/2006 12:07:26 PAGE 7
366 3 {
367 4 min=0;
368 4 hour++; //时加1
369 4 if(hour==24)
370 4 {
371 5 hour=0; //清计时单元
372 5 min=0;
373 5 sec=0;
374 5 }
375 4 }
376 3 }
377 2 }
378 1 }
379
380 /*********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 723 ----
CONSTANT SIZE = 85 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 2
IDATA SIZE = ---- ----
BIT SIZE = 2 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -