单片机:c语言实现秒表计数(按键开始,结束,重置)
程序员文章站
2022-03-10 15:09:37
实现秒表计数功能,使用定时器和外部中断实现。8号按键代表计时开始/结束,c号按键代表重置为0,为了演示方便,这里上限定为15秒。
代码中有详细的注释:
#include...
实现秒表计数功能,使用定时器和外部中断实现。8号按键代表计时开始/结束,c号按键代表重置为0,为了演示方便,这里上限定为15秒。
代码中有详细的注释:
#include sbit wei=p2^7; sbit duan=p2^6; sbit l1=p3^4; unsigned char code dofly_duanma[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};// 显示段码值0~9 unsigned char code dofly_weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 void delay(int t) { while(t--); } //第一个参数i代表控制第几个数码管,n代表要显示的数字 void screen(int i,int n) { p0=0; duan=1; duan=0; p0=dofly_weima[i]; wei=1; wei=0; p0=dofly_duanma[n]; duan=1; duan=0; } int sec; int num; int i; int flag; int main() { flag=1; i=0; num=0; sec=0; wei=0; duan=0; //开中断 ex0=1; it0=1; ex1=1; it1=1; //定时器初始化 tmod |= 0x01; ea=1; et0=1; tr0=1; l1=0; while(1) { if(num>=10) screen(3,num/10); screen(4,num%10); delay(10); screen(5,10); screen(6,sec/10); screen(7,sec%10); } return 0; } void timer_0() interrupt 1 using 1 { th0=(65536-10000)/256; tl0=(65535-10000)%256; if(flag==1) { i++; sec++; if(sec==100) //0.1ms sec=0; if(i==101)//1s { i=0; num++; if(num==15) num=0; } } } void action1() interrupt 0 { flag=!flag; } void action2() interrupt 2 { if(flag==0) { screen(7,0); num=0; sec=0; } }