/***************************************************************** ;****************************************************************/ void timer0(void) interrupt 1 using 1 { uchar x; fresh=0; sec=0; TH0=0x3c; TL0=0xb0; count++;
/*------------------------------*/ if(tfix) x=N; else x=10; /*------------------------------*/
if(count!=x) return; else { /*-----------------------------*/ tfix=0; /* 修正完后清修正标志 */ /*-----------------------------*/ sec=1; count=0; second++; if(second!=60) return; else { fresh=1; second=0; minul++; if(minul!=10) return; else { minul=0; minuh++; if(minuh!=6) return; else { minuh=0; hourl++; if(hourh==0) { if(hourl!=10) return; else hourl=0; hourh++; if(hourh!=2) return; else { hourh=1; return; } } else { if(hourl!=3) return; else { hourl=0; hourh++; if(hourh!=2) return; else { hourl=1; hourh=0; tfix=1; return; } } } } } } } }
/***************************************************************** ;****************************************************************/ void t0_init(void) { TMOD=0x11; /* T0定时方式1 */ TH0=0x3c; TL0=0xb0; }
/***************************************************************** ;***************************************************************/ void uart_init(void) { SCON=0; /* 串口工作方式0输出(不允许接收) */ } /***************************************************************** ;****************************************************************/ void sys_init(void) { IE=0; /* 关闭所有中断 */ buf[0]=0; /* 各变量初始化为0 */ buf[1]=0; buf[2]=0; buf[3]=0; hourh=0; hourl=0; minuh=0; minul=0; second=0; count=0; setflag=0; /* 标志所在字节清0 */ uflag=0; EA=1; /* 开放中断 */ }
/***************************************************************** ;****************************************************************/ void settime(void) { uchar i; while(S1); for(i=0;i<4;i++) delay20ms(); while(S1); setflag=0; ss=0; hh=1;
TR1=1; ET1=1; while(1) { buf[0]=hourh; buf[1]=hourl; buf[2]=minuh; buf[3]=minul; /*****************************************************/ if(ss) { switch(setflag) { case 0x01: buf[0]=0x0b; break; case 0x02: buf[1]=0x0b; break; case 0x04: buf[2]=0x0b; break; case 0x08: buf[3]=0x0b; break; } } /****************************************************/ display(); if(S1) goto sett_1; for(i=0;i<4;i++) delay20ms(); if(S1) goto sett_1; if(ml) { TR1=0; ET1=0; buf[0]=hourh; buf[1]=hourl; buf[2]=minuh; buf[3]=minul; return; } setflag<<=1; continue; sett_1: if(S2) continue; for(i=0;i<4;i++) delay20ms(); if(S2) continue; if(!hh) goto sett_2; { hourh++; if(hourh!=2) continue; hourh=0; continue; } sett_2: if(!hl) goto sett_3; { hourl++; if(hourh) goto sett_20; if(hourl==10) goto sett_21; continue; sett_21: hourl=0; continue; sett_20: if(hourl==3) goto sett_22; continue; sett_22: hourl=0; continue; } sett_3: if(!mh) goto sett_4; { minuh++; if(minuh==6) goto sett_30; continue; sett_30: minuh=0; continue; } sett_4: minul++; if(minul==10) goto sett_40; continue; sett_40: minul=0; continue; }
}
/***************************************************************** ;****************************************************************/ void delay20ms(void) { uchar i,j; for(i=0;i<20;i++) for(j=0;j<255;j++) ; }
/***************************************************************** ;****************************************************************/ void timer1(void) interrupt 3 using 1 { TH1=0x3c; /* 100ms定时常数 */ TL1=0xb0; count++; /* 中断次数加1*/ if(count!=5) /* 判到10次(1s)否,不到直接返回 */ return; ss=!ss; /* ss闪烁标志求反 */ count=0; }
/***************************************************************** ;****************************************************************/ void t1_init(void) { ; TMOD=0x11; /* T1定时方式1 */ TH1=0x3c; TL1=0xb0; }
毕业设计总结 经过了两个月的时间,毕业设计已经结束。在这期间我也经历了很多困难和痛苦。拿到题目我就在网上查阅了大量的资料,也查阅了很多的相关书籍,找到了很多月毕业设计有关的内容,从中筛选了写比较贴近的内容。 用AT89C2051单片机来控制数字电子钟,采用单片机实现的电子钟具有成本低、开发周期短、易于实现和扩展的优点,本设计采用软件方法完成数字电子时钟的设计。该设计能够实现实时时间显示功能、定时报警功能、时间修改功能和定时功能。 通过这次的毕业设计,使我对单片机有了更深的认识,从理论和实践上都得到了很大的提高,所以这次任务的完成是我学到了很多东西。首先,丰富了自己的知识面,学到了以前没能学通的东西,具体了解了怎样去完成一个电路的设计:从流程图、用PROTEL画出电路图等一整套东西。从毕业设计中,学到了单片机AT89C2051的内部结构及其工作原理,了解了时钟电路和控制电路的工作原理,还有共阴极数码管的工作原理,巩固了C语言的使用能力,提高了自己动手的能力,学到了很多知识,并且提高了自己分析问题的能力。使自己在硬件设计方面树立了信心,为以后从事这方面的工作打好了基础,这也是这次毕业设计的最大收获。 在这些都搞得比较明白后就开始画设计流程图和电路图,最后用了很长时间才画出自己的电路图,给老师看后,在老师的帮助下,改正了几处有问题的地方。 这次的毕业设计总的来说还是很成功的,自己从中学到很多,也发现了不少问题,为自己以后的学习、进步打下了不错的基础。
首页 上一页 1 2 3 下一页 尾页 3/3/3