![]() |
譚1234 發表于 2025-3-15 08:25 為啥鍵值要加大 |
這寫法看著都頭疼 sbit R1 = P3^0; sbit R2 = P3^1; sbit R3 = P3^2; sbit R4 = P3^3; sbit C1 = P4^4; sbit C2 = P4^2; sbit C3 = P3^5; sbit C4 = P3^4; uchar Key_Open(void) { uchar key = 0; C1 = 0;C2 = 1;C3 = 1;C4 = 1; if(R1 == 0) key = 7; if(R2 == 0) key = 6; if(R3 == 0) key = 5; if(R4 == 0) key = 4; C1 = 1;C2 = 0;C3 = 1;C4 = 1; if(R1 == 0) key = 11; if(R2 == 0) key = 10; if(R3 == 0) key = 9; if(R4 == 0) key = 8; C1 = 1;C2 = 1;C3 = 0;C4 = 1; if(R1 == 0) key = 15; if(R2 == 0) key = 14; if(R3 == 0) key = 13; if(R4 == 0) key = 12; C1 = 1;C2 = 1;C3 = 1;C4 = 0; if(R1 == 0) key = 19; if(R2 == 0) key = 18; if(R3 == 0) key = 17; if(R4 == 0) key = 16; return key; } |
跳線帽沒接到矩陣? |
你這個暫時看不出問題,我附上我之前參加藍橋杯時候的矩陣鍵盤代碼#include "ALL.H" #include "REG52.H" /*矩陣鍵盤編號 1 2 3 4 P3_0 5 6 7 8 P3_1 9 10 11 12 P3_2 13 14 15 16 P3_3 P4_4 P4_2 P3_5 P3_4 */ unsigned char Matric_Scan(){ unsigned char Num=0; P3_0=0; P3_1=P3_2=P3_3=1; P4_4=P4_2=P3_5=P3_4=1; if(P4_4==0){ Num=1; } else if(P4_2==0){ Num=2; } else if(P3_5==0){ Num=3; } else if(P3_4==0){ Num=4; } P3_1=0; P3_0=P3_2=P3_3=1; P4_4=P4_2=P3_5=P3_4=1; if(P4_4==0){ Num=5; } else if(P4_2==0){ Num=6; } else if(P3_5==0){ Num=7; } else if(P3_4==0){ Num=8; } P3_2=0; P3_0=P3_1=P3_3=1; P4_4=P4_2=P3_5=P3_4=1; if(P4_4==0){ Num=9; } else if(P4_2==0){ Num=10; } else if(P3_5==0){ Num=11; } else if(P3_4==0){ Num=12; } P3_3=0; P3_0=P3_1=P3_2=1; P4_4=P4_2=P3_5=P3_4=1; if(P4_4==0){ Num=13; } else if(P4_2==0){ Num=14; } else if(P3_5==0){ Num=15; } else if(P3_4==0){ Num=16; } return Num; } void Matric_Show_Num(){ if(Matric_Scan()==1){ Display(1,1); } else if(Matric_Scan()==2){ Display(1,2); } else if(Matric_Scan()==3){ Display(1,3); } else if(Matric_Scan()==4){ Display(1,4); } else if(Matric_Scan()==5){ Display(1,5); } else if(Matric_Scan()==6){ Display(1,6); } else if(Matric_Scan()==7){ Display(1,7); } else if(Matric_Scan()==8){ Display(1,8); } else if(Matric_Scan()==9){ Display(1,9); } else if(Matric_Scan()==10){ Display(1,10); } else if(Matric_Scan()==11){ Display(1,11); } else if(Matric_Scan()==12){ Display(1,12); } else if(Matric_Scan()==13){ Display(1,13); } else if(Matric_Scan()==14){ Display(1,14); } else if(Matric_Scan()==15){ Display(1,15); } else if(Matric_Scan()==16){ Display(1,16); } } 應該會有幫助 |
代碼上看,沒啥問題,你是現象出問題了還是什么 |
這個不好回答!代碼跟硬件需要配合,原理圖都沒有,我個人才疏學淺,不懂回答。 |
這個程序用在51內核的MCU具有普適性
|