📄 main.lst
字号:
223 1
224 1
225 1 //将调时后的时间日期写入12887
226 1 if(showtime==0)//当前状态是显示时间状态
227 1 SetTime(BIN2BCD(time[0])/*秒*/,BIN2BCD(time[1])/*分*/,BIN2BCD(time[2]))/*时*/;
228 1 else//当前状态是显示日期
229 1 SetDate(BIN2BCD(time[4])/*日*/,BIN2BCD(time[5])/*月*/,BIN2BCD(time[6]))/*年*/;
230 1
231 1 }
232
C51 COMPILER V6.12 MAIN 06/27/2007 16:47:25 PAGE 5
233
234
235 //////////////////////////动态显示时间日期/////////////////////////////
236
237 void display() //显示时间
238 {
239 1 uchar data six,five,four,three,secon,first;
240 1 //将要显示的数字的各位分离
241 1 six=time[2+showtime]/10;
242 1 five=time[2+showtime]%10;
243 1
244 1 four=time[1+showtime]/10;
245 1 three=time[1+showtime]%10;
246 1
247 1 secon=time[0+showtime]/10;
248 1 first=time[0+showtime]%10;
249 1
250 1 //将二进制数转换为七段码
251 1 six=d2q[six];
252 1 five=d2q[five];
253 1 four=d2q[four];
254 1 three=d2q[three];
255 1 secon=d2q[secon];
256 1 first=d2q[first];
257 1
258 1 if(showtime==4)//当前状态是显示日期
259 1 showpoint=0x04;//显示日期时显示数点
260 1 else//当前状态是显示时间
261 1 showpoint=0x00;//显示时间时不显示数点
262 1
263 1 if(timch_bitchoose==0)//确保不在调时状态时关闭闪动开关变量使不闪
264 1 {
265 2 six_flash=0x00;
266 2 five_flash=0x00;
267 2 three_flash=0x00;
268 2 four_flash=0x00;
269 2 secon_flash=0x00;
270 2 first_flash=0x00;
271 2 }
272 1
273 1 if(flash_T<=15)//若在调时状态,闪,灭
274 1 {
275 2 P8255B=close;
276 2 P8255A=six;
277 2 P8255B=six_open|six_flash;
278 2 delay(3);
279 2
280 2 P8255B=close;
281 2 P8255A=five|showpoint;//显示日期时显示年与月之间的隔点
282 2 P8255B=five_open|five_flash;
283 2 delay(3);
284 2
285 2 P8255B=close;
286 2 P8255A=four;
287 2 P8255B=four_open|four_flash;
288 2 delay(3);
289 2
290 2 P8255B=close;
291 2 P8255A=three|showpoint;//显示日期时显示月与日之间的隔点
292 2 P8255B=three_open|three_flash;
293 2 delay(3);
294 2
C51 COMPILER V6.12 MAIN 06/27/2007 16:47:25 PAGE 6
295 2 P8255B=close;
296 2 P8255A=secon;
297 2 P8255B=secon_open|secon_flash;
298 2 delay(3);
299 2
300 2 P8255B=close;
301 2 P8255A=first;
302 2 P8255B=first_open|first_flash;
303 2 delay(3);
304 2 }
305 1 else//若在调时状态,闪,亮
306 1 {
307 2 P8255B=close;
308 2 P8255A=six;
309 2 P8255B=six_open;
310 2 delay(3);
311 2
312 2 P8255B=close;
313 2 P8255A=five|showpoint;//显示日期时显示年与月之间的隔点
314 2 P8255B=five_open;
315 2 delay(3);
316 2
317 2 P8255B=close;
318 2 P8255A=four;
319 2 P8255B=four_open;
320 2 delay(3);
321 2
322 2 P8255B=close;
323 2 P8255A=three| showpoint;//显示日期时显示月与日之间的隔点
324 2 P8255B=three_open;
325 2 delay(3);
326 2
327 2 P8255B=close;
328 2 P8255A=secon;
329 2 P8255B=secon_open;
330 2 delay(3);
331 2
332 2 P8255B=close;
333 2 P8255A=first;
334 2 P8255B=first_open;
335 2 delay(3);
336 2 }
337 1
338 1 flash_T++;//flash_T 记录一个闪动周期内动态显示的次数
339 1
340 1 if(flash_T==50)//一个闪动周期内动态显示50次,闪动周期大于 50*(3*6)ms
341 1 flash_T=0;
342 1 }
343
344
345 /*************时间延迟***************************/
346 void delay(uchar data x)//x为要延迟的时间ms级
*** WARNING C258 IN LINE 346 OF .\MAIN.C: 'x': mspace on parameter ignored
347 {
348 1 uchar data j;
349 1 while (x-->0)
350 1 {
351 2 for(j=0;j<125;j++) // 延迟的时间1ms
352 2 {;}
353 2 }
354 1 }
355
C51 COMPILER V6.12 MAIN 06/27/2007 16:47:25 PAGE 7
356 /*********************进制转换***************************/
357 uchar BCD2BIN(uchar data BCD)
*** WARNING C258 IN LINE 357 OF .\MAIN.C: 'BCD': mspace on parameter ignored
358 {
359 1 unsigned char data tem=0;
360 1 tem=BCD&0x0f;
361 1 BCD=BCD>>4;
362 1 tem+=BCD*10;
363 1 return tem;
364 1 }
365
366
367 uchar BIN2BCD(uchar data BIN)
*** WARNING C258 IN LINE 367 OF .\MAIN.C: 'BIN': mspace on parameter ignored
368 {
369 1 uchar data shi,ge,BCD;
370 1 shi=BIN/10;
371 1 ge=BIN%10;
372 1 shi=shi<<4;
373 1 BCD=shi|ge;
374 1 return BCD;
375 1 }
376
377 /************************************************/
378
379
380 /////////////////////判断是否闰年////////////////////
381 void if_leapyear()
382 {
383 1 uchar data year;
384 1 year=2000+time[6];
385 1 if(year%4!=0)
386 1 leapyear=0;
387 1 else if(year%100!=0)
388 1 leapyear=1;
389 1 else if(year%400!=0)
390 1 leapyear=0;
391 1 else
392 1 leapyear=1;
393 1 }
394 ////////////////////////////键盘输入控制显示时间还是显示日期/////////////////////////
395 void keyscan()
396 {
397 1 P8255C=0Xc0;
398 1 if((P8255C&0xc0)!=0xc0)
399 1 {
400 2 delay(5);
401 2 if((P8255C&0xc0)!=0xc0)
402 2 {
403 3 if(showtime==0)
404 3 showtime=4;//显示日期
405 3 else
406 3 showtime=0;//显示时间
407 3 }
408 2 }
409 1 while((P8255C&0xc0)!=0xc0) //防止一次按键,多次响应
410 1 P8255B=0XFF;
411 1 }
412 /*
413 //////////////////初始化函数///////////////
414 void Init()//定时器。中断的初始化
415 {
C51 COMPILER V6.12 MAIN 06/27/2007 16:47:25 PAGE 8
416 TMOD=0X16;//0001 0110,定时器0采用外部计数方式2,定时器1采用定时方式1
417
418 TH0=0xfe;
419 TL0=0XFE;//定时初值,定时器0计1满
420
421 thl1=15536;//定时器1定时50ms
422 //12M Hz 晶振
423
424 EX0=1;//外部中断0允许
425 EX1=1;//外部中断1允许
426 ET0=1;//定时中断0允许
427 ET1=1;//定时中断1允许
428
429
430 IT0=1;
431 IT1=1;//外部中断触发方式
432
433 TR1=1; //T1运行
434 TR0=1; // T0 运行
435
436
437 P8255Con=0x88; //初始化8255 A口输入检测数据 0x82
438
439 EA=1; //开中断
440 }
441 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1181 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 22 7
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 8 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -