byte smg = { //设置每个数字所对应的开关数组
{ 1,0,0,0,0,1,0,0 },// = 0
{ 1,0,0,1,1,1,1,1 },// = 1
{ 1,1,0,0,1,0,0,0 },// = 2
{ 1,0,0,0,1,0,1,0 },// = 3
{ 1,0,0,1,0,0,1,1 },// = 4
{ 1,0,1,0,0,0,1,0 },// = 5
{ 1,0,1,0,0,0,0,0 },// = 6
{ 1,0,0,0,1,1,1,1 },// = 7
{ 1,0,0,0,0,0,0,0 },// = 8
{ 1,0,0,0,0,0,1,0 } // = 9
};
void setup()
{
pinMode(2,INPUT);
for(int x = 4; x <= 11;x ++)
{
pinMode(x,OUTPUT);
}
}
void loop()
{
for(int j = 0;j <= 9;j ++)
{
int pin = 4;
for(int i = 0;i <= 7;i ++)
{
digitalWrite(pin,smg);
pin ++;
}
delay(50);
while(digitalRead(2))
{
delay(1000);
}
}
}我也来写一段代码试试。
我想写一个按下,数码管停止跑动,再按下重新启动数码管跑动的程序,为何不行呢?程序如下,请教大家byte smg = { //设置每个数字所对应的开关数组
{ 1,0,0,0,0,1,0,0 },// = 0
{ 1,0,0,1,1,1,1,1 },// = 1
{ 1,1,0,0,1,0,0,0 },// = 2
{ 1,0,0,0,1,0,1,0 },// = 3
{ 1,0,0,1,0,0,1,1 },// = 4
{ 1,0,1,0,0,0,1,0 },// = 5
{ 1,0,1,0,0,0,0,0 },// = 6
{ 1,0,0,0,1,1,1,1 },// = 7
{ 1,0,0,0,0,0,0,0 },// = 8
{ 1,0,0,0,0,0,1,0 } // = 9
};
void setup()
{
pinMode(2,INPUT);
for(int x = 4; x <= 11;x ++)
{
pinMode(x,OUTPUT);
}
}
void loop()
{
for(int j = 0;j <= 9;j ++)
{
int pin = 4;
for(int i = 0;i <= 7;i ++)
{
digitalWrite(pin,smg);
pin ++;
}
delay(50);
int k = digitalRead(2);
while(k)
{
while(1);
{
if(digitalRead(2))
{
k = 0;
break;
}
}
}
}
}
经反复调试,觉得以下程序能够实现按下,数码管停止跳动,再次按下,数码管重新跳动。欢迎交流学习。byte smg = { //设置每个数字所对应的开关数组
{ 1,0,0,0,0,1,0,0 },// = 0
{ 1,0,0,1,1,1,1,1 },// = 1
{ 1,1,0,0,1,0,0,0 },// = 2
{ 1,0,0,0,1,0,1,0 },// = 3
{ 1,0,0,1,0,0,1,1 },// = 4
{ 1,0,1,0,0,0,1,0 },// = 5
{ 1,0,1,0,0,0,0,0 },// = 6
{ 1,0,0,0,1,1,1,1 },// = 7
{ 1,0,0,0,0,0,0,0 },// = 8
{ 1,0,0,0,0,0,1,0 } // = 9
};
void setup()
{
pinMode(2,INPUT);
for(int x = 4; x <= 11;x ++)
{
pinMode(x,OUTPUT);
}
}
void loop()
{
for(int j = 0;j <= 9;j ++)
{
int pin = 4;
for(int i = 0;i <= 7;i ++)
{
digitalWrite(pin,smg);
pin ++;
}
delay(50);
int k = digitalRead(2);
while(k)//第一次按键按下时,进入while死循环。
{
delay(100);
if(digitalRead(2))
{
delay(100);
if(digitalRead(2))//再次按下按键时,将K值反转,自动跳出while循环。
{
k = !k;
while(digitalRead(2))//等待按键松开
{
delay(1);
}
}
}
}
}
}