查看“第二课--多个led的闪烁/zh”的源代码
←
第二课--多个led的闪烁/zh
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{{Language|Lesson_2--Multiple_led_flashes_experiments}} {| style="width: 800px;" |- | ==目的== 已经讲了点亮一个led的方法,接下来稍微扩展下,控制多个led依次闪烁。巩固与深化下microduino的I/O口用法。 ==设备== *'''[[Microduino-Core]]''' *'''[[Microduino-FT232R]]''' *其他硬件设备 **面包板跳线 一盒 **面包板 一块 **LED发光二极管 八个 **220欧姆电阻 八个 **USB数据连接线 一根 [[File:lesson2All.jpg|600px|center|thumb]] ==原理图== *led的阴极接Microduino的GND,阳极接Microduino数据控制口D3~D10,这样就是高电平点亮led。 *led的阴极接Microduino的数据控制口D3~D10,阳极接Microduino的VCC,这样就是低电平点亮led。 其实数码管共阴、共阳就是这个原理,以后会详细介绍驱动数码管。 [[File:schematic2.jpg|600px|center|thumb]] ==程序== *采用数据口直接输出 <source lang="cpp"> 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 } } </source> *采用16进制数组,将数据移位输出送至每个I/O口,花样流水 <source lang="cpp"> /*=============================================== 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)); } </source> 此实验类似51单片机流水灯写法,将16进制数组赋值到I/O,比如0x18表示2进制的00011000,对应值为“1”的灯亮,“0”的灭。能简单随意的写出各种花样。 两个实验比较,第一个实验看起来简单,效果单一,并且输出口必须连续,局限性很大。第二个实验就优化了,利用数组,将16进制的每位得值都赋值给指定的I/O口,可以实现花样流水。 ==结果== *程序1 led从左到右依次循环点亮每一个led。 *程序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
该页面使用的模板:
模板:Language
(
查看源代码
)
模板:Nmbox
(
查看源代码
)
返回至
第二课--多个led的闪烁/zh
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息