我用的是90C51单片机,求大侠看看这个矩形键盘 C语言程序错误,怎么不能显示键盘1234啊?求助??

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit key1 = P3^2;
sbit key2= P3^3;
sbit key3 = P3^4;
uchar key;
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void delay()
{
uint i,j;
for(i=0; i<10; i++)
for(j=0; j<10; j++)
;
}
void display( )
{
P2=6;
P0=table[key] ;
}
void keycan ()
{
uchar T ;
P1=0XFE;
T=P1;
T=T&0XF0;
if(T!=0XF0)
{
delay();
P1=0XFE;
T=P1;
T=T&0XF0;
if(T!=0XF0)
switch(T)
{
case 0xee:key=0;break;
case 0xde:key=1;break;
case 0xbe:key=2;break;
case 0x7e:key=3;break;
}
while(T!=0XFE);

}

}
void main()
{

while(1)
{
display();
keycan ();

}

}

给你改动好了!按键检测程序有问题!

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-10
{
uchar T ;
P1=0XFE;
T=P1;
T=T&0XF0;
if(T!=0XF0)
{
delay();
P1=0XFE; //此句删了
T=P1;
T=T&0XF0;
if(T!=0XF0)
{ T=P1; //加上T=P1;再次把P1口电平值付给T.再检测
switch(T)
{
case 0xee:key=0;break;
case 0xde:key=1;break;
case 0xbe:key=2;break;
case 0x7e:key=3;break;
}
while(T!=0XFE);
}

}追问

谢谢你的帮助,不过还是没有显示,数码管一个数字也没有。

第2个回答  2013-08-09
我用的是90C51单片机,求大侠看看这个矩形键盘 C语言程序错误,怎么不能显示键盘1234啊?求助??

你没输入!追问

没给说明哪个地方吗,我真心糊涂的,通过程序下载模拟运行,确实没有输入。

没给说明哪个地方吗,我真心糊涂的,通过程序下载模拟运行,确实没有输入。

没给说明哪个地方吗,我真心糊涂的,通过程序下载模拟运行,确实没有输入。

追答

哦!!

C51单片机矩形键盘的组合键怎样实现(C语言)
我经常使用扫描键盘的组合键。你看了我2008年写的这篇文章,应该就有思路了。我的这种按键处理机制,非常的好用,我所有项目中的按键处理都是基于这种思想的。

单片机矩形键盘扫描程序那里出问题了?
下面是修改后的程序:\/* 这是用的4x4无源键盘,P1口依次0x0f和0xf0,根据对应输入情况判断按键,方法可行。 *\/unsigned char dis_buf;void keyscan(void){unsigned char b,M,temp;P1=0x0f;delay(10);if(P1!=0x0f){delay(10);if(P1!=0x0f){P1=0x0f;temp=P1; \/\/switch(P1) switch...

谁能帮我看下这个程序呀,我写的51单片机,用的c语言,结果数码管就显示俩...
1,建议定义一个变量status标记当前调整的是“时”还是“分”还是秒。用一个按键控制这个变量的变化,变量的值由0变到3,再变为0。0的时候不调整,1的时候调整时,2的时候调整分,3的时候调整秒.用KEY1控制,按一下KEY1,变量status由常态0变成1,再按变成2,再按就成3,再按变回0。2,用KEY2做...

...键盘输入数字,并在LCD1602上显示出来的C语言程序
while(time--){for(i=0;i<100;i++);}}static void LCD1602_WriteByte(unsigned char value,bit dataTypedef){if(dataTypedef)LCD1602_RS_SET();elseLCD1602_RS_

单片机用3*3矩阵键盘显示数字0~9
那就选择数码管吧,假设矩阵键盘连P1口,数码管连P0口,上电后数码管显示0,然后3*3键盘控制显示1~9,程序c语言如下:\/***扫描法监测键盘,显示按键数值。我的板子是4*4的,所以没调试,有不对的地方我再给你调我看有别人也再问,不介意我去赚点分吧~~~ o(︶︿︶)o***...

...键盘输入数字并在LCD1602上显示出来的C语言程序
功能 : 延时子程序,延时时间为 1ms * x 输入 : x (延时一毫秒的个数)输出 : 无 \/ void Delay_1ms(uint i)\/\/1ms延时 { uchar x,j;for(j=0;j<i;j++)for(x=0;x<=148;x++);} \/ 名称 : delay()功能 : 延时,延时时间大概为5US。输入 : 无 输出 : 无 \/ void delay(){ _...

...C语言程序51单片机实现 功能:利用键盘和LED显示实现加减乘除的综合...
装个proteus,SAMPLES\\VSM for 8051 里面就有计算器的例子。

单片机入门,急求高手大虾指教!!!
您的水平不高我完全心中有底,其实我只要求这些学生能够掌握单片机应用开发的基本技能,用汇编和C51 写过一些基本的程序,真正动手做过一些简单的项目,然后将自己做过的项目写成比较规范的文档。我想,这种形式的“自我介绍”肯定要比让别人看您那写的千遍一律的“八股文”简历不知要强多少倍,古人言:“一叶知秋”其实...

求高手,求帮助,c51单片机课程设计(单片机密码锁)我的邮箱530490031@qq.c...
1、系统工作原理 本系统以STC89C52单片机为核心,使用4X4矩阵键盘作为数据输人方式,驱动1602显示器提示程序运行过程和*的步骤。本系统的密码判断过程如下:当使用者输人6位密码后按下BESURE键,单片机通过密码逐个比较,如果输入的6位蜜码和设定的密码完全相同,那么能成功驱动*模拟灯将锁打开。若输入6位...

...在两个数码管(加起来)上显示出来,C语言程序怎么写?
= 0x0f) \/\/有键按下 { delay(20); \/\/延时去抖动 if ((P3&0x0f)!= 0x0f) { sccode = 0xef; \/\/逐行扫描初值 while((sccode&0x01)!=0) { P3=sccode; if((P3&0x0f)!=0x0f) { recode=(P3&0x0f)|0xf0; return((~sccode)+(~recod...

相似回答
大家正在搜