51单片机如何用矩阵键盘输入数值,最后赋值到一个变量上

作者&投稿:漫左 (若有异议请与网页底部的电邮联系)
51单片机矩阵键盘输入11位数字,赋值给一个变量~

11位数据有点大 long int 型也只有10位,最大值42亿多
只有用double型了,但如果有多个double型变量进行运算的话是很占内存的
运算时间也是很长的,显示运算结果也很麻烦,不可能有很多位都显示出来,需判断数值范围,决定显示方式和显示位数
uchar c=0;
double a;
uchar buff[11];
while(c<11)
{
buff[c}=keyscan();
c++;
}
a=buff[0]*10000000000+buff[1]*1000000000+..............buff[10];

可以的,假如键盘扫描程序是
#include
#define uchar unsigned char
uchar key()
{
//键盘扫描
}
main()
{
uchar keycode[2],i=0,x;
uchar a;
while(1)
{
x=key;
if(x<10)
{
keycode[i]=x;
if(i==1)a=keycode[0]*10+keycode[1];
}
i++;
i&=0x01;
}
}

你好!!

你做矩阵键盘检测的时候,会触发相关的IO口的状态,通过分析IO口,就能知道那个键按下;

定义一个变量,将按下的键值赋给变量就行了

(1)用手指头按下矩阵键盘的0~9数字键即可输入数值。

 

(2)最后赋值到一个变量上

unsigned char const str1[]="最后";
unsigned char const* pt1=&str1[0];

这样就把最后赋值到指针pt1上了


uchar keyscan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

P3=0xf7;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
return num;
}


51单片机程序,怎样用矩阵键盘输入数字?
矩阵键盘去除键值,你想让它做几就做几,可以随意安排数字了。至于如何显示,如何使用,就是纯程序的事情了

简述单片机反转法识别矩阵按键过程
反过来驱动这一列为0,其他列为1。把行作输入。就可以判断按下的键所在行。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I\/O口作为输出端,而列线所接的I\/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无...

【求解释】单片机最简单的矩阵键盘代码(只有三句)
这是完整的矩阵键盘代码没错,不过并不难理解,假设按下的是连接P1.1和P1.5的按键,那么各行代码的二进制结果为:第一行:P1 = 1111 0000 第二行:KH = 1101 0000 第三行:P1 = 0000 1111 第四行:KL = 0000 1101 第五行:Key = 1101 0000 | 0000 1101 = 1101 1101 高位和低位“0...

