Thứ Sáu, 7 tháng 12, 2012

Chống dội phím đơn

http://www.mediafire.com/?ucxgf6861ue4q2i
http://www.mediafire.com/?y1m52evtopmyitu
http://www.mediafire.com/?bs2g48z08c8exy1

3 nhận xét:

Unknown nói...

tai sao phai dem 2 lan vay thay?

Unknown nói...

Chào Tuấn Việt.
Theo mình được biết thì với nút nhấn đang ở mức 1 High(5V khi chưa nhấn phím)..Khi nhấn phím thì trạng thái mức 1 sẽ về mức 0v Low...Nhưng mà do nút nhấn gia công cơ khí nên độ nhạy của phím khi chuyển từ 5v về 0V thì phải mất khoảng 100ms.Thời gian đó ta hay gọi là nút nhấn bị nhiễu. chứ không thể từ mức logic 5V về 0V ngay lập tức.
Thế nên đoạn code có phần if(phim==0) rồi dem=100; và dem--; có nghĩa là khi có tím hiệu nhấn phím sẽ gán biến dem=100 rồi giảm nó về dem=0 để khắc phục đi hiện tượng nhiễu 100ms như mình nói ở trên...

Unknown nói...

Gửi bạn Code chống dội phím đơn mình dùng lệnh while có vẻ dễ hơn i-- hihi

#define phim RC0_bit // dinh nghja phim nhan o chan RC0 cua pic
unsigned char ma_led[10]={192,249,164,176,153,146,130,248,128,144};
char bien,so_sp;

void main()
{

trisd =0;
portd =0xff;
TRISC0_bit =1; //thiet lap input cho nutnhan
so_sp =0;
while(1)
{
if (phim==0) //dug dam if de kiem tra xem phim dc nhan chua
{
while(!phim); //khi co nhan phim thi dung yen ngay tai cho CHU Y: ham while nay co " ; "
so_sp++; // chi khi nhan phim xuog và tha phim ra thì so_sp moi +1
portd=ma_led[so_sp]; //xuat so san pham ra led......vi du so_sp o dong 17 la 4 tuc la nhan phim 4 lan nhan
// phim thi tu mang ma_led lay ra gia tri 153 tuc la co 5 so_sp
if(so_sp>=9)
{
so_sp=0;
}
}
}

}