標(biāo)題:
矩陣鍵盤控制流水燈(stc89c52rc單片機(jī))
[打印本頁]
作者:
hjr999
時(shí)間:
2018-8-28 20:46
標(biāo)題:
矩陣鍵盤控制流水燈(stc89c52rc單片機(jī))
鍵盤控制流水燈.rar
(25.65 KB, 下載次數(shù): 38)
2018-8-28 20:37 上傳
點(diǎn)擊文件名下載附件
矩陣鍵盤控制流水燈
下載積分: 黑幣 -5
剛開始學(xué)單片機(jī),寫了個(gè)小程序。用p0操作流水燈,用p2讀取鍵盤還不太熟悉,如有謬誤麻煩指正,跟我一樣的新手可以參考一下
#include <reg52.h>
/*
R1C1\C2\C3\C4==>LED1\2\3\4
R2C1\C2\C3\C4==>LED5\6\7\8
P2==>鍵盤
P0==>流水燈
*/
//functions
void delayms(unsigned int);
int keyScan();
//VARIABLES
int a,keyNum;
unsigned char num=0;
unsigned char led;
unsigned char lightUp[]={
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
void main()
{
led=0xff;
while(1) {
//light up led
P0=led;
P2=0xfe; //row1
keyNum=keyScan();
if(keyNum==0){
P2=0xfd; //row2
keyNum=keyScan();
if(keyNum==0){
P2=0xfb; //row3
keyNum=keyScan();
if(keyNum==0){
P2=0xf7; //row4
keyNum=keyScan();
}
}
}
if((keyNum<=7)&&(keyNum>0)){
led=lightUp[keyNum-1];
//delayms(100);
}
}
}
void delayms(unsigned int xms)
{
unsigned int i,j;
for(i=0;i<xms;i++)
{
for(j=0;j<110;j++);
}
}
int keyScan(){
int key=0;
unsigned char temp;
temp=P2&0xf0;
if(temp!=0xf0){
delayms(10);
temp=P2&0xf0;
if(temp!=0xf0){
temp=P2;
//LED=0; //LIT LED
switch(temp){
case 0xee: //search low level column in row1
key=1;
break;
case 0xde:
key=2;
break;
case 0xbe:
key=3;
break;
case 0x7e:
key=4;
break;
case 0xed: //row2
key=5;
break;
case 0xdd:
key=6;
break;
case 0xbd:
key=7;
break;
case 0x7d:
key=8;
break;
case 0xeb: //row3
key=9;
break;
case 0xdb:
key=10;
break;
case 0xbb:
key=11;
break;
case 0x7b:
key=12;
break;
case 0xe7: //row4
key=13;
break;
case 0xd7:
key=14;
break;
case 0xb7:
key=15;
break;
case 0x77:
key=16;
break;
}
}
while(temp!=0xf0){ //wait till release
temp=P2;
temp=temp&0xf0;
}
}
return key;
}
復(fù)制代碼
作者:
LiiK
時(shí)間:
2021-2-16 11:24
你好,keyNum的判斷是根據(jù)什么的
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1