要看是共阳还是共阴的数码管。
#include<reg51.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define uchar unsigned char
#define uint unsigned int
unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
uchar keyscan(void);//键盘扫描
void delay(uint i); //演示程序
void main()
{
uchar key;
while(1)
{
key=keyscan(); //调用键盘扫描,
switch(key)
{
case 0x7e:P0=dofly[0];break;//0 按下相应的键显示相对应的码值
case 0x7d:P0=dofly[1];break;//1
case 0x7b:P0=dofly[2];break;//2
case 0x77:P0=dofly[3];break;//3
case 0xbe:P0=dofly[4];break;//4
case 0xbd:P0=dofly[5];break;//5
case 0xbb:P0=dofly[6];break;//6
case 0xb7:P0=dofly[7];break;//7
case 0xde:P0=dofly[8];break;//8
case 0xdd:P0=dofly[9];break;//9
case 0xdb:P0=dofly[10];break;//a
case 0xd7:P0=dofly[11];break;//b
case 0xee:P0=dofly[12];break;//c
case 0xed:P0=dofly[13];break;//d
case 0xeb:P0=dofly[14];break;//e
case 0xe7:P0=dofly[15];break;//f
}
}
}
uchar keyscan(void) //键盘扫描函数,使用行列反转扫描法
{
uchar cord_h,cord_l;//行列值中间变量
P1=0x0f; //行线输出全为0
cord_h=P1&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
delay(1000); //去抖
if((P1&0x0f)!=0x0f)
{
cord_h=P1&0x0f; //读入列线值
P1=cord_h|0xf0; //输出当前列线值
cord_l=P1&0xf0; //读入行线值
return(cord_h+cord_l);//键盘最后组合码值
}
}return(0xff); //返回该值
}
void delay(uint i) //延时函数
{
while(i--);
}
追问是共阳的
追答我这好像是共阴的,只要把unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
等依次改一下就可以了如0x3f改为1100 0000即0Xc0
明白了,谢谢咯,大哥
单片机p1口按4*4矩阵键盘、p0口按共阳LED数码管,按下相应的键,数码管显...
P1=0x0f; \/\/行线输出全为0 cord_h=P1&0x0f; \/\/读入列线值 if(cord_h!=0x0f) \/\/先检测有无按键按下 { delay(1000); \/\/去抖 if((P1&0x0f)!=0x0f) { cord_h=P1&0x0f; \/\/读入列线值 P1=cord_h|0xf0; \/\/输出当前列线值 cord_l=P1&0xf0; \/\/读入行线值 return(cord_h+cord_l...
使用单片机的P1口扩展4*4键盘矩阵,实现在键盘上每按一个数字键用静态...
P1.0~P1.3为列线,P1.4~P1.7为行线;列线和行线的交叉点接按键。先在列线上依次输出1,然后再在行线上读取;可根据行线的输入和列线的输出来判定是哪个按键按下。具体的显示部分,应该很简单吧。
51单片机矩阵4*4键盘程序,P0口接一个数码管,P2口接矩阵键盘
case 0x7e:return 1 ;break;\/\/0 按下相应的键显示相对应的码值 case 0x7d:return 2 ;break;\/\/1 case 0x7b:return 3 ;break;\/\/2 case 0x77:return '+';break;\/\/3 case 0xbe:return 4 ;break;\/\/4 case 0xbd:return 5 ;break;\/\/5 case 0xbb:return 6 ;break;\/\/6 cas...
单片机原理及应用张刚毅数码管显示4乘4矩阵键盘键号按下时,显示对应的...
P0 = 0xbf;P2 = 0x7f; \/\/数码管显示"-"P3 = 0xff;while(1){ keydown();} }
用c51单片机按下4*4矩阵按键,数码管显示0-F,能正常显示,只是0号和7...
P0=0xfe;if(H1==0){P2=0x3f;} \/\/按键盘S1,显示"0"if(H2==0){P2=0x06;} \/\/按键盘S2,显示"1"if(H3==0){P2=0x5b;} \/\/按键盘S3,显示"2"if(H4==0){P2=0x4f;} \/\/按键盘S4,显示"3"P0=0xfd;if(H1==0){P2=0x66;} \/\/按键盘S5,显示"4"if(H2==0){P2=0x6d;} \/\/...
汇编语言设计的单片机4*4矩阵键盘
实验内容:键盘上对应有16个按键,从0到F,按下相应的键会在数码管上显示相应的数字,其中K0到K15是采用4*4的方式连接的 \/ ;; 0 1 2 3 ---P20 ; 4 5 6 7 ---P21 ; 8 9 A B ---P22 ; C D E F ---P23 ; | | |...
单片机中的4×4矩阵键盘的键值怎么求?
矩阵键盘又称为行列式键盘,它是用4条I\/O线作为行线,4条I\/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I\/O口的利用率。由于单片机IO端口具有线与的功能,因此当任意一个按键按下时,行和...
单片机与矩阵键盘接口电路设计实验报告
将单片机P2口与七段数码管连接,当按下矩阵键盘任意键时,数码管显示该键所在的键号。二:电路图三:程序流程图四:程序org0000hljmpmainmain:movp1,#0fh;列线输出0,行线设为输入mova,p1;读P1口anla,#0fh;屏蔽高4位,留下行线状态cjnea,#0fh,look;有按键按下,转lookret;无按键按下,...
C51 4*4键盘扫描程序(c语言)
键盘为4*4矩阵式连接,一共有16个按键。 工作原理为。P1端的低四位为列,高四位行。所先置低四位为低,高四位为高,当有按键按下时高四位就会有某位被拉低。只要判断高四位不为全高就说明有按键按下。判断有按键按下后就要判断是某位按下的,方法为,选将高四位的某一位置低。判断低四位...
proteus仿真4x4矩阵键盘中断方式扫描数码管显示
在Proteus仿真中,实现4x4矩阵键盘中断方式扫描并控制数码管显示,主要步骤包括:1. **硬件连接**:将4x4矩阵键盘的行线连接到单片机的某个I\/O口(如P1.0~P1.3),列线连接到另一个I\/O口(如P1.4~P1.7)。数码管的段选线连接到单片机的另一个I\/O口(如P0),用于显示按键对应的字符。2...