zhanghming 发表于 2018-6-15 12:34 就这个程序而言,是一样的。没有一点特殊的地方。 |
您能用51的讲解 52不熟 谢谢您 |
那怎样改 开始时是暂停 并且初始值是00:00 |
你的程序,很有问题! 第一:开始显示不可能为零,因为你一开始就计时了。 第二:由于有定时器中断,所以,你的按键几乎是没有用的——按键没反应。 给你一个我的例子: 按键是用外部中断,k1为外部中断0,按第一次,开始计时,按第二次,显示最终计时,按第三次,清零。k2是外部中断1,按奇次,如1、3、5、7等,显示当前的计时,但计时继续,按偶数次,如2、4、6、8等,显示继续计时。 与你的作业要求有点不同,但秒表功能非常完整。你可能根据自己的要求修改。 看别人的程序,也是学习过程。 我的程序适用电路如图所示。 ![]() ![]() ![]() #include<reg52.h> typedef unsigned char u8; typedef unsigned int u16; unsigned char DisplayData[4]; unsigned char MMMM=0,MM=0,TTTT=0,TT=0,i=0; bit A=0; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void waibuzhongduan() { EA=1; EX0=1; IT0=1; EX1=1; IT1=1; } void dingshiqizhongduan() { TMOD=0X01; TH0=0xD8; TL0=0xF0; EA=1; TR0=0; ET0=1; PT0=1;//为1时,定时器0中断为高级优先级,为0时,为低级优先级。 } void delay10ms(unsigned int c) { unsigned char a,b; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } void Display() { unsigned char i,j; for(i=0;i<4;i++) { switch(i) { case (0):LSA=0;LSB=0;LSC=0;break; case (1):LSA=1;LSB=0;LSC=0;break; case (2):LSA=0;LSB=1;LSC=0;break; case (3):LSA=1;LSB=1;LSC=0;break; } P0=DisplayData; j=10; while(j--); P0=0x00; } } void XS() { if(A==0) { DisplayData[3]=smgduan[TT/10]; DisplayData[2]=smgduan[TT%10]+0x80; DisplayData[1]=smgduan[MM/10]; DisplayData[0]=smgduan[MM%10]; } else { DisplayData[3]=smgduan[TTTT/10]; DisplayData[2]=smgduan[TTTT%10]+0x80; DisplayData[1]=smgduan[MMMM/10]; DisplayData[0]=smgduan[MMMM%10]; } } void main() { waibuzhongduan(); dingshiqizhongduan(); while(1) { XS(); Display(); } } void Int0() interrupt 0//k3 { delay10ms(100); A=0; switch(i) { case 0:TR0=1;break;//按第一次计时 case 1:TR0=0;break;//按第二次停止计时 case 2:TT=0,MM=0;break;//按第三次清零 } i++; if(i>2) { i=0; } delay10ms(10); IE0=0;//外部发生中断时其值为1 } void Time0() interrupt 1 { TH0=0xD8; TL0=0xF0; MM++; if(MM==100) { MM=0; TT++; if (TT==100) { TT=0; } } TF0=0;//为1时表示定时器T0计数溢出 } void Int1() interrupt 2//k4 { delay10ms(100); TTTT=TT; MMMM=MM; A=~A; delay10ms(10); TF1=0;//外部发生中断时其值为1 } |
参与人数 1 | 黑币 +8 | 收起 理由 |
---|---|---|
![]() | + 8 | 回帖助人的奖励! |
有问题 显示结果 初始值不是00:00 |
没问题~~~~~~~~~~~~~~~~ |