LEDに問題があります。入力として2つのボタン、出力として3つのLEDと7つのセグメント表示。 選択ボタンを1回押すと、7セグメント表示で "1"が観測されます。確認ボタンを押すと、確認ボタンを押した後、緑色LEDが1秒後にになります。CCSでのポート割り込みとタイマーの使用
ボタンを2回押すと、7セグメント表示で「2」が観察されます。確認ボタンが押されると、イエローLEDが点灯して2秒後にと表示され、その後確認ボタンが押されます。
ボタンを3回押すと、7セグメント表示で「3」が観察されます。確認ボタンが押されると、3秒後に赤色LEDが点灯し、と表示され、その後確認ボタンが押されます。
私はポート割り込みとタイマーを使用する必要があります。 1,2秒後と3秒後にLEDがどのように点灯するのか分かりませんでした。私のコードは機能していますが、確認ボタンを押すとすぐにオンになり、時には遅れることがあります。わかりません。また、セグメントも遅れています。ここに私のコードは次のとおりです。
#include <msp430.h>
#define BUTTON1 0x04 //confirmation Button P1.2
#define BUTTON2 0x02
#define Yellow (P1OUT |= 0x10)
#define Red (P1OUT |= 0x20)
#define Green (P1OUT |= 0x08)
#define LedOff (P1OUT &= ~0x38)
int counter =0;
int main(void) {
WDTCTL = WDTPW|WDTHOLD;
P2SEL &= ~0x40;
P1DIR |= (BIT5|BIT4|BIT3); // Set the LEDs on P1.5, P1.4, P1.3 as outputs
P1OUT = 0;
P2DIR |= (0x01|0x02|0x04|0x08|0x10|0x20|0x40); //segments
P1OUT = LedOff;
P2OUT = ~0x7F;
P1IE =BUTTON2|BUTTON1; // interrupt enable
P1IES=BUTTON2|BUTTON1; //interrupt edge select from high to low
P1IFG=0x00;
BCSCTL3 |= LFXT1S_2;
TACTL = TASSEL_2|ID_1|MC_3|TAIE|TACLR;
TACCR0 = 3000;
_enable_interrupts();//enable all interrupts
LPM0;
}
#pragma vector=TIMER0_A1_VECTOR
__interrupt void bahar(void){
if(P1IFG==BUTTON2){
P2OUT = ~0x7F;
counter++;
if(counter==1){
P2OUT = 0x06; // 1
}
if (counter == 2) {
P2OUT = 0x5b; // 2
}
if (counter == 3) {
P2OUT = 0x4F; // 3
counter =0;
}
}
if(P1IFG==BUTTON1){
P1OUT =LedOff;
if (counter == 1) {
Green;
}
if (counter == 2) {
Yellow;
}
if (counter == 0) {
Red;
}
// TACTL |= TACLR;
}
P1IFG=0x00; //clear the interrupt flag
}