51单片机,用c语言,如何用矩阵键盘为一个变量char a赋值?已设计出一个...
\/***4×4矩阵按键构架——火柴天堂作品-20110921***\/ \/***源程序默认硬件环境:52单片机,12MHz晶振,P1口 4×4矩阵键盘,详细布局如下***\/ \/*默认矩阵布局,按键扫描方式1使用 P0 P1 P2 P3 │ │ │ │ P4─┼──┼──┼──┤S1S2S3S4 │ │ │ │ P5─...

写了个单片机矩阵按键控制数码管显示数字的程序,只需要显示0到9就好...
{ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e } ;\/\/共阳极数码管0 为亮 sbit wei=P1^0;void delay(uchar t)\/\/毫秒延 { uint i,j;for(i=0; i<t; i++)for(j=0; j<110; j++);} void display(uchar d){ P1=0x00;wei=1...

c51单片机 2*2矩阵按键控制四个灯,按1键亮一个灯,按2键亮两个灯,以此...
sbit hang1=P1.0;\/\/行线作为输出 sbit hang2=P1.1;sbit lie1=P1.2;\/\/列线作为输入 sbit lie2=P1.3;sbit led1=P1.4;\/\/定义LED管脚 sbit led2=P1.5;sbit led3=P1.6;sbit led4=P1.7;void main(void){ lie1=1;lie2=1;led1=0;led2=0;led3=0;led4=0;\/\/全部不亮 w...

谁能给我讲明白单片机的4x4矩阵键盘工作原理
4x4矩阵键盘的工作原理是在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,通过读入输入线的状态就可得知是否有键被按下。

单片机的矩阵按键怎么输入两位数
输入两次即可,假设keyscan()是带返回值的按键扫描函数 i=0;While(i<2){ m=keyscan();if (m<10){ A[i]=keyscan();i++;} } 再将输入的两个数合成一个数即可 value=A[1]*10十A[0];同样可以获得3位数输入和更多位输入

矩阵键盘和独立按键的区别是什么?
矩阵键盘:为了节省I\/O口,通常将按键排列成矩阵形式,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。(上个图,一看就明白) 本回答由提问者推荐 举报| 答案纠错 | 评论(2) 30 1 ShoW_DonG 采纳率:31% 擅长: 暂未定制 为您推荐: 矩阵键盘独立化 独立式键盘 矩阵键盘原理 单片机矩阵键...

请问如何用单片机 获取矩阵键盘各按键的按下与松开的状态
用按键等待程序 ,把第二次判断有无按键按下的if语句变为 while(P1!=0xf0); \/\/若按键一直处于按下状态,则等待按键释放 ;若按键释放,则往下执行 Key_Value = Keyscan();SBUF=Key_Value;这样,把主循环while(1)变为 while(1){ P1 = 0xf0;if(P1 != 0xf0) \/\/判断有无按...

柳城县19648402183: 51单片机矩阵键盘输入11位数字,赋值给一个变量 -
定桂肝得: 11位数据有点大 long int 型也只有10位,最大值42亿多 只有用double型了,但如果有多个double型变量进行运算的话是很占内存的 运算时间也是很长的,显示运算结果也很麻烦,不可能有很多位都显示出来,需判断数值范围,决定显示方式和显示位数 uchar c=0; double a; uchar buff[11]; while(c<11) { buff[c}=keyscan(); c++; } a=buff[0]*10000000000+buff[1]*1000000000+..............buff[10];

柳城县19648402183: 51单片机如何通过4*4矩阵键盘输入一个两位数,送给一个变量?求助... -
定桂肝得: 设置其中的一个按键,定为标志位 如果没有按下标志位 则 a=a*10+key ; //key为按键值

柳城县19648402183: 单片机的矩阵按键怎么输入两位数 -
定桂肝得: 输入两次即可,假设keyscan()是带返回值的按键扫描函数 i=0; While(i<2) { m=keyscan(); if (m<10) { A[i]=keyscan(); i++; } } 再将输入的两个数合成一个数即可 value=A[1]*10十A[0];同样可以获得3位数输入和更多位输入

柳城县19648402183: 51单片机控制矩阵键盘,谁能帮帮我
定桂肝得: 我的想法,仅供参考.可以定义“确定”键:比如,输入2345,或者123圈后,点击确认,才会执行.定义按键计数器“a”,每次按键一次自加 1 ,如果有确定键按下,根据按键计算器数值进行加权运算.例如,输入“1”“2”“3”“4”“确认”此时“a=4”那么加权就是 圈数 “j=1x10^3+2x10^2+3x10^1+4x10^0”“或者定义数组key 存放按键数字,然后用for(i=0;i<=a;i++){ j=key注:如果觉得浪费键盘资源.可以用定时器,定义不再按键2s后,自动确认什么的.撸主自己选择.仅供参考

柳城县19648402183: 51单片机 如何4*4矩阵键盘输入按键 继电器输出信号 -
定桂肝得: ........... Inter0_process() interrupt 2 //外部中断1 { Key_scan();//你的键盘扫描程序(中断服务程序),一旦触发中断,将运行至本段. } //主程序main() {........... ........... ........... EX1=1; //开中断一 P3.3 IT1=1; //下降沿触发 ET1=1; EA=1;........... ...........} 注:图中的键盘接法都是独立按键接发,矩阵键盘没有见过能直接触发中断的.

柳城县19648402183: 用51单片机,怎么让数码管显示一串矩阵键盘按下的键代表的数(0~f)? -
定桂肝得: 这种显示方式就和手机拨号时,按下号码的显示是一样,第一个数码先在右边显示,再按键,依此向左移动显示.要是6位数码管,就保留6位显示了,按键超过6位时,先按的自然丢掉了.

柳城县19648402183: 单片机的矩阵按键怎么输入两位数,例如,先输入2,数码管显示2,再输入3,数码管显示23,有类似程序更好 -
定桂肝得: 我的思路是,把你输入的数字先保存在一个数组里,然后实时的显示该数组的内容即可.#define MAX_NUM 2 uchar num_pos = 0;//输入数字的个数计数.char num_buff[MAX_NUM] = {-1,-1}; void DisplayNum() { for(i = 0; i < num_pos; i++) { //...

柳城县19648402183: 51单片机如何通过4*4矩阵键盘输入一个两位或以上的数,送给一个变量呀!!!! -
定桂肝得: 1个按键作为选位,2个作为加一减一,1个作为确定.送一个变量是什么意思

柳城县19648402183: 51单片机通常如何输入浮点数? -
定桂肝得: 单片机处理浮点数效率不高,一般是浮点数乘以10的n次方变成整数进行计算等处理,在输出的时候再次处理小数点.比如,你输入的是1234.567,1234保存到2个unsigned char型变量里面,567保存到2个unsigned char型变量里面,如果是有符号浮点数,可以把符号单独保存到一个unsigned char里面,计算的时候所有的数都乘以1000,输出的时候单独输出整数部分和小数部分.

柳城县19648402183: 51单片机怎么用矩阵键盘让数码管加一减一,就是每两个键盘控制一个数 -
定桂肝得: #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit key1=P1^0; sbit key2=P1^1; uchar num=0; //共阴数码管七段码 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77}; void Delay1ms(uint i) //1...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网