标题:
单片机数码管只显示0,按键无反应,求帮忙
[打印本页]
作者:
skcxks
时间:
2019-5-30 09:55
标题:
单片机数码管只显示0,按键无反应,求帮忙
#include"math.h"
#include "reg51.h"
#define uchar unsigned char
uchar key_temp,key=0,i,j,k,t=0;
uchar a=0,b=0,c=0,d=0;
unsigned long qian,hou;
uchar table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
static unsigned char state_key=0;
static unsigned char state_dis=0;
void keyscan()
{
switch(state_key)
{
case 0:
key_temp=(P1&0x0f);
if(key_temp!=0x0f)
t=0;
state_key=1;
break;
case 1:
if(t>=10)
{
t=0;
if(key_temp==(P1&0x0f))
{
if(P1^0==0)
key=1;
if(P1^1==0)
key=2;
if(P1^2==0)
key=3;
if(P1^3==0)
key=4;
}
state_key=2;
}
else
state_key=0;
break;
case 2:
if(P1&0x0f==0x0f)
{
state_key=0;
break;
}
key=0;//default:break;
}
}
void keyaction()
{
switch(key)
{
case 1:break;
case 2:i=0;
i++;
if(i>9)
break;
case 3:j=0;
if(j<=3)
j++;
switch(j)
{
case 0:P3=0xfe;i++;break;
case 1:P3=0xfd;i++;break;
case 2:P3=0xfb;i++;break;
case 3:P3=0xf7;i++;break;
}
break;
case 4: k=0;
k++;
if(k==1)
hou=hou+qian;
qian=0;
if(k==2)
hou=hou+qian;
qian=0;
k=0;
break;
}
}
void display()
{
switch(j)
{
case 0:P2=table[a];break;
case 1:P2=table[b];break;
case 2:P2=table[c];break;
case 3:P2=table[d];break;
}
}
void display0()
{
switch(state_dis)
{
case 0:a=i;b=0;c=0;d=0;break;
case 1:b=i;c=0;d=0;break;
case 2:c=i;d=0;break;
case 3:d=i;break;
}
display();
}
void time0init()
{
TMOD=0x01;
TH0=-50000/256;
TL0=-50000%256;
EA=1;
ET0=1;
TR0=1;
}
void time0()interrupt 1
{
TH0=-50000/256;
TL0=-50000%256;
t++;
if(state_dis<=3)
state_dis++;
else
state_dis=0;
if(t<10)
t++;
}
void main()
{
time0init();
while(1)
{
keyscan();
keyaction();
display0();
switch(j)
{
case 0:qian=a;break;
case 1:qian=a+b*10;break;
case 2:qian=a+b*10+c*100;break;
case 3:qian=a+b*10+c*100+d*1000;break;
}
a=0;
b=0;
c=0;
d=0;
}
复制代码
数码管只显示0,按键无反应,求帮忙
作者:
lxbeiming
时间:
2019-5-30 11:30
原理图得提供啊,至少框图有吧,怎么接线的
作者:
suncat0504
时间:
2019-5-30 14:35
求助之前,自己先别急,静下心来,仔细检查代码有没有错误;程序处理逻辑有没有问题。必要的话,各变量随着处理流程的值变化,列成清单。如果程序是你写的,对于if判断后的处理代码,是不是忘了{}而导致处理流程出问题,一定要检查仔细。我看你的代码,没有注释,不敢肯定有没有问题,但是case中初始化为0,再判断范围,然后加1,这样的处理逻辑很不正常,会导致每次都从0开始计数,if判断后加1.每次都这样,永远不会有2以上的值。
作者:
a庚
时间:
2019-5-30 19:46
不要这么用全局变量去传递参数,用函数返回值或者指针。这么写自己看不乱么?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1