单片机用3*3矩阵键盘显示数字0~9

如题所述

那就选择数码管吧,假设矩阵键盘连P1口,数码管连P0口,上电后数码管显示0,然后3*3键盘控制显示1~9,程序c语言如下:/****************************************************************************************************************扫描法监测键盘,显示按键数值。我的板子是4*4的,所以没调试,有不对的地方我再给你调我看有别人也再问,不介意我去赚点分吧~~~ o(︶︿︶)o******************************************************************************************************************/#include<reg52.h> //文件包含
#define uint unsigned int
#define uchar unsigned char //宏定义,方便使用
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90}; //数码管显示编码
uchar num,temp,num1; //全局变量定义
/************************延时子函数***********************************/void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**************************主函数*************************************/uchar keyscan(); //定义键扫描函数void display(uchar aa); //定义显示函数 void main()
{
num=0;
P0 = 0xc0 ;

while(1)
{
display(keyscan()); //调用键盘扫描子函数
}
}
/*************************显示子函数**********************************/void display(uchar aa)
{ P0=table[aa];

}/************************键盘扫描子函数*******************************/uchar keyscan()
{
P1=0xfe; //P1赋值,低位送0
temp=P1; //temp读回P1的值,
temp=temp&0xe0; //屏蔽 temp低5位,只看高3位列控是否发声变化
while(temp!=0xe0) //不等,说明第一行有键按下
{ //延时去抖
delay(5); //再检测
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0) //果真有键按下,
{ //把P1给temp,检测按键位置
temp=P1;
switch(temp)
{
case 0xf6:num=1;
break;
case 0xee:num=2;
break;
case 0xde:num=3;
break; }
while(temp!=0xe0) //一次按键检测,松手跳出循环
{
temp=P1;
temp=temp&0xe0;
}
}
} P1=0xfd; //检测第二列
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{
delay(5);
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{
temp=P1;
switch(temp)
{
case 0xf5:num=4;
break;
case 0xed:num=5;
break;
case 0xdd:num=6;
break; }
while(temp!=0xe0)
{
temp=P1;
temp=temp&0xe0;
}
}
}
P1=0xfb;
temp=P1; //检测第三列
temp=temp&0xe0;
while(temp!=0xe0)
{
delay(5);
temp=P1;
temp=temp&0xe0;
while(temp!=0xe0)
{
temp=P1;
switch(temp)
{
case 0xf3:num=7;
break;
case 0xeb:num=8;
break;
case 0xdb:num=9;
break; }
while(temp!=0xe0)
{
temp=P1;
temp=temp&0xe0;
}
}
}return num; //返回检测结果,}
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-06-13
0~9是10个数字,3*3矩阵对应9个数字。
第2个回答  2017-06-13
3*3 键盘只能是 0 - 8 !
第3个回答  推荐于2017-06-13
这个很简单啊,不难,现实就看你使用什么了,lcd就麻烦点,led就更简单了本回答被网友采纳

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

请问单片机用矩阵3*3键盘1~9对应二进制数表示都是多少
你可以自己定义个变量比如unsigned char keynum;然后扫描按键为变量赋值就可以了,随便什么值0x00 0x11 0x22 0x33,

外设键盘的工作原理
矩阵式键盘使用于按键数量较多的场合,它由行线与列线组成,按键位于行、列的交叉点上。一个3*3的行列结构可以构成一个有9个按键的键盘。同理,一个4*4的行列可以构成一个16按键的键盘。很明显,在按键数量较多的场合,与独立式键盘相比,矩阵式键盘要节省很多I\/0接口。 2.键盘按键识别方法 (1)扫描法。 下面以...

单片机矩阵键盘键号的判别
应该是第一行的首键号为8,列号为1,所以闭合键号为9吧(你自己前面说的也是:闭合键的键号等于为低电平的列好加上行线为低电平的行的首键号)扫描的意思就是没开始扫描时,列线全部为高电平,开始扫描时,先第0列变为低电平,其他列仍然是高电平,然后第1列变为低电平,其他列仍然为高电平(...

单片机扫键盘程序代码
说明 : 4*4键盘 0-9 \/ uchar Keyboard(){ uchar i,j,pc;uchar num=0;for(i=0;i<4;i++){ P1=keyboard_Scan[i];pc=P1;pc=pc<<4|0x0f; \/*假如说有按键按下*\/ for(j=0;j<4;j++) \/*将扫描值与扫描按键值比较*\/ { if(keyboard_Scan[j]==pc)in=i*4+j;while(ke...

基于单片机英文输入显示系统设计,要求能用行列式键盘输入英文字母的大小...
简单一点设计是26个字母,你设定6*6扫描矩阵,一共36个点,这样只要12个普通IO口就可以,满足需求,软件中做定时巡查就可以了,显示的话是看你要接到电脑屏幕还是自己做一个液晶屏,接电脑屏幕的话,就单片机外面做一个RS232接口,将数据串行发送给电脑屏幕。如果是加一个液晶屏,自己就做好26字母的...

单片机矩阵键盘输入多位数问题
假设我现在输入了“1 2 3 4”这个参量就是4。 判断确定键:这一步和第二步是并行的关系。可以用SWITCH来做到.当确定以后。判断数据存放数目。在自己写个判断数目的小子程序。比如上面写的是4位 1X1000 +2X100+ 3X10 +4X1 这样就能将数据还原。进行这步的时候要注意。不能用char 或者...

我要给C51单片机上加一个键盘要求能输入0~9是个数字
一般I\/O不够用,有2个办法:老旧的方式是:扩展芯片方式。如8255等,比较新颖的方法是:用A\/D方式。

基于单片机电子密码锁设计~
给你一个思路吧,先用7个端口做成3*4矩阵键盘,0~9 * #共12个键,另外用4个端口做红灯输出、绿灯输出、报警输出、开锁输出。*键为取消键,#键为确认键,密码可存入单片机的ROM中(不能改密码)或存入24CXX串行E2PROM(可改密码)。键盘处理方法可以用两种,一种是在主程序里不停扫描端口检测按键...

矩阵键盘说明书矩阵键盘
按1-F2显示字符行,按2-F2隐藏字符行,按3-F2显示时间行,按4-F2隐藏时间行,按9-F2显示时间和字符行,按1-0-F2隐藏时间和字符行。3.按数字键1和5在数字输入区显示15。4.按下NEXT键退出监视器字符调整。不及物动词控制相机功能 控制摄像机和摄像机镜头的水平和垂直运动。1.按下键盘上的清除...

相似回答