billnee
Trứng gà
Do công tắc nhấn là linh kiện cơ khí lên xuất hiện tượng dội phím khi nhấn, hoặc khi bạn giữu phím ,VĐK sẽ nhận 1 chuỗi lệnh liên tiếp ! ví dụ : việc xử lí 1 lệnh là 10us bạn giữ phím 1s VĐK sẽ xử lý 100 lệnh ! Giải pháp : dùng chống rung phần cứng hoặc phần mềm
Duới đây mình trình bày chống rung bằng phần mềm
đây là phần code của mình ! Trong đó oldsate là biến lưu giữ trạng thái của công tắc trước đó , biến currentsate lưu giữ trạng thái port input( port gắn với công tắc nhấn ).
Nguyên lí : khi trạng thái công tắc thay đổi từ 0->1 sẽ thay đưa ra phần lệnh xử lí .
cách này mình có thể dùng 1 button điều khiển nhiều led như clip sau:
code và phần mô phỏng mạch điều khiển led bằng button
button 1 : chạy hiệu ứng led cài sẵn
button 2 : nhấn lần 1 tắt, nhấn lần 2 mở led
button 3 : nhần lần 1, led 1 sáng. nhấn lần n , led n sáng
Code mình viết thì chạy nhưng chưa tối ưu lắm
mình viết bằng c cho 8951! mọi người xem sửa code giùm mình cho tối ưu nha!
Cám ơn nhìu!
View attachment Code va file mo phong.rar
Duới đây mình trình bày chống rung bằng phần mềm
Code:
currentsate1 = 0;
oldsate1 = 1;
P0 = 0xff;//trạng thái mặc định
P2 = 0xff; // của out port
while (1) //loop to scan the button state
{ if(P3_2==0)//kiểm tra xem khi chương trình chạy , button khác có đc nhấn ko
nut1(); // nếu đc nhấn , sẽ chuyển sang phần xử lí của nút nhấn đó
if(P3_4==0)
nut3();
oldsate1 = currentsate1;
currentsate1 = P3_3;
if (!oldsate1&¤tsate1) //if button is pressed and the LED is OFF then turn LED ON
{
// Phần Code xử lí khi nhấn phím
}
}
Nguyên lí : khi trạng thái công tắc thay đổi từ 0->1 sẽ thay đưa ra phần lệnh xử lí .
cách này mình có thể dùng 1 button điều khiển nhiều led như clip sau:
button 1 : chạy hiệu ứng led cài sẵn
button 2 : nhấn lần 1 tắt, nhấn lần 2 mở led
button 3 : nhần lần 1, led 1 sáng. nhấn lần n , led n sáng
Code mình viết thì chạy nhưng chưa tối ưu lắm
mình viết bằng c cho 8951! mọi người xem sửa code giùm mình cho tối ưu nha!
Cám ơn nhìu!
View attachment Code va file mo phong.rar