用51单片机做一个简单加法器

在做完流水灯后就可以尝试做一个结合数码管和按键结合的简单加法器

我所用的是sct89c51单片机

此单片机有3个数码管,可以通过2个key按键控制

1key个选择数码管,另为一个调整数码管的显示

代码如下:

#include
#define uint unsigned int
#define uchar unsigned char
sbit w1=P1^0;
sbit w2=P1^1;
sbit w3=P1^2;
sbit k1=P3^3;
sbit k2=P3^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};


void delayms(uint a)
{
uint x,y;
for(x=a;x>0;x--)
for(y=113;y>0;y--);
}


void key1(uint i)
{
w1=1;
w2=0;
w3=0;
P0=table[i];
 w1=0;
delayms(5);
w1=1;
}
void key2(uint i)
{
w1=0;
w2=1;
w3=0;
P0=table[i];
w2=0;
delayms(5);
w2=1;
}
void key3(uint i)
{
w1=0;
w2=0;
w3=1;
P0=table[i];
w3=0;
delayms(5);
w3=1;
}
void main()
{
while(1)
{
uint t=0;
uint j=0;
uint s;
if(k2==0)
{
delayms(10);
if(k2==0)
{
key1(t);
delayms(1000);
while(k2==1)
{
if(k1==0)
{
delayms(10);
if(k1==0)
{
t++;
delayms(1000);
}
key1(t);
}
}
}
}
if(k2==0)
{
delayms(10);
if(k2==0)
{
key2(j);
delayms(1000);
while(k2==1)
{

if(k1==0)
{
delayms(10);
if(k1==0)
{
j++;
delayms(1000);
}
key2(j);
}
}
}
}
s=t+j;
if(s>=10)
{
s=s-10;
}
if(k2==0)
{
delayms(10);
if(k2==0)
{
key3(s);
delayms(1000);
while(k2==1)
{
}
}
}
t=0;
j=0;
s=0;
}

}


你可能感兴趣的:(用51单片机做一个简单加法器)