我的代码会有很多bug,不过相当于免费的东西,你也就别期待多么好了。
可以参考一下。按照我硬件图来的。
#include
unsigned char tube1[]={0x5b,0x3f,0x5b,0x3f};//数码管初始状态2020 字符码
unsigned char tube2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极字符码
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit led1=P3^0;
sbit led2=P3^1;
sbit led3=P3^2;
sbit led4=P3^3;
void delay(unsigned int time);
void main()
{
unsigned char i,W;
while(1)
{
if(key1==1&key2==1&key3==1) //初始状态
{
W=0x01;
P3=0X00;
for(i=0;i<4;i++)
{
P1 =W;
W<<=1;
P0=tube1[i];
delay(10);
P1 =0x00;
}
}
if(key1==0) // 按键1按下
{
delay(10);
if(key1==0)
{
led1=1;
led2=0;
led3=0;
led4=0;
W=0x8;
for(i=0;i<10;i++)
{
if(key2==0|key3==0|key4==0)
break;
P1 =W;
P0=tube2[i];
delay(1000);
P1 =0x00;
}
}
while(!key1);
delay(10);
while(!key1);
}
if(key2==0) //按键2按下
{
delay(10);
if(key2==0)
{
led1=0;
led3=0;
led2=1;
led4=1;
W=0x4;
for(i=0;i<10;i=i+2)
{
if(key1==0|key3==0|key4==0)
break;
P1 =W;
P0=tube2[i];
delay(1000);
P1 =0x00;
}
}
while(!key2);
delay(10);
while(!key2);
}
if(key3==0) //按键3按下
{
delay(10);
if(key3==0)
{
led1=1;
led3=1;
led2=0;
led4=0;
W=0x2;
for(i=1;i<10;i=i+2)
{
if(key2==0|key1==0|key4==0)
break;
P1 =W;
P0=tube2[i];
delay(1000);
P1 =0x00;
}
}
while(!key3);
delay(10);
while(!key3);
}
}
}
void delay(unsigned int time)
{
unsigned int j=0;
for(;time> 0;time--)
for(j=0;j<125;j++);
}
led驱动用单片机口直接驱动,输出电流小
如果有偿的话可以联系我
protues先画好原理图,单片机部分、LED显示部分、按键输入部分。
keil,C语言设计,分别先写好LED驱动,按键输入驱动。再来就根据你上述5条需求编写代码,就相对容易了。
单片数码管的那个动态需要显示问题吗,上面都可以有显示的。