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...
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; } } }
3 nhận xét:
tai sao phai dem 2 lan vay thay?
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...
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;
}
}
}
}
Đăng nhận xét