标题:
矩阵键盘控制流水灯(stc89c52rc单片机)
[打印本页]
作者:
hjr999
时间:
2018-8-28 20:46
标题:
矩阵键盘控制流水灯(stc89c52rc单片机)
键盘控制流水灯.rar
(25.65 KB, 下载次数: 38)
2018-8-28 20:37 上传
点击文件名下载附件
矩阵键盘控制流水灯
下载积分: 黑币 -5
刚开始学单片机,写了个小程序。用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;
}
复制代码
作者:
LiiK
时间:
2021-2-16 11:24
你好,keyNum的判断是根据什么的
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1