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;
}


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

单片机矩阵按键的问题
这个错误的意思是,case后面的值重复了。原因如下 &&是条件与,你这段代码相当于这样:case(0x01):KeyValue=1;break;case(0x01):KeyValue=1;break;case(0x01): KeyValue=1;break;case(0x01):KeyValue=1;break;所以编译器就报了这个错误。把&&改为&,即可,如下:case(0X07&0X70):KeyValue...

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

一个单片机矩阵键盘问题,这个程序编译之后没有错误,下载到开发板之后按...
你好 你的程序没有注释,看了比较费劲,你对一楼的追问没错,程序语句也都对,根据你的程序,只能完成一个键的检测之后就没反应了。估计你是仿制了别人的键盘子程序,在你的程序结构中不合适。问题:没有循环体,就算程序没问题也只执行一次,起码像这样 main(){ 。。。起始条件 while(1) \/\/循...

神经网络如何用单片机实现?
用单片机开发神经网络应用主要考虑三个方向:1)网络本身,神网本质上是一组矩阵,矩阵在单片机中的表现可以通过数组来实现;2)输入输出,神网的应用就是把输入阵列与网络本身的矩阵点乘叉乘后算术求和,产生输出矩阵,把输入输出的算法做到单片机里也不是难事;3)训练,神网的权值矩阵都是训练出来的,...

初学单片机矩阵键盘逐行扫描,问题困扰好久
P3=0x7f;\/\/高4位作为输出,低4 位为输入,作为输入时要先将其置1 每次扫描时高4位中只有一根线是0,如果没有按键按下,高4位中的0就不会传到低4位上 那麼读P3的低4位,它将仍保持原状态4个1(0x0f)反之,若读到的不是4个1,说明有按键按下了 temp=P3;\/\/将P3口的状态读回来 temp...

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

用单片机开发板的矩阵键盘设置一个可以进行4位数以内的加减乘除,计算结 ...
单片机书上应该有讲的哦,多查资料。既然是4x4,即4行4列了,共需要8个I\/O口,有8bit数据(如高四位为行4bit,低四位为列4bit)位:xxxx xxxx。还要结合你的程序来编码键值,如果有键按下了,查询所有按键的所连接的I\/O口电平状态,每个按键需要两个I\/O口,一端连接行(行4bit之一),一端...

单片机串口通信和矩阵键盘的程序怎么写,谢谢!
你可以先写好基本串口通讯程序,然后用键盘的数据调整波特率即可。按照基本原理,你需要用8根IO线完成矩阵键盘的扫描和识别。由于你的波特率不断变化,你需要使用可以自动识别波特率的接收电路或者手动调整接收电路的波特率来检查程序的运行情况。

单片机控制156个LED,单独控制每一个
共16列,例如X方向全接高电平至LED长引脚,Y方向接低电平至LED短引脚,X和Y各取一个,横轴和纵轴的交汇处就是亮灯的地方,绝对好用,最大控制个数16x16=256个LED 其实跟矩阵键盘原理一样的,做的时候用光耦隔离下再驱动继电器,毕竟电流不小,限流也要做好 希望能够帮到你!~~...

成华区19141287730: 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];

成华区19141287730: 51单片机如何通过4*4矩阵键盘输入一个两位数,送给一个变量?求助... -
蒋奇消炎: 设置其中的一个按键,定为标志位 如果没有按下标志位 则 a=a*10+key ; //key为按键值

成华区19141287730: 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后,自动确认什么的.撸主自己选择.仅供参考

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

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

成华区19141287730: 51单片机如何通过4*4矩阵键盘输入一个两位或以上的数,送给一个变量呀!!!! -
蒋奇消炎: 1个按键作为选位,2个作为加一减一,1个作为确定.送一个变量是什么意思

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

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

成华区19141287730: 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...

成华区19141287730: 单片机的矩阵按键怎么输入两位数,例如,先输入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++) { //...

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