求51单片机矩阵4*4键盘程序,P0口接一个数码管,P3口接矩阵键盘,C语言的

如题所述

#include<reg51.h>
unsigned char keyval,keynum=0;
unsigned char distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void t1isr() interrupt 3
{
unsigned char sccode,recode;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
P3=0x0f; //发0扫描,列线输入
if ((P3 & 0x0f) != 0x0f)keynum++; //有键按下
else keynum=0;
if(keynum>5) //按键保持在5次中断以上
{
keynum=0;
sccode = 0xef; //逐行扫描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
getkey((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
getkey(0);
}
void getkey(unsigned char key)
{
if(key==0){keyval=0xff;return;}
switch(key)
{
case 0x11:keyval=7;break;
case 0x12:keyval=4;break;
case 0x14:keyval=1;break;
case 0x18:keyval=10;break;
case 0x21:keyval=8;break;
case 0x22:keyval=5;break;
case 0x24:keyval=2;break;
case 0x28:keyval=0;break;
case 0x41:keyval=9;break;
case 0x42:keyval=6;break;
case 0x44:keyval=3;break;
case 0x48:keyval=11;break;
case 0x81:keyval=12;break;
case 0x82:keyval=13;break;
case 0x84:keyval=14;break;
case 0x88:keyval=15;break;
default:keyval=0xff;break;
}
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(keyval!=0xff)P0=distab[keyval];
}

}来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
无其他回答

51单片机矩阵4*4键盘程序,P0口接一个数码管,P2口接矩阵键盘
while((KeyPort&0xf0)!=0xf0);\/\/等待松开并输出 return(cord_h+cord_l);\/\/键盘最后组合码值 } }return(0xff); \/\/返回该值 } \/*--- 按键值处理函数,返回扫键值 可以根据需要改变返回值 | 1 | 2 | 3 | + | | 4 | 5 | 6 | - | | 7 | 8 | 9 | * | | 0 | . ...

C51 4*4键盘扫描程序(c语言)
键盘为4*4矩阵式连接,一共有16个按键。 工作原理为。P1端的低四位为列,高四位行。所先置低四位为低,高四位为高,当有按键按下时高四位就会有某位被拉低。只要判断高四位不为全高就说明有按键按下。判断有按键按下后就要判断是某位按下的,方法为,选将高四位的某一位置低。判断低四位是...

单片机中的4×4矩阵键盘的键值怎么求?
while(1) { P1=0xf0; key_l=P1; \/\/读P1端口的值 key_l=key_l&0xf0; \/\/令低4位置位为0 if(key_l!=0xf0) \/\/判断是否有按键按下 { delay_50us(100)

急求4*4矩阵键盘控制数码管显示! 51单片机
共阳极数码管 如果是共阴极数码管则 display()里的P0=0xff;改为P0=0x00;P2=smg_we[a];改为P2=~smg_we[a];P0=dsp_code_ca[xianshi[a]];改为P0=~dsp_code_ca[xianshi[a]];即可 include<reg51.h> define uchar unsigned char define uint unsigned int uchar key_char,key_char0;ui...

89C51单片机的p3口接一个共阳极的数码管
\/\/电路说明如下。\/\/单片机:使用51系列兼容的即可;\/\/4×4矩阵键盘:接在P1口;\/\/两位数码显示器: P0口输出七段码,P2口输出位选码。\/\/=== \/\/C语言程序如下。\/ 文件名: KEY_LED.c 功能 : 对4×4矩阵键盘进行输出,在数码管后两位显示按键值。\/ include <reg51.h> include <intrins.h...

51单片机P0口接矩阵键盘可以吗?
键盘输入电路是这样:如果是IO——按键——地线,也就是不加上拉电阻的接法,接到P0口后,按键1次,P0口自动锁存住低电平,即使没有上拉电阻,但由于接了mos管电路(如图),松开按键后,VCC的电流不会导通到地线,所以IO口会恢复高电平,可以进行下次逻辑判断。结论:P0口只有在用于IO驱动时才需要...

51单片机,4*4矩阵键盘,八位数码管
51单片机,4*4矩阵键盘,八位数码管,仿真实例可以参考一下。include<reg51.h> define uchar unsigned char uchar temp;int key1,key,disbuf;\/\/ 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x...

关于51单片机矩阵键盘的问题。
(1)P3口是准双向IO口(注意与双向IO口的区别),它 的硬件结构决定着,读取之前先写1,再读取,读取的结果才可能是正确的,你可以区域查查书。(2)4X4 矩阵键盘的8根线直接连在IO上,而独立按键有一根线固定是接地的,这就意味着必须采取扫面或者线反转的方法。比如其中一根行线赋0,相当于...

单片机p1口按4*4矩阵键盘、p0口按共阳LED数码管,按下相应的键,数码管显...
2016-10-24 求51单片机矩阵4*4键盘程序,P0口接一个数码管,P3口接... 2017-12-23 使用p1.0-p1.7口实现4*4键盘输入,并用p0口和p2... 2011-03-27 89c51单片机的P3口接一个共阳极的数码管,P1口接4*4... 2010-08-17 4*4矩阵键盘的扩展程序,P0口,线反转法,可是运行程序时,...更多...

数码管显示4×4键盘矩阵按键
1. 数码管的基本功能:数码管是一种电子显示设备,其基本功能是以数字形式展示信息。它可以显示多种数字或字符,常用于计算器、仪表板等场合。2. 4×4键盘矩阵的概念:4×4键盘矩阵表示一个包含16个按键的键盘布局,每个按键对应一个特定的行列坐标。通过检测按键的按下状态,可以获取用户的...

相似回答