STC单片机矩阵键盘的问题

我用的是4位显示的数码管,P0控制4个位选,P1控制段选。P3用来检测4×4矩阵键盘的哪个键被按下,因为我没有矩阵键盘,所以用了一根导线,一头碰P3.0~P3.3中的任意... 我用的是4位显示的数码管,P0控制4个位选,P1控制段选。
P3用来检测4×4矩阵键盘的哪个键被按下,因为我没有矩阵键盘,所以用了一根导线,一头碰P3.0~P3.3中的任意一个接口,另一头碰P3.4~P3.7中的任意接口,但是没有数字显示。
我用的是STC12C5A60S2单片机
#include<STC12C5A60S2.h>
char code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x00,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void delayms(int xms)
{
int i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
void display(char num)
{
P1=table[num]; //段选数据
}
void matrixkeyscan()
{
char temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0xfd;
{......};
P3=0xfb:
{......};
P3=0xf7;
{......};

void main()
{
P0M1 = 0x00;//推挽输出的定义
P0M0 = 0x0f;//推挽输出的定义
P0=0x0f;
while(1)
{
matrixkeyscan();//不停调用键盘扫描程序
}
}
程序有点长不能全复制上去,中途对于P3的4次检测只显示了第一个“P3=0xfe”将第一行线设置为低电平,后面三行的检测跟这个一样。
我实际的现象是我碰接P3口,灯是一点儿也不亮,连个闪光都没!有TX有单片机在身边的能试一下帮我解决这个问题吗?不要有让我检查硬件数码管单片机好坏,延迟时间大小的回答,谢谢!
展开
 我来答
落叶细无声oo
2013-09-10 · 超过12用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:31.4万
展开全部
TX开发板上的段选dula=P2^6,位选wela=P2^7;你的显示函数有问题,void display(char num){P1=table[num]; //段选数据}
void display(char num)
{
wela=1;P0=0xfe;wela=0;P0=0xff;dula=1;P0=table[num];dula=0;}你换成这个试试,TX开发板是用P0口作为输出数码管的显示数字的

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
满江红A8sW
2013-09-10
知道答主
回答量:41
采纳率:100%
帮助的人:21.4万
展开全部
我玩过TX,上面是带矩阵键盘的啊,你确定你的数码管驱动那块和TX的电路一样吗?如果不一样不能照搬程序的。建议:驱动数码管芯片是否选用的C573,观察相应的显示函数里位选是否选通。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GUEL86
2013-09-10 · TA获得超过5855个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2667万
展开全部

一个很简单的 矩阵键盘4X4LED显示  仿真实例,可以参考一下。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式