View Full Version : Giải thích giúp mình đoạn code quét phím này với
loveboom3012
27-08-2012, 11:02 PM
void keyscan()
{
RD0=1;RD1=1;RD2=1;RD3=1;
if(SW1 != 1) { key=0;SW1=1;delay_ms(150);}
if(SW2 != 1) { key=1;SW2=1;delay_ms(150);}
if(SW3 != 1) { key=2;SW3=1;delay_ms(150);}
if(SW4 != 1) { key=3;SW4=1;delay_ms(150);}
if(key != 5)
{
switch (key)
{ case 0: {mode++;key = 5;blink=1;set_blink();}
break;
case 1: {change_time();key = 5;update_1307();}
break;
case 2: {clear_status();key = 5;}
break;
}
}
}
void keyscan()
{
RD0=1;RD1=1;RD2=1;RD3=1;
if(SW1 != 1) { key=0;SW1=1;delay_ms(150);}
if(SW2 != 1) { key=1;SW2=1;delay_ms(150);}
if(SW3 != 1) { key=2;SW3=1;delay_ms(150);}
if(SW4 != 1) { key=3;SW4=1;delay_ms(150);}
if(key != 5)
{
switch (key)
{ case 0: {mode++;key = 5;blink=1;set_blink();}
break;
case 1: {change_time();key = 5;update_1307();}
break;
case 2: {clear_status();key = 5;}
break;
}
}
}
Nhớ không nhầm thì đây là đoạn code scan nút trong RTC phải không bác.Các sw1,sw2,... là các biến nằm đâu đó phía trên,khi thực hiện tới hàm keyscan() thì nó sẻ kiểm tra các biến sw1,2... xem có khác 1 k.giả sử sw1 khác 1 thì nó sẽ cho key=0;sw1=1(trả về trạng thái ban đầu để cập nhật lần sau,... sau đó quét tiếp tới các lệnh if() đằng sau,nếu thỏa thì làm giống như trên. tiếp đến kiểm tra nếu key khác 5 thì cho làm các lệnh bên trong .Giả sử lúc nảy sw1 thỏa đk(sw1 khác 1) thì biến key bay giờ = 0 , từ đó cũng thỏa đk if(key !=5) nên nhảy vào trong và gặp hàm switch ,bây giờ ứng với giá trị key =0 thì cấu trúc switch sẽ trỏ tới case 0 để thực hiện các lện trong đó. chi tiết quá fk bác.
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.