NÚT NHẤN

thanhtdtttc

Trứng gà
mấy anh cho em hỏi nguyên lý hoạt động của cờ ?
(P2IFG & 0x03) nghĩa là sao?
ban đầu dùng câu lệnh này P2IES |=(BIT1)+(BIT0);
thì nhấn xuống là ngắt mà sao khi chuyển thành
P2IES &=(~BIT1)+(~BIT0);
thì vẫn nhấn xuống là ngắt !
vậy muốn lập trình cho thả nút ra thì ngắt thì làm sao !
 

messier

Ban Chủ Nhiệm
Cái này chắc là do rung phím. Dùng ngắt thì không khử rung phím được. Bạn thử hàn 1 con tụ 100nF vào giữa 2 chân nút nhấn xem.
 

thanhtdtttc

Trứng gà
Code:
#include <msp430.h>
 
#include "Basic_config.h"
 
#define num_0 0xC0
 
#define num_1 0xF9
 
#define num_2 0xA4
 
#define num_3 0xB0
 
#define num_4 0x99
 
#define num_5 0x92
 
#define num_6 0x02
 
#define num_7 0xF8
 
#define num_8 0x80
 
#define num_9 0x90
 
unsigned char i=0;
 
unsigned char disp[10]={num_0,num_1,num_2,num_3,num_4,num_5,num_6,num_7,num_8,num_9};
 
int main(void) {
 
WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timer
 
P1DIR |=0xFF;
 
P2DIR &=(~BIT1)+(~BIT0);
 
P2REN |=(BIT1)+(BIT0);
 
P2IE |=(BIT1)+(BIT0);
 
P2IES &=(~BIT1)+(~BIT0);
 
P2IFG &=(~BIT1)+(~BIT0);
 
_BIS_SR(GIE);
 
while(1)
 
{
 
P1OUT=disp;
 
_delay_cycles(100000);
 
}
 
}
 
#pragma vector = PORT2_VECTOR
 
__interrupt void P2_ISR(void)
 
{
 
switch (P2IFG & 0x03)
 
{
 
case BIT0 :
 
{
 
i++;
 
if (i==10) i=0;
 
break;
 
}
 
case BIT1:
 
{
 
if (i==0) i=9;
 
i--;
 
break;
 
}
 
}
 
P2IFG &=~(BIT0+BIT1);
 
}
Đã hàn con 104 vào 2 đầu nút nhấn mà không có hiệu quả :-(
 

honghiep

Cố Vấn CLB
Staff member
mấy anh cho em hỏi nguyên lý hoạt động của cờ ?
(P2IFG & 0x03) nghĩa là sao?
ban đầu dùng câu lệnh này P2IES |=(BIT1)+(BIT0);
thì nhấn xuống là ngắt mà sao khi chuyển thành
P2IES &=(~BIT1)+(~BIT0);
thì vẫn nhấn xuống là ngắt !
vậy muốn lập trình cho thả nút ra thì ngắt thì làm sao !
PxIFG là thanh ghi trạng thái bao gồm các cờ ngắt, từng bit tương ứng được bật lên khi có ngắt xảy ra.
Bạn lưu ý là (~BIT1) + (~BIT0) = 0b11111101 + 0b11111110 = 0b11111011.
Khi PxIES &= (~BIT1) + (~BIT0) thì chỉ có PxIES.3 = 0, các bit khác không đổi. Với mỗi lần reset thì PxIES không thay đổi giá trị. Vì vậy bạn cần thay dòng lệnh trên bằng PxIES &= ~(BIT0 + BIT1);
Việc thêm tụ 104 không chống rung triệt để được, vì vậy cách tốt nhất là chống rung bằng phần mềm
 

thanhtdtttc

Trứng gà
ok rồi mấy anh! đã lập trình được thả nút là chuyển kí tự !
Nếu nút nhấn tốt thì ok !
thank
 
Top