关于行列矩阵键盘扫描中断的问题,我仿真的时候无法实现P0和P2口的动态扫描,按键一按整一行都是低电平 10

下面是我的程序,我无法找出程序哪里错了,求大家帮我一下,谢谢!整个程序根本不能实现按键显示的功能,╮(╯▽╰)╭,我这几天就纠结这个了。#include<reg51.h>... 下面是我的程序,我无法找出程序哪里错了,求大家帮我一下,谢谢!整个程序根本不能实现按键显示的功能,╮(╯▽╰)╭,我这几天就纠结这个了。
#include<reg51.h>
#define uint unsigned int//定义数据类型缩写
#define uchar unsigned char
uint codeflag;//定义全局变量
uint key;
uint segflag;
uchar choosetable[6]={

0x7F,0xBF,0xDF,0xEF,0xF7,0xFB};//数码管选择
uchar table[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void delay(uint number)
{
uint i;
for(i=number;i>0;i--);
}
uint keyscan(void)
{
uchar X,Y,Z;
uint k;
uchar temp;
P1=0x0f;
temp=P1;
temp=temp&0x0F;
if(temp!=0x0f)
{
delay(5000);
if(temp!=0x0f)
{
X=temp&0x0F;
Y=temp&0xF0;
Z=X|Y; //获得键值码
switch(Z)
{
case 0x7E: k=1; break;
case 0x7D: k=2; break;
case 0x7B: k=3; break;
case 0x77: k=12; break;
case 0xBE: k=4; break;
case 0xBD: k=5; break;
case 0xBB: k=6; break;
case 0xB7: k=13; break;
case 0xDE: k=7; break;
case 0xDD: k=8; break;
case 0xDB: k=9; break;
case 0xD7: k=14; break;
case 0xEE: k=10; break;
case 0xED: k=0; break;
case 0xEB: k=11; break;
case 0xE7: k=15; break;
default:break;
}
return(k); //返回键值
}
}
}
void timer0(void) interrupt 1
{
TMOD=0x01;
TH0=(65535-500)/256;
TL0=(65535-500)%256;
P0=table[key];
}
void main(void)
{
TMOD=0X01; //初始化
TH0=(66535-500)/256;
TL0=(65535-500)%256;
TR0=1;
ET0=1;
EA=1;
segflag=0;
P2=0x00;
delay(50000);
P2=0xFF;
while(1)
{
key=keyscan(); //键值获取子程序
}
}
展开
 我来答
luxvyang
2011-05-18 · 超过17用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:40.5万
展开全部
你用的扫描法 赋值不应该是P1=0xfe吗 分4赋值检测
http://blog.sina.com.cn/s/blog_4a3946360100mvyr.html
这个博客分别介绍了 扫描和反转 好好看看吧 我也是初学者
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式