Arduino 秒表计时器:使用定时器中断和数码管显示
#include<MsTimer2.h> #include<LiquidCrystal.h> int s1,s2; int s=0; void counter(){ s++; if(s>59){ s=0; } } void display(int n){ switch(n){ case 0:digitalWrite(4,HIGH); digitalWrite(5,HIGH); digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(9,HIGH); digitalWrite(10,LOW); break;
case 1:digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(4,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
break;
case 2:digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(10,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,LOW);
digitalWrite(9,LOW);
break;
case 3:digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(10,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
break;
case 4:digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(4,LOW);
break;
case 5:digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
digitalWrite(5,LOW);
break;
case 6:digitalWrite(4,HIGH);
digitalWrite(10,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(5,LOW);
break;
case 7:digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
break;
case 8:digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
break;
case 9:digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(8,LOW);
break;
default:digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
break;
} } void setup() { // put your setup code here, to run once: MsTimer2::set(500,counter); //每1秒进入一次中断,中断函数是generatesine() MsTimer2::start(); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); pinMode(13,OUTPUT); digitalWrite(4,LOW); digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(7,LOW); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); digitalWrite(13,LOW); }
void loop() { // put your main code here, to run repeatedly: s1=s/10;s2=s%10; digitalWrite(11,LOW);digitalWrite(12,LOW);digitalWrite(13,LOW);display(s1);delay(10); digitalWrite(11,HIGH);digitalWrite(12,LOW);digitalWrite(13,LOW);display(s2);delay(10); } 这是一个计时器的程序,使用了定时器中断和数码管显示,可以实现秒表计时功能。在loop函数中,每次循环都会根据变量s的值更新数码管显示的内容,实现秒表的计时效果。同时,定时器中断每秒钟会将s加1,实现秒表的计时功能。
原文地址: https://www.cveoy.top/t/topic/nU2Z 著作权归作者所有。请勿转载和采集!