51单片机定时器的应用proteus仿真 实例原理:用定时器设计一个秒表,其中设有一个按键,定时器 T0工作在方式1。当第一 次按下按键时,定时器开始计时。第二次按下按键时,停止计时并计算第一次按下键盘与第二次按下键盘的时间,送人P0口和P2口并将时间显示出来,P0口显示十位,P2口显示各位。第三次按下键盘时使定时器清零,等待下一次按键。 源程序: #include<reg51.h> #defineuchar unsigned char sbitkey=P3^0; sbitge=P2^7; sbitshi=P2^6; uchartime=0,count=0; ucharcode dis[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; ucharcode dis_dot[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; voiddelay(uchar N) { uchar i,j; for(i=0;i<N;i++) for(j=0;j<125;j++); } voiddisplay(void) { P0=dis[time%10]; ge=0; delay(3); ge=1; P0=dis_dot[time/10]; shi=0; delay(3); shi=1; } voidmain() { TMOD=0x01;TH0=0x3c;TL0=0xb0;IE=0x82;//定时器T0工作在方式1 while(1) { while(key==1) display(); TR0=1; EA=1; while(key==0) display(); while(key==1) display(); EA=0; while(key==0); display(); while(key==1) display(); time=0; while(key==0) display(); } } voidT0_time()interrupt 1 { count++; if(count==2) { time++; count=0; if(time==99) time=0; } TH0=0x3c;TL0=0xb0; }
完整资料下载:
|