制作一个秒表计时器,记录0-15秒时间。要求精准,可控。
要求:
1.能够用按键控制秒表开始
2.能够用按键控制秒表停止
3.能够用按键控制秒表清零
4.使用定时器控制时间,要求精确。
5.使用1个数码管和多个按键实现功能。
第一步:先给电路图加两个按钮,如下图。
第二步:根据需求编写代码,并且运行。
1 #include<reg52.h> 2 #define LED P0 3 sbit key1 = P1^0; //开始,暂停按钮 4 sbit key2 = P1^1; //复位按钮 5 unsigned int i = 0; 6 unsigned char n = 0; 7 unsigned char NUM[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,\ 8 0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E}; 9 void INT_T0(void) 10 { 11 TMOD = 0X01; //打开定时器0,使用模式1定时 12 TH0 = 0XFC; 13 TL0 = 0X18; //初始值 14 EA = 1;//打开总开关 15 ET0 = 1;//打开中断T0开关 16 } 17 void main(void) 18 { 19 INT_T0(); 20 TR0 = 0; //定时功能打开 21 LED = NUM[0]; 22 while(1) 23 { 24 if(key1 ==0) 25 { 26 TR0 = 1; //判断按键按下 ,则打开定时计时功能 27 } 28 else 29 { 30 TR0 = 0; //判断按键松开,则断开计时功能 31 } 32 if(key2 == 0) 33 break; //跳出循环,计时归零 34 } 35 } 36 void time0(void) interrupt 1 37 { 38 TH0 = 0XFC; 39 TL0 = 0X18; //初始值 40 if(i < 1000) 41 { 42 i++; 43 } 44 else 45 { 46 P0 = ~NUM[n]; 47 if(n<16) 48 { 49 n++; 50 } 51 else 52 { 53 n=0; 54 } 55 i = 0; 56 } 57 }
第三步:烧入电路图
注意事项(按着按键1不放才会计时,松开则不会计时,按一下按键2则是复位)