- 我不懂运营
-
那就选择数码管吧,假设矩阵键盘连P1口,数码管连P0口,上电后数码管显示0,然后3*3键盘控制显示1~9,程序c语言如下:/****************************************************************************************************************扫描法监测键盘,显示按键数值。我的板子是4*4的,所以没调试,有不对的地方我再给你调我看有别人也再问,不介意我去赚点分吧~~~ o(︶︿︶)o******************************************************************************************************************/#include<reg52.h> //文件包含
#define uint unsigned int
#define uchar unsigned char //宏定义,方便使用
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90}; //数码管显示编码
uchar num,temp,num1; //全局变量定义
/************************延时子函数***********************************/void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**************************主函数*************************************/uchar keyscan(); //定义键扫描函数void display(uchar aa); //定义显示函数 void main()
{
num=0;
P0 = 0xc0 ;
while(1)
{
display(keyscan()); //调用键盘扫描子函数
}
}
/*************************显示子函数**********************************/void display(uchar aa)
{ P0=table[aa];
}/************************键盘扫描子函数*******************************/uchar keyscan()
{
P1=0xfe; //P1赋值,低位送0
temp=P1; //temp读回P1的值,
temp=temp&0xe0; //屏蔽 temp低5位,只看高3位列控是否发声变化
while(temp!=0xe0) //不等,说明第一行有键按下
{ //延时去抖
delay(5); //再检测
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0) //果真有键按下,
{ //把P1给temp,检测按键位置
temp=P1;
switch(temp)
{
case 0xf6:num=1;
break;
case 0xee:num=2;
break;
case 0xde:num=3;
break; }
while(temp!=0xe0) //一次按键检测,松手跳出循环
{
temp=P1;
temp=temp&0xe0;
}
}
} P1=0xfd; //检测第二列
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{
delay(5);
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{
temp=P1;
switch(temp)
{
case 0xf5:num=4;
break;
case 0xed:num=5;
break;
case 0xdd:num=6;
break; }
while(temp!=0xe0)
{
temp=P1;
temp=temp&0xe0;
}
}
}
P1=0xfb;
temp=P1; //检测第三列
temp=temp&0xe0;
while(temp!=0xe0)
{
delay(5);
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{
temp=P1;
switch(temp)
{
case 0xf3:num=7;
break;
case 0xeb:num=8;
break;
case 0xdb:num=9;
break; }
while(temp!=0xe0)
{
temp=P1;
temp=temp&0xe0;
}
}
}return num; //返回检测结果,}
- 猫帽
-
3*3 键盘只能是 0 - 8 !