ds1302.lst
来自「自己做的单片机Proteus仿真实例」· LST 代码 · 共 482 行 · 第 1/2 页
LST
482 行
226 4 case 5:write_com(0x80+9);
227 4
228 4 break;
229 4 case 6:write_com(0x80+6);
230 4
231 4 break;
232 4 case 7:write_com(0x80+3);
233 4
234 4 break;
235 4 case 8:s1num=0;
236 4 write_com(0x0c);
237 4 flag=0;
238 4 write1302(0x8e,0x00);
239 4 write1302(0x80,((Second/10)<<4|(Second%10)));
240 4 write1302(0x82,((Minute/10)<<4|(Minute%10)));
C51 COMPILER V9.00 DS1302 07/29/2012 18:04:57 PAGE 5
241 4 write1302(0x84,((Hour/10)<<4|(Hour%10)));
242 4 write1302(0x86,((Day/10)<<4|(Day%10)));
243 4 write1302(0x88,((Month/10)<<4|(Month%10)));
244 4 write1302(0x8c,((Year/10)<<4|(Year%10)));
245 4 write1302(0x8a,((Week/10)<<4|(Week%10)));
246 4 break;
247 4
248 4 }
249 3 }
250 2
251 2 }
252 1 if(s1num!=0)
253 1 {
254 2 if(s2==0);
255 2 {
256 3 delay(5);
257 3 if(s2==0)
258 3 {
259 4 while(!s2);
260 4
261 4 if(s1num==1)
262 4 {
263 5 Second++;
264 5 if(Second==60)
265 5 Second=0;
266 5 write_sfm(10,Second);
267 5 write_com(0x80+0x40+10);
268 5 }
269 4 if(s1num==2)
270 4 {
271 5 Minute++;
272 5 if(Minute==60)
273 5 Minute=0;
274 5 write_sfm(7,Minute);
275 5 write_com(0x80+0x40+7);
276 5 }
277 4 if(s1num==3)
278 4 {
279 5 Hour++;
280 5 if(Hour==24)
281 5 Hour=0;
282 5 write_sfm(4,Hour);
283 5 write_com(0x80+0x40+4);
284 5 }
285 4 if(s1num==4)
286 4 {
287 5 Week++;
288 5 if(Week==8)
289 5 Week=1;
290 5 write_week(Week);
291 5 write_com(0x80+12);
292 5 }
293 4 if(s1num==5)
294 4 {
295 5 Day++;
296 5 if(Day==32)
297 5 Day=1;
298 5 write_nyr(9,Day);
299 5 write_com(0x80+9);
300 5 }
301 4 if(s1num==6)
302 4 {
C51 COMPILER V9.00 DS1302 07/29/2012 18:04:57 PAGE 6
303 5 Month++;
304 5 if(Month==13)
305 5 Month=1;
306 5 write_nyr(6,Month);
307 5 write_com(0x80+6);
308 5 }
309 4 if(s1num==7)
310 4 {
311 5 Year++;
312 5 if(Year==100)
313 5 Year=0;
314 5 write_nyr(3,Year);
315 5 write_com(0x80+3);
316 5 }
317 4
318 4 }
319 3
320 3 }
321 2 if(s3==0);
322 2 {
323 3 delay(5);
324 3 if(s3==0)
325 3 {
326 4 while(!s3);
327 4
328 4 if(s1num==1)
329 4 {
330 5 Second--;
331 5 if(Second==-1)
332 5 Second=59;
333 5 write_sfm(10,Second);
334 5 write_com(0x80+0x40+10);
335 5 }
336 4 if(s1num==2)
337 4 {
338 5 Minute--;
339 5 if(Minute==-1)
340 5 Minute=59;
341 5 write_sfm(7,Minute);
342 5 write_com(0x80+0x40+7);
343 5 }
344 4 if(s1num==3)
345 4 {
346 5 Hour--;
347 5 if(Hour==-1)
348 5 Hour=23;
349 5 write_sfm(4,Hour);
350 5 write_com(0x80+0x40+4);
351 5 }
352 4 if(s1num==4)
353 4 {
354 5 Week--;
355 5 if(Week==0)
356 5 Week=7;
357 5 write_week(Week);
358 5 write_com(0x80+12);
359 5 }
360 4 if(s1num==5)
361 4 {
362 5 Day--;
363 5 if(Day==0)
364 5 Day=31;
C51 COMPILER V9.00 DS1302 07/29/2012 18:04:57 PAGE 7
365 5 write_nyr(9,Day);
366 5 write_com(0x80+9);
367 5 }
368 4 if(s1num==6)
369 4 {
370 5 Month--;
371 5 if(Month==0)
372 5 Month=12;
373 5 write_nyr(6,Month);
374 5 write_com(0x80+6);
375 5 }
376 4 if(s1num==7)
377 4 {
378 5 Year--;
379 5 if(Year==-1)
380 5 Year=99;
381 5 write_nyr(3,Year);
382 5 write_com(0x80+3);
383 5 }
384 4
385 4 }
386 3
387 3 }
388 2
389 2 }
390 1
391 1 }
392 ////////////////初始化和主函数部分////////////////////////////////////////////////////////////////////////
-//////
393 void lcd_init()
394 {
395 1 uchar num;
396 1 lcden=0;
397 1 write_com(0x38);
398 1 write_com(0x0c);
399 1 write_com(0x06);
400 1 write_com(0x01);
401 1 write_com(0x81);
402 1 for(num=0;num<10;num++)
403 1 {
404 2 write_data(table1[num]);
405 2 delay(5);
406 2 }
407 1 write_com(0x80+0x40+4);
408 1 for(num=0;num<8;num++)
409 1 {
410 2 write_data(table2[num]);
411 2 delay(5);
412 2 }
413 1
414 1 }
415 void init1302()
416 {
417 1 write1302(0x8e,0x00);
418 1 write1302(0x80,((50/10)<<4|(50%10))); //根据写秒寄存器命令字,写入秒的初始值
419 1 write1302(0x82,((59/10)<<4|(59%10))); //根据写分寄存器命令字,写入分的初值
420 1 write1302(0x84,((12/10)<<4|(12%10)));
421 1 write1302(0x86,((29/10)<<4|(29%10)));
422 1 write1302(0x88,((2/10)<<4|(2%10)));
423 1 write1302(0x8c,((12/10)<<4|(12%10)));
424 1 write1302(0x8a,((4/10)<<4|(4%10)));
425 1 }
C51 COMPILER V9.00 DS1302 07/29/2012 18:04:57 PAGE 8
426 void main()
427 {
428 1 lcd_init();
429 1 init1302();
430 1 gettime();
431 1 display();
432 1 while(1)
433 1 {
434 2 keyscan();
435 2 if(flag==0)
436 2 {
437 3 gettime();
438 3 display();
439 3 }
440 2 }
441 1
442 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1348 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?