📄 shizhong.lst
字号:
216 5 case 5: day++;
217 5 if(day==32)
218 5 day=1;
219 5 write_nyr(9,day);
220 5 write_com(0x80+9);
221 5 break;
222 5 case 6: month++;
223 5 if(month==13)
224 5 month=1;
225 5 write_nyr(6,month);
226 5 write_com(0x80+6);
227 5 break;
228 5 case 7: year++;
229 5 if(year==100)
230 5 year=0;
231 5 write_nyr(3,year);
232 5 write_com(0x80+3);
233 5 break;
234 5 }
235 4 }
236 3 }
237 2 if(s3==0)
238 2 {
239 3 delay(1);
240 3 if(s3==0)
241 3 {
C51 COMPILER V7.00 SHIZHONG 10/10/2009 01:46:38 PAGE 5
242 4 while(!s3);di();
243 4 switch(s1num)
244 4 {//根据功能键次数调节相应数值
245 5 case 1: miao--;
246 5 if(miao==-1)
247 5 miao=59;
248 5 write_sfm(10,miao);
249 5 write_com(0x80+0x40+10);
250 5 break;
251 5 case 2: fen--;
252 5 if(fen==-1)
253 5 fen=59;
254 5 write_sfm(7,fen);
255 5 write_com(0x80+0x40+7);
256 5 break;
257 5 case 3: shi--;
258 5 if(shi==-1)
259 5 shi=23;
260 5 write_sfm(4,shi);
261 5 write_com(0x80+0x40+4);
262 5 break;
263 5 case 4: week--;
264 5 if(week==0)
265 5 week=7;
266 5 write_week(week);
267 5 write_com(0x80+12);
268 5 break;
269 5 case 5: day--;
270 5 if(day==0)
271 5 day=31;
272 5 write_nyr(9,day);
273 5 write_com(0x80+9);
274 5 break;
275 5 case 6: month--;
276 5 if(month==0)
277 5 month=12;
278 5 write_nyr(6,month);
279 5 write_com(0x80+6);
280 5 break;
281 5 case 7: year--;
282 5 if(year==-1)
283 5 year=99;
284 5 write_nyr(3,year);
285 5 write_com(0x80+3);
286 5 break;
287 5 }
288 4 }
289 3 }
290 2 }
291 1 if(s4==0)//检测S4
292 1 {
293 2 delay(5);
294 2 if(s4==0)
295 2 {
296 3 flag1=~flag1;
297 3 while(!s4);di();
298 3 if(flag1==0)
299 3 {//退出闹钟设置时保存数值
300 4 flag=0;
301 4 write_com(0x80+0x40);
302 4 write_date(' ');
303 4 write_date(' ');
C51 COMPILER V7.00 SHIZHONG 10/10/2009 01:46:38 PAGE 6
304 4 write_com(0x0c);
305 4 write_ds(1,miao);
306 4 write_ds(3,fen);
307 4 write_ds(5,shi);
308 4 }
309 3 else
310 3 {//进入闹钟设置
311 4 read_alarm();//读取原始数据
312 4 miao=amiao;//重新赋值用以按键调节
313 4 fen=afen;
314 4 shi=ashi;
315 4 write_com(0x80+0x40);
316 4 write_date('R');//显示标志
317 4 write_date('i');
318 4 write_com(0x80+0x40+3);
319 4 write_sfm(4,ashi);//送液晶显示闹钟时间
320 4 write_sfm(7,afen);
321 4 write_sfm(10,amiao);
322 4 }
323 3 }
324 2 }
325 1 }
326
327 void write_ds(uchar add,uchar date)
328 {//写12C887函数
329 1 dscs=0;
330 1 dsas=1;
331 1 dsds=1;
332 1 dsrw=1;
333 1 P0=add;//先写地址
334 1 dsas=0;
335 1 dsrw=0;
336 1 P0=date;//再写数据
337 1 dsrw=1;
338 1 dsas=1;
339 1 dscs=1;
340 1 }
341
342 uchar read_ds(uchar add)
343 {//读12C887函数
344 1 uchar ds_date;
345 1 dsas=1;
346 1 dsds=1;
347 1 dsrw=1;
348 1 dscs=0;
349 1 P0=add;//先写地址
350 1 dsas=0;
351 1 dsds=0;
352 1 P0=0xff;
353 1 ds_date=P0;//再读数据
354 1 dsds=1;
355 1 dsas=1;
356 1 dscs=1;
357 1 return ds_date;
358 1 }
359 //*---首次操作12C887时给予寄存器初始化---
360 void set_time()
361 {//首次上电初始化时间函数
362 1 write_ds(0,0);
363 1 write_ds(1,0);
364 1 write_ds(2,0);
365 1 write_ds(3,0);
C51 COMPILER V7.00 SHIZHONG 10/10/2009 01:46:38 PAGE 7
366 1 write_ds(4,0);
367 1 write_ds(5,0);
368 1 write_ds(6,0);
369 1 write_ds(7,0);
370 1 write_ds(8,0);
371 1 write_ds(9,0);
372 1 }
373 //----------------------------------------*/
374 void read_alarm()
375 {//读取12C887闹钟值
376 1 amiao=read_ds(1);
377 1 afen=read_ds(3);
378 1 ashi=read_ds(5);
379 1 }
380 void main()//主函数
381 {wr=0;
382 1 init();//调用初始化函数
383 1 while(1)
384 1 {
385 2 keyscan();//按键扫描
386 2 if(flag_ri==1)//当闹钟中断时进入这里
387 2 {
388 3 di();
389 3 delay(100);
390 3 di();
391 3 delay(500);
392 3 }
393 2 if(flag==0&&flag1==0)//正常工作时进入这里
394 2 {
395 3 keyscan();//按键扫描
396 3 year=read_ds(9);//读取12C887数据
397 3 month=read_ds(8);
398 3 day=read_ds(7);
399 3 week=read_ds(6);
400 3 shi=read_ds(4);
401 3 fen=read_ds(2);
402 3 miao=read_ds(0);
403 3 write_sfm(10,miao);//送液晶显示
404 3 write_sfm(7,fen);
405 3 write_sfm(4,shi);
406 3 write_week(week);
407 3 write_nyr(3,year);
408 3 write_nyr(6,month);
409 3 write_nyr(9,day);
410 3 }
411 2 }
412 1 }
413
414 void exter() interrupt 2//外部中断1服务程序
415 { uchar c; //进入中断表示闹钟时间到,
416 1 flag_ri=1; //设置标志位,用以大程序中报警提示
417 1 c=read_ds(0x0c);//读取12C887的C寄存器表示响应了中断
418 1 }
419
420
421
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1454 ----
CONSTANT SIZE = 29 ----
XDATA SIZE = ---- ----
C51 COMPILER V7.00 SHIZHONG 10/10/2009 01:46:38 PAGE 8
PDATA SIZE = ---- ----
DATA SIZE = 14 1
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -