就是下面的程序,我感觉是我不按k1,定时器应该也工作吧。这样的话通电后在隔一段时间再按k1,不是应该s不为0吗?
为什么隔了一段时间这个s还是。
单片机源程序如下:
- /*****定时器0与外部中断1制作计时器:够60秒则进为分,够60分则进位时*****/
- /*当按下k1键计时器开始工作,当按下k4键,定时器停止,再按一次k4,继续定省
- 当按下k3,定时器归0;再次按下k4,定时器开始定时。*/
- #include"reg52.h"
- typedef unsigned int u16;
- typedef unsigned char u8;
- sbit key1=P3^3;
- sbit key2=P3^1;
- sbit key0=P3^2;
- u16 s=0;u16 m=0;u16 h=0;
- u16 i,c;
- u16 code weixuan[8]={0xe3,0xe7,0xeb,0xef,0xf3,0xf7,0xfb,0xff};//位选数组:数码管第一个到最后一个
- u16 code smgduan[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//显示0—9最后有一个显示-
- //0 , 1 , 2, 3, 4, 5, 6, 7, 8, 9, —
- void delay_ms(u16 j)
- {
- while(j--)
- {
- u16 b;
- for(b=0;b<125;b++);
- }
- }
- void time1()
- {
- TMOD|=0x10;
- TH1=0xFC; //给定时器赋初值定时1ms
- TL1=0x18;
- ET1=1;
- TR1=1;
- EA=1;
- }
- void zhongduan1()
- {
- IT1=1;
- EX1=1;
- EA=1;
- }
- void zhongduan0()
- {
- IT0=1;
- EX0=1;
- EA=1;
- }
- void shuma()
- {
- u16 a;
- for(a=1;a<9;a++)
- {
- switch(a)
- {
- case(1):P2=weixuan[0];P0=smgduan[s%10];break;
- case(2):P2=weixuan[1];P0=smgduan[s/10];break;
- case(3):P2=weixuan[2];P0=smgduan[10];break;
- case(4):P2=weixuan[3];P0=smgduan[m%10];break;
- case(5):P2=weixuan[4];P0=smgduan[m/10];break;
- case(6):P2=weixuan[5];P0=smgduan[10];break;
- case(7):P2=weixuan[6];P0=smgduan[h%10];break;
- case(8):P2=weixuan[7];P0=smgduan[h/10];break;
- }
- delay_ms(1);
- P0=0x00;
- }
- }
- void main()
- {
- time1();
- zhongduan1();
- zhongduan0();
- if(key2==0)delay_ms(6);//按下k1,主函数中的数码管函数开始执行,定时器开始工作
- {
- if(key2==0)
- {
- while(1)
- {
- shuma();
- }
- }
- while(!key2);
- }
- }
-
- void waibu0()interrupt 0//外部中断函数0,按下k3,s,m,h都归0;
- {
- if(key0==0)
- {
- delay_ms(6);
- if(key0==0)
- {
- s=0;m=0;h=0;
- }
- }while(!key1);
- }
- void waibu()interrupt 2//外部中断函数,按下k4,定时器停止工作,再次按下k4继续工作
- {
- if(key1==0)
- {
- delay_ms(6);
- if(key1==0)
- {
- TR1=~TR1;
- }
- }while(!key1);
- }
- void time1_()interrupt 3//定时器中断函数每一秒s加1,够60s则s变为0,m加1;
- {
- TH1=0xFC; //给定时器再次赋初值
- TL1=0x18;
- i++;
- if(i==1000)
- {
- i=0;
- s++;
- if(s==60){m++;s=0;}
- if(m==60){h++;m=0;}
- }
- }
复制代码
|