萌新51单片机求助!!!涉及矩阵键盘方面

qq_53014812 2020-12-29 11:05:17

刚刚写代码的时候发现我写的代码有问题。
我写了两篇代码,分别关于用数码管做计时器从1至1000和用矩阵键盘在数码管显示1到F的。
下面是要求和原理图




下面是我写的代码,我发现主函数那段,定时器的代码和矩阵按键的代码不能同时运行(按键在数码管显示的数字只有在按键按下时才显示,松手不显示,不满足要求),但是当我把他们两个代码分别运行的时候,所得到的现象是满足预期的,为什么当我把这两个代码合在一起时不能满足预期?是哪个地方错了,求大佬们告诉我,谢谢大佬们了。
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
char code table []={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uint num;
void delayms(uint);
int apple,pear,a;
void knowledge(int,int,int);
uchar num1,ge,shi,bai,qian;
void display(uchar,uchar,uchar,uchar);




void display(uchar ge,uchar shi,uchar bai,uchar qian) //计时器部分
{

dula=1;
P0=table[qian];
dula=0;
P0=0xff;
wela=1;
P0=0XFE;
wela=0;
delayms(5);

dula=1;
P0=table[bai];
dula=0;
P0=0XFd;
wela=1;
P0=0XFd;
wela=0;
delayms(5);

dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0XFb;
wela=0;
delayms(5);

dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0XF7;
wela=0;
delayms(5);

}

void delayms(uint times)
{
uint i,j;
for(i=0;i<60;i++)
for(j=0;j>times;j++);
}

void T1_time() interrupt 1
{
TH0=(65536-18432)/256;
TL0=(65536-18432)%256;
num1++;
if( num1==50)
{
num1=0;
num++;
if(num ==1000)
TR0=0;
qian = num/1000%10;
bai= num/100%10;
shi = num/10%10;
ge= num%10;

}



}

void knowledge(int apple,pear,a) //矩阵按键部分
{
P3 = 0xf0;
apple = P3&0xf0;

if(apple!=0xf0)
{
P3 = 0xf0;
apple = P3&0xf0;
delayms(10);
if(apple!=0xf0)
{
P3 = 0xf0;
apple = P3&0xf0;
switch(apple)
{
case(0xe0):pear ==0;break;
case(0xd0):pear = 1;break;
case(0xb0):pear = 2;break;
case(0x70):pear = 3;break;
}
P3 = 0x0f;
apple =P3;
switch(apple)
{
case(0x0e):pear =pear;break;
case(0x0d):pear =pear+4;break;
case(0x0b):pear =pear+8;break;
case(0x07):pear =pear+12;break;
}

delayms(50);
dula=1;
P0=table[pear];
dula=0;
P0=0xff;
wela=1;
P0=0X7f;
wela=0;
delayms(5);
P0=0xff;



}
}
}
void main()
{
TMOD=0X01;
ET0=1;
TR0=1;
TH0=(65536-18432)/256;
TL0=(65536-18432)%256;
EA=1;
dula = 0;
while(1)
{
knowledge(apple,pear,a);
display(ge,shi, bai, qian);
}
}



...全文
7409 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
水浒传鲁智深 2021-01-01
  • 打赏
  • 举报
回复
用keil连个51开发板,具体debug调试模式实验一下,看卡在哪
Lenged_Zhao 2020-12-30
  • 打赏
  • 举报
回复
当你松开按键的时候,0-F被刷新掉了,建议不要在knowledge()函数里直接进行“0-F”显示,而是定义全局变量,在display()函数统一进行显示。
yishumei 2020-12-30
  • 打赏
  • 举报
回复
硬件电路无法满足要求,需要修改 K5、K6的输入段码相同,无法同时显示1~1000/0~F
qq_53014812 2020-12-30
  • 打赏
  • 举报
回复
好的,谢谢你们

27,383

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