2、電平位選)數(shù)碼管的位選信號,從低到高對應(yīng)8個數(shù)碼管charNumberCode[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};//用于設(shè)置(共陰極)數(shù)碼管的段選信號,從0~f共16個數(shù)值intn=num,i=0;while(n>=0){P0=0xff;//關(guān)閉數(shù)碼管當(dāng)前位的顯示,共陽極關(guān)閉顯示段選信號P2=BitSet[i];//選中數(shù)碼管對應(yīng)的位P0=~NumberCode[n%10];
3、//向數(shù)碼管的對應(yīng)位中送入該位數(shù)值對應(yīng)的段選信號delay_ms(2);//每一位延時顯示2msP2=0xff;//關(guān)閉所有位選i++;//位標(biāo)記n=n/10;//取數(shù)值n的商if(n==0)break;//當(dāng)取得的商為0時退出while循環(huán)}}intMatrixKeyscan()//4*4矩陣鍵盤鍵值掃描函數(shù),返回按下的第一個按鍵對應(yīng)的鍵值{charkey[16]=//行掃描對應(yīng)的鍵值數(shù)組{0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0x
4、e7,0xd7,0xb7,0x77};charline[4]={0xfe,0xfd,0xfb,0xf7};//行掃描值,將各行信號分別置0,列值全1chartmp;inti,j,k=-1;for(i=0;i<4;i++){P1=line[i];//將行掃描值逐個送至P1端口tmp=P1;//再讀取P1口的值if(tmp!=line[i])//若讀取的數(shù)值不等于送入的行掃描值,表示有按鍵被按下{delay_ms(10);//延時,重新讀取判斷,確認(rèn)有鍵按下tmp=P1;if(tmp!=line[i]){for(j=0
5、;j<4;j++)//當(dāng)有鍵按下時,根據(jù)變化后的P1端口值確定對應(yīng)的行列值i和j,并給k賦予鍵值{if(tmp==key[4*i+j]){k=4*i+j;returnk;}}}while(tmp!=line[i])tmp=P1;//(等待按鍵釋放)循環(huán)直到讀取的P1端口值與行掃描值相同,此時按鍵釋放}}returnk;//返回掃描到的鍵值}voidmain(){intnum=0,tmp;while(1){tmp=MatrixKeyscan();//掃描鍵盤判斷是否有按鍵按下if(tmp!=-1)num=tmp;//
6、當(dāng)有按鍵按下時,將鍵值賦給num(無鍵按下時掃描鍵盤返回值-1)display(num);//數(shù)碼管顯示按下按鍵對應(yīng)的數(shù)值}}