#include <avr/eeprom.h>
#define PinA 2 //中断0
#define led1 1
#define led2 3
#define led3 4
#define led4 5#define da 6
#define db 7
#define dc 8
#define dd 9
#define de 10
#define df 11
#define dg 12
#define dp 13long count ;unsigned long time = 0;
int data[11] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x80};// the setup routine runs once when you press reset:
void setup() {
pinMode(PinA,INPUT);// for(int i = 0; i < 4; i++)
//
attachInterrupt(0, runCount, FALLING); //设置触发,中断号0,即数字2口
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
for(int i=6; i < 14; i++){
pinMode(i, OUTPUT);
}
ledTest();
}
void runCount() //触发函数
{
if ((millis() - time) > 150) //防抖动处理
{
count ++;
//for(int i = 0; i < 4; i++) {
// dpointer++;
// }
}
time = millis();
}
//led test 初始测试
void ledTest(){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
for(int i=0; i < 11; i++){
ledOut(led1, i );
delay(200);
}
selecLed(led1);
ledOut(led1, 0 );
}
//select LED 选择对应的数码位
void selecLed(int led){
for(int i=1; i < 5; i++){
int t = i>1?i+1:1;
if( t == led){
digitalWrite(t, LOW);
}else {
digitalWrite(t, HIGH);
}}}
//led out 单个显示
void ledOut(int ledSelect, int td){
digitalWrite(ledSelect, LOW);
int set = 0x01;
for(int i=6; i<14; i++){
int dis =data[td] & set;
digitalWrite(i, dis);
set = set<<1;
}}
//led display
void ledDisplay(unsigned long d){
int d1 = d%10;
int d2 = (d/10)%10;
int d3= (d/100)%10;
int d4= d/1000;
if(d<10){
selecLed(led1);
ledOut(led1, d1);
}else if(d >=10 && d < 100){
selecLed(led1);
ledOut(led1, d1);
delay(10);
selecLed(led2);
ledOut(led2, d2);
delay(10);
}else if(d >=100 && d < 1000){
selecLed(led1);
ledOut(led1, d1);
delay(7);
selecLed(led2);
ledOut(led2, d2);
delay(8);
selecLed(led3);
ledOut(led3, d3);
delay(9);
}else if(d >=1000 && d < 10000){
selecLed(led1);
ledOut(led1, d1);
delay(5);
selecLed(led2);
ledOut(led2, d2);
delay(6);
selecLed(led3);
ledOut(led3, d3);
delay(7);
selecLed(led4);
ledOut(led4, d4);
delay(8);
}
}// the loop routine runs over and over again forever:
void loop() {
ledDisplay(count); //显示值
}
arduino实验第三代码
最新推荐文章于 2023-05-18 23:10:51 发布