题目要求:
目标:反应检测系统(打地鼠), 设计一个反应检测系统,N个LED指示灯(或者数码管)分别对应N个按键,在指示灯亮的时间t内按下对应按键就算命中,此时指示灯熄灭,否则算miss。
要求:完成单片机定时和中断相关设计。如果大作业没有相关设计部分,则需要单独完成此部分内容;如果大作业中包含相关部分,则只需提交这部分内容的作为平时作业。
平台:MSP430,MCS51,STM32等皆可。
分析:
该任务需要一个记录时间的变量,然后判断是否在5s内摁下按键,及时摁下则红灯亮,绿灯灭;没有在5s内摁下则绿灯长亮。(直到reset)
以下是使用energia开发环境的代码。
const int LED1 = RED_LED;
const int LED2 = GREEN_LED;
const int buttonPin = PUSH2;
unsigned long time1;
unsigned long time2;
int buttonState = 0;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
time1 = millis();
time2 = millis();
}
void loop() {
time2 = millis();
buttonState = digitalRead(buttonPin);
if (buttonState == LOW){
if((time2-time1)<5000){
while(1){
digitalWrite(LED1,HIGH) ;
digitalWrite(LED2,LOW) ;
}
}
else{
while(1){
digitalWrite(LED1,LOW) ;
digitalWrite(LED2,HIGH) ;
}
}
}
else{
digitalWrite(LED2,HIGH) ;
digitalWrite(LED1,LOW) ;
}
}