51单片机矩阵键盘输入的值保存到一个数组了里并显示出来最后再控制LED灯闪烁对应数值的次数 5

例子:我按下15第一次按下为十位。此时各位显示0;第二次按下为各位,此时显示15;程序如下:望各位大佬指出错误!!!感谢#include<reg52.h>#include... 例子:
我按下15
第一次按下为十位。此时各位显示0;
第二次按下为各位,此时显示15;
程序如下:望各位大佬指出错误!!!感谢#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit ok=P3^4;
sbit WM=P2^7;
sbit DM=P2^6;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar a[3];//暂存数据
uchar juzhen();
void okbutton();
uchar gongneng();
void display();
void zuhe();
void delayms(uint ms);
long oknumber;
uint i=0;
uint n;
uint num;
uint cishu;
uint f0=0;
unsigned char zuobiao=0;
void main()
{
while(1)
{
gongneng();
zuhe();
}
}
uchar juzhen()
{
unsigned char temp,reg1=0,reg2=0,key=0; //temp为临时变量,reg1为寄存器1,reg2为寄存器2,key为键盘编码号
P3=0x0f;
temp=P3&0x0f;
if(temp!=0x0f) //按键检测兼行坐标检测
{
delayms(10);
temp=P3&0x0f;
if(temp!=0x0f) //二次检测
{
f0++;
reg1=temp; //把行坐标存入寄存器1
// P3=reg1|0xf0; //保留读入值高四位
temp=P3&0xf0;
if(temp!=0xf0) //检测列坐标
{

reg2=temp; //把列坐标存入寄存器2
key=reg1|reg2; //将寄存器1和寄存器2进行按位或,作用是组合坐标,格式为八位二进制的"列坐标行坐标
while(temp!=0xf0); //等待按键释放
// temp=P3&0xf0;
}
}
}
return key;
}
uchar gongneng()
{
unsigned char shuzhi;
zuobiao=juzhen();
switch(zuobiao)
{
case 0xee: shuzhi=0;a[i]=shuzhi;i++;if(i>2)i=0;/*按键0功能*/ break;
case 0xde: shuzhi=1;a[i]=shuzhi;i++;if(i>2)i=0;/*按键01功能*/ break;
case 0xbe: shuzhi=2;a[i]=shuzhi;i++;if(i>2)i=0;/*按键02功能*/ break;
case 0x7e: shuzhi=3;a[i]=shuzhi;i++;if(i>2)i=0;/*按键03功能*/ break;
case 0xed: shuzhi=4;a[i]=shuzhi;i++;if(i>2)i=0;/*按键04功能*/ break;
case 0xdd: shuzhi=5;a[i]=shuzhi;i++;if(i>2)i=0;/*按键05功能*/ break;
case 0xbd: shuzhi=6;a[i]=shuzhi;i++;if(i>2)i=0;/*按键06功能*/ break;
case 0x7d: shuzhi=7;a[i]=shuzhi;i++;if(i>2)i=0;/*按键07功能*/ break;
case 0xeb: shuzhi=8;a[i]=shuzhi;i++;if(i>2)i=0;/*按键08功能*/ break;
case 0xdb: shuzhi=9;a[i]=shuzhi;i++;if(i>2)i=0;/*按键09功能*/ break;
case 0xbb: oknumber++;/*按键A功能*/ break;
default: ;//空语句
}
return(shuzhi);
}
void zuhe()
{
num=a[0]*10+a[1];
delayms(10);
display();
}
void display()
{
WM=1;
P0=0xfe;
WM=0;
P0=0x00;
DM=1;
P0=table[num/10];
DM=0;
delayms(3);

WM=1;
P0=0xfd;
WM=0;
P0=0x00;
DM=1;
delayms(3);
P0=table[num%10];
DM=0;
void delayms(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
展开
 我来答
jw7dm8
2019-07-14 · TA获得超过4663个赞
知道大有可为答主
回答量:5794
采纳率:81%
帮助的人:283万
展开全部
例如按下1、2、3,我可以令result=num[0]*100+num[1]*10+num[2],得到123。--每次怎么可能按下 1、2、3 ?每次,只能按下一个。你把值保存到数组num[i]的一个元素中,再 i++。 i == 3,可令result=num[0]*100+num[1]*10+num[2],得到123。然后可以读这些数进行计算。
追问
对,第一次按下的值放在num【0】里面,然后i++;if(i==3)说明按下了三次,然后计算result,改的话我的程序在哪里修改。是在shuzhi后么
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式