本帖最后由 AlfredLanning 于 2013-10-29 23:27 编辑
- byte seven_seg_digits[10][8] = { //设置每个数字所对应的开关数组,本实验所用的是共阳极数码管
- { 0,1,1,1,1,0,1,1 }, // = 0
- { 0,1,1,0,0,0,0,0 }, // = 1
- { 0,0,1,1,0,1,1,1 }, // = 2
- { 0,1,1,1,0,1,0,1 }, // = 3
- { 0,1,1,0,1,1,0,0 }, // = 4
- { 0,1,0,1,1,1,0,1 }, // = 5
- { 0,1,0,1,1,1,1,1 }, // = 6
- { 0,1,1,1,0,0,0,0 }, // = 7
- { 0,1,1,1,1,1,1,1 }, // = 8
- { 0,1,1,1,1,1,0,1 } // = 9
- };
-
- void sevenSegWrite(byte digit) { //设置通过数组控制引脚开关,顺序为4-11号端口
- byte pin = 4;
- for (byte segCount = 0; segCount < 8; ++segCount) {
- digitalWrite(pin, seven_seg_digits[digit][segCount]);
- ++pin;
- }
- }
- int count = 0; // 用来统计已用车位数
- void setup(){
- for( int i = 4;i <= 11;i++) { pinMode(i,OUTPUT); } //打开数码管用的引脚
- pinMode(2,INPUT); // 设置D2为红外传感器的输入引脚
- sevenSegWrite(count);
- }
- void loop(){
- if(digitalRead(3)){
- count++;
- sevenSegWrite(count);
- delay(1400); //红外热释电检测到动静时会将高电平延时一秒至两秒,加延时防止一次动静导致count多次自加
- }
- }
复制代码
该版本还有许多不足,1:由于只有一位数码管,所以只能显示个位数,切所用的数码管程序只适用于一位显示,如果需要四位数码管的显示驱动可以下载以下附件
2:只能检测动的,不能检测车是进入还是出去;应该再加一个红外热释电可以用来使count自减,代表车出库了 |