“第二课--多个led的闪烁/zh”的版本间的差异
(→设备) |
|||
(未显示2个用户的6个中间版本) | |||
第1行: | 第1行: | ||
− | {{Language|Lesson_2-- | + | {{Language|Lesson_2--Multiple_led_flashes_experiments}} |
{| style="width: 800px;" | {| style="width: 800px;" | ||
|- | |- | ||
第7行: | 第7行: | ||
==设备== | ==设备== | ||
− | *'''[[Microduino-Core]]''' | + | *'''[[Microduino-Core/zh]]''' |
− | *'''[[Microduino- | + | *'''[[Microduino-USBTTL/zh]]''' |
*其他硬件设备 | *其他硬件设备 | ||
**面包板跳线 一盒 | **面包板跳线 一盒 | ||
第14行: | 第14行: | ||
**LED发光二极管 八个 | **LED发光二极管 八个 | ||
**220欧姆电阻 八个 | **220欧姆电阻 八个 | ||
− | **USB数据连接线 一根 | + | **USB数据连接线 一根 |
+ | |||
+ | [[File:lesson2All.jpg|600px|center|thumb]] | ||
==原理图== | ==原理图== | ||
第21行: | 第23行: | ||
其实数码管共阴、共阳就是这个原理,以后会详细介绍驱动数码管。 | 其实数码管共阴、共阳就是这个原理,以后会详细介绍驱动数码管。 | ||
− | [[File: | + | [[File:schematic2.jpg|600px|center|thumb]] |
==程序== | ==程序== | ||
第107行: | 第109行: | ||
*程序2 | *程序2 | ||
可以看到五种花样效果:单独一个从左至右亮;单独一个从从右至左亮;两边往中间亮及中间往两边亮;从左到右依次点亮;从右到左依次熄灭。 | 可以看到五种花样效果:单独一个从左至右亮;单独一个从从右至左亮;两边往中间亮及中间往两边亮;从左到右依次点亮;从右到左依次熄灭。 | ||
+ | |||
+ | [[File:lesson2Result1.jpg|600px|center|thumb]] | ||
+ | [[File:lesson2Result2.jpg|600px|center|thumb]] | ||
+ | [[File:lesson2Result3.jpg|600px|center|thumb]] | ||
+ | |||
==视频== | ==视频== | ||
|} | |} | ||
+ | |||
+ | http://v.youku.com/v_show/id_XNzA5OTk3MjI4.html |
2014年10月29日 (三) 03:24的最新版本
Language | English |
---|
目的已经讲了点亮一个led的方法,接下来稍微扩展下,控制多个led依次闪烁。巩固与深化下microduino的I/O口用法。 设备
原理图
其实数码管共阴、共阳就是这个原理,以后会详细介绍驱动数码管。 程序
void setup() {
//定义microduino数字D3~D10脚为输出
for(int i=3;i<11;i++)
pinMode(i, OUTPUT);
}
void loop() {
for(int i=3;i<11;i++)
{
digitalWrite(i, HIGH); // 数据口i(D3~D10)输出高电平
delay(50); //延时50ms
digitalWrite(i, LOW); //// 数据口i(D3~D10)输出低电平
delay(50); //延时50ms
}
}
/*===============================================
ox(高-低:10,9,8,7)(高-低:6,5,4,3)
例如
0x81:10000001
10,9,8,7,6,5,4,3
↓ ↓ ↓ ↓↓ ↓↓ ↓
1 0 0 0 0 0 0 1
在共阴即所有led阴极都接在一起情况下,1代表亮,0代表灭,
就可以通过数组形式直接控制亮度。
=================================================*/
long data[]=
{
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,//单独一个从左至右亮
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,//单独一个从从右至左亮
0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,//两边往中间亮及中间往两边亮
0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,//从左到右依次点亮
0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,//从右到左依次熄灭
};
void setup()
{
for(int x=3;x<11;x++)
{
pinMode(x,OUTPUT);//设置输出引脚
}
}
void loop()
{
for(int x=0;x<40;x++)//分别读取不同花样灯
{
leddisplay(data[x]);
delay(200); //每个状态显示200ms
}
leddisplay(0x00);//循环完毕全灭
delay(200);
}
void leddisplay(int num) // 将花样字模对应到端口显示
{
/*====================================================================
先将16进制数向右移x位(num>>x),x代表了microduinoI/O口对应16进制的某位,
0是最低位,7是最高位。再将移的数据与0x01按位与,就可以得到16进制数某位的
数据(0或1),再将其值赋值给microduino的I/O就行。
====================================================================*/
digitalWrite(3, ((num>>0)&0x01));
digitalWrite(4, ((num>>1)&0x01));
digitalWrite(5, ((num>>2)&0x01));
digitalWrite(6, ((num>>3)&0x01));
digitalWrite(7, ((num>>4)&0x01));
digitalWrite(8, ((num>>5)&0x01));
digitalWrite(9,((num>>6)&0x01));
digitalWrite(10,((num>>7)&0x01));
}
此实验类似51单片机流水灯写法,将16进制数组赋值到I/O,比如0x18表示2进制的00011000,对应值为“1”的灯亮,“0”的灭。能简单随意的写出各种花样。 两个实验比较,第一个实验看起来简单,效果单一,并且输出口必须连续,局限性很大。第二个实验就优化了,利用数组,将16进制的每位得值都赋值给指定的I/O口,可以实现花样流水。 结果
led从左到右依次循环点亮每一个led。
可以看到五种花样效果:单独一个从左至右亮;单独一个从从右至左亮;两边往中间亮及中间往两边亮;从左到右依次点亮;从右到左依次熄灭。 视频 |