#include<reg52.h>
#include<74hc595.h>
#include<boardinit.h>
#include<delay.h>
#define uchar unsigned char
#define uint unsigned int
sbit wela=P2^6;
sbit dula=P2^5;
uchar num,temp;
uchar code table[]=
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void display(uchar aa)
{
dula=1;
P0=table[aa];
dula=0;
}
void keycan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0x7e:
num=0;
break;
case 0xbe:
num=1;
break;
case 0xde:
num=2;
break;
case 0xee:
num=3;
break;
}
while(temp!=0xf0);
{
temp=P3;
temp=temp%0xf0;
}
display(num);
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0x7d:
num=4;
break;
case 0xbd:
num=5;
break;
case 0xdd:
num=6;
break;
case 0xed:
num=7;
break;
}
while(temp!=0xf0);
{
temp=P3;
temp=temp%0xf0;
}
display(num);
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0x7b:
num=8;
break;
case 0xbb:
num=9;
break;
case 0xdb:
num=10;
break;
case 0xeb:
num=11;
break;
}
while(temp!=0xf0);
{
temp=P3;
temp=temp%0xf0;
}
display(num);
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0x77:
num=12;
break;
case 0xb7:
num=13;
break;
case 0xd7:
num=14;
break;
case 0xe7:
num=15;
break;
}
while(temp!=0xf0);
{
temp=P3;
temp=temp%0xf0;
}
display(num);
}
}
}
void main()
{
boardinit();
dula=1;
P0=0xff;
dula=0;
P0=0x00;
wela=1;
wela=0xff;
wela=0;
while(1)
{
keycan();
}
}
这个没错,正确的初始化程序
追答在你给出的程序里面没有定义
追问头文件都没问题
追答变量的初值和运行之后的清零呢
矩阵键盘检测,求解,程序自己写的,按键没反应。
void yanshi(uintz);\/\/声明延时子函数void main()\/\/进入主程序{ P0=0xc0; wela=0; while(1) { P2=0xfe;\/\/定义键盘第1行 aa=P2;\/\/变量temp=P2口 aa=aa&0xf0;\/\/用于temp和temp&0xf0向于 while(aa!=0xf0)\/\/判断是否有键按下(temp!不等于=0xf0) { yanshi(5);\/\/延时5毫秒 aa=P2;\/\/tem...
矩阵键盘按键不灵敏是什么问题?
一般的键盘去抖程序是 检测--延时--检测,第一次检测都可以检测一行或一列,第二次读按键值;如果逻辑正确的话,不应该有哪个按键不响应。先自己查查。没看懂你的程序,全部程序都贴出来看看。
使用如图矩阵键盘,ATMEGA16A单片机,键盘没有反应怎么解决?
一般来说,如图的按键相当于开关,而开关是没有电阻的。你的试验已经说明开关有电阻,这表明开关已经失效。
51单片机矩4X4阵键盘的第一排按键没反应。
你仔细看一下资料就会发现这个问题是开发板的问题,就是他用到的一个芯片会把单片机P3口的某个引脚置高,导致键盘不好使,解决方法是下载完程序之后拔掉下载USB线,只保留供电USB线再做测试
单片机的矩阵键盘检测,扫描程序已经写出来了,怎么显示呢
MOV A,R1 ;R1中是要显示的十进制 MOV DPTR,#TABEL ;使DPTR 指向TABEL(TABEL 中 是10进制对应的16进制表格)MOVC A,@A+DPTR;查表 MOV P2,A ;此时A中即是 16进制 ;---LED的 共阴码表--- TABEL:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0123456789 DB 77H,7CH...
解释一下单片机实验中“抖动”,矩阵键盘实验按键后不能及时响应是不是...
不是抖动,而是 延时!!抖动引起的现象是:①太灵敏,按一下,似乎按了上百次。②误动作,没按,自己就动了。延时引起的现象是:①反应迟钝,按了没反应,或者按久一点才能动。②相互影响,这个的按键按下,其他按键就用不了了。
51单片机矩阵键盘检测方面的问题
第一个问题,应该是考虑如果先开锁存器,在那一时刻,P0的值还是上一次给P0赋的值,下在一条语句才将这次的值给P0,这样会造成数码管的余辉,静态显示的时候,因为太快看不到,动态显示时,就会比较明显了。第二个问题他的程序应该检测的是高四位,是否被拉低,因为temp和0xf0与,低四位不管是...
单片机矩形键盘扫描程序那里出问题了?
=0xf0)) delay(10);\/\/检测按键抬起 (b<50)可能是对最长检测时间做限制 但是在所给程序部分没有定义和副初值 所以添加变量定义语句{dis_buf=M; \/\/键值入显示缓存dis_buf=dis_buf&0x0f;}}}\/\/通过循环调用keyscan得到按键信息其实这种键盘,可以先计算出键码码值,再通过查表获取键值,这样...
矩阵键盘的按键识别方法
1、判断键盘中有无键按下 将全部行线P1.4-P1.7置低电平,当然P1.0-P1.3为高电平(或许芯片内部已经将这些引脚它上拉),然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键...
矩阵键盘检测求助
while(temp!=0xf0) \/\/等待按键释放 { temp=P3; temp=temp&0xf0; display(bai,shi,ge); \/\/--加上这句 } 等待释放,另外还有几处,每一处,都应该加上显示。