一般来说,我们学习51还是Arduino估计都是从一个闪灯程序开始的,这就好比学习C++或者Java的第一个程序hello world一样。
估计闪灯程序之后紧接下来的就是流水灯了,实际流水灯的实现在很多初学者看来也不是很难,无非跟写数字一样,一字写一横,二字写二横,无非多写几横而已(哈哈哈哈)。
按照上面的思路程序很容易出来,如下:
int LED0=1;
int LED0=2;
int LED0=3;
int LED0=4;
int LED0=5;
int LED0=6;
int LED0=7;
int LED0=8;
void setup()
{
//设置管及管脚的pinMode
pinMode(LED0,OUTPUT);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
pinMode(LED5,OUTPUT);
pinMode(LED6,OUTPUT);
pinMode(LED7,OUTPUT);
}
void loop()
{
LED0 = 0;
delay(100);
LED0 = 1;
LED1 = 0;
delay(100):
LDE1 = 1;
LED2 = 0;
delay(100):
LDE2 = 1;
LED3 = 0;
delay(100):
LDE3 = 1;
LED4 = 0;
delay(100):
LDE4 = 1;
LED5 = 0;
delay(100):
LDE5 = 1;
LED6 = 0;
delay(100):
LDE6 = 1;
LED7 = 0;
delay(100):
LDE7 = 1;
}
但我们会发现,这样一来,我们的板子的端口很快就被占用完了,想再做点其他的事情恐怕就只能望着板子束手无策了。所以,我们这里介绍一种借助移位寄存器的办法来解决。这里用到的就是+74hc595,我们用proteus来仿真(对于proteus仿真不太熟悉的童鞋可以参看我前面写的proteus仿真Arduino的入门教程的博文),图如下:
程序如下:
int latchPin=8; //ST CP of 74HC595
int clockPin=12;//SH CP of 74HC595
int dataPin=11; //DS of 74HC595
char LED_pin=0x00;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop()
{
for(int i=0; i<8; i++)
{
LED_pin=~(0x01<<i);
digitalWrite(latchPin,LOW); //低电位表示启动
shiftOut(dataPin,clockPin,LSBFIRST,~LED_pin);
digitalWrite(latchPin,HIGH); //高电位表示停止
delay(25);
}
LED_pin=0x01;
}
说明
1、 函数shiftout目的在于1个执行时间内输出第4个参数j的某一个位。1个字符有8个位,若希望从高位(左边)开始,第三个参数设定为MSBFIRST;若从低位右边)开始,则设定为LSBFIRST。前两个参数只是引脚定义。
2、这里直接采用的移位的方法来设置每一位的高低电平更加高效;
运行效果:、