找到一段程序使用按钮触发的,如何改成使用光敏触发?
/*此数码管采用的是共阴极数码管*/
//设置阳极接口
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
int f = 6;
int g = 7;
int dp = 8;
//设置阴极接口
int d4 = 9;
int d3 = 10;
int d2 = 11;
int d1 = 12;
//设置变量
long n = 0;
byte pos_segs[8] = { a, b, c, d, e, f, g, dp};
byte neg_segs[4] = { d1, d2, d3, d4 };
byte seven_seg_digits[10][7] = { { 1,1,1,1,1,1,0 }, // = 0
{ 0,1,1,0,0,0,0 }, // = 1
{ 1,1,0,1,1,0,1 }, // = 2
{ 1,1,1,1,0,0,1 }, // = 3
{ 0,1,1,0,0,1,1 }, // = 4
{ 1,0,1,1,0,1,1 }, // = 5
{ 1,0,1,1,1,1,1 }, // = 6
{ 1,1,1,0,0,0,0 }, // = 7
{ 1,1,1,1,1,1,1 }, // = 8
{ 1,1,1,1,0,1,1 } // = 9
};
//上次运行时间
unsigned long previousMillis = 0;
//最小时间间隔
int INTERVAL = 100;
//flag代表三种模式,0则停止(归零),1则计时,2则暂停
int flag = 0;
//模拟口A0
int BUTTON = 0;
void setup()
{
for(int i=0;i<4;i++)
pinMode(neg_segs[i], OUTPUT);
for(int i=0;i<8;i++)
pinMode(pos_segs[i], OUTPUT);
}
void loop()
{
if(flag == 0)//停止(归零)模式
{
clearLEDs();
keyScan();
n=0;
previousMillis=millis();
}
else
{
if(flag == 1)//计时模式
{
unsigned long currentMillis=millis();//当前运行时间
if(currentMillis - previousMillis >= INTERVAL)
{
n++;
previousMillis=currentMillis;
}
}
clearLEDs();
pickDigit(1);
lightSegments((n/1000)%10);
clearLEDs();
pickDigit(2);
lightSegments((n/100)%10);
clearLEDs();
pickDigit(3);
dispDec(3);
lightSegments((n/10)%10);
clearLEDs();
pickDigit(4);
lightSegments(n%10);
keyScan();
}
}
void pickDigit(int x) //定义pickDigit(x),其作用是开启dx端口
{
for(int i=0;i<4;i++)
{
if(i == (x-1))
digitalWrite(neg_segs[i], LOW);
else
digitalWrite(neg_segs[i], HIGH);
}
}
//设定开启小数点
void dispDec(int x)
{
digitalWrite(dp, HIGH);
}
//清屏
void clearLEDs()
{
for (int i = 0; i < 8; i++)
digitalWrite(pos_segs[i], LOW);
}
// 点亮对应数字的数码管
void lightSegments(int x)
{
for (int i = 0; i < 7; i++)
{
digitalWrite(pos_segs[i], seven_seg_digits[x][i]);
}
}
//按键扫描
void keyScan()
{
if(analogRead(BUTTON)>600)
{
delay(20);
if(analogRead(BUTTON)>600)
{
flag++;
if(flag>=3)
flag=0;
while(analogRead(BUTTON)>600);
}
}
}
|