标题:
单片机独立按键控制数码管加减的问题
[打印本页]
作者:
1225751467
时间:
2018-5-16 14:06
标题:
单片机独立按键控制数码管加减的问题
在按键加哪里正常实现了,但是按键减的时候有点问题,比如加到显示table[7]了,现在i的值是8,然后按键减,会再显示table[7]一次,然后再是table[6]````,请问怎么能解决这个问题?
求大佬指导
单片机源码:
#include<reg52.h>
sbit add = P3^0;
sbit subtract = P3^1;
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delayus(unsigned char t)
{
while(t--);
}
void delayms(unsigned char t)
{
while(t--)
{
delayus(247);
delayus(247);
}
}
void main()
{
int i,j;
i=0;
while(1)
{
if(add==0)
{
delayms(15);
if(add==0)
{
while(add==0);
if(i==10)
{
P1=0xff;
i=0;
}
else
{
P1=table[i];
//delayms(100);
i++;
}
}
}
if(subtract==0)
{
delayms(15);
if(subtract==0)
{
while(subtract==0);
if(i==0)
{
P1=0xff;
}
else
{
i--;
P1=table[i];
}
}
}
}
}
复制代码
作者:
zhdp
时间:
2018-5-16 15:39
改成 --i 就好了
作者:
zhanghyg
时间:
2018-5-17 08:14
i--;
P1=table[i];
把这两个位置换一下就好了
作者:
wulin
时间:
2018-5-17 11:07
先判断后加减
#include<reg52.h>
sbit add = P3^0;
sbit subtract = P3^1;
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delayus(unsigned char t)
{
while(t--);
}
void delayms(unsigned char t)
{
while(t--)
{
delayus(247);
delayus(247);
}
}
void main()
{
unsigned int i;
i=0;
while(1)
{
if(add==0)
{
delayms(15);
if(add==0)
{
if(i<9)
i++;
P1=table[i];
while(add==0);
}
}
if(subtract==0)
{
delayms(15);
if(subtract==0)
{
if(i>0)
i--;
P1=table[i];
while(subtract==0);
}
}
}
}
作者:
莫欺少年穷
时间:
2018-5-17 16:52
i--;
P1=table[i];
把这两个位置换一下就好了
作者:
1225751467
时间:
2018-5-18 11:16
zhdp 发表于 2018-5-16 15:39
改成 --i 就好了
谢谢,++和--这个这是很容易绕晕自己
作者:
1225751467
时间:
2018-5-18 11:19
莫欺少年穷 发表于 2018-5-17 16:52
i--;
P1=table;
把这两个位置换一下就好了
谢谢,++和--这个这是很容易绕晕自己
作者:
xiaoyu.
时间:
2018-5-18 15:11
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit K1=P3^4;
sbit K2=P3^5;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uint aa;
uchar num1,num2,shi1,ge1,shi2,ge2;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar num1,uchar num2)
{
shi1=num1/10;
ge1=num1%10;
shi2=num2/10;
ge2=num2%10;
dula=1;
P0=table[shi1];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[ge1];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[shi2];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[ge2];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
}
void key()
{
if(K1==0)
{
delay(5);
if(K1==0)
{
if(num1==0)
{
num1=60;
}
num1--;
while(!12);
}
}
if(K2==0)
{
delay(5);
if(K2==0)
{
num1++;
if(num1>=60)
{
num1=num1-60;
}
while(!23);
}
}
}
void main()
{
while(1)
{
key();
display(num1,num2);
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1