查看“第二课--多个led的闪烁实验/zh”的源代码
←
第二课--多个led的闪烁实验/zh
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{{Language|Lesson_2--Multiple_led_flashes_experiments}} {| style="width: 800px;" |- | ==目的== 通过第一个实验,我们已经知道如何控制一个led灯,接下来稍微扩展下,制作花样流水灯。 ==设备== *[[ Microduino-CoreSTM32]] Microduino-CoreSTM32是采用 STM32F103CBT6芯片的ARM开发板,采用独特的Upin7接口,大小与一枚一元硬币差不多大,完全兼容Microduino其他扩展模块。 *其他硬件设备 **面包板跳线 一盒 **面包板 一块 **LED发光二极管 八个 **220欧姆电阻 八个 **USB数据连接线 一根 [[File:STM32-lesson2All.jpg|600px|center|thumb]] ==实验原理图== 我们采用8个led灯,因此我们需要用到8个I/O口。 [[File: STM32-lesson2Setup.jpg|600px|center|thumb]] led的阴极接Microduino-CoreSTM32的GND,阳极接Microduino-CoreSTM32数据控制口D3~D10,高电平点亮led。我们可以通过设置高低电平来实现花样流水的效果。 ==程序== *程序一: <source lang="cpp"> void setup() { //定义数字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> 我们来看看程序结构: 采用for()循环结构语句,通过pinMode()函数定义数字D3~D10脚为输出,再通过for()循环依次让每个led灯闪烁。 *程序二: 采用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代表了Microduino-CoreSTM32I/O口对应16进制的某位, 0是最低位,7是最高位。再将移的数据与0x01按位与,就可以得到16进制数某位的 数据(0或1),再将其值赋值给Microduino-CoreSTM32的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> 将16进制数对应赋值到I/O,比如0x18表示2进制的00011000,对应值为“1”的灯亮,“0”的灭。能简单随意的写出各种花样。 两个实验比较,第一个实验看起来简单,效果单一,并且输出口必须连续,局限性很大。第二个实验就优化了,利用数组,将16进制的每位得值都赋值给指定的I/O口,可以实现花样流水。 ==调试== *按照原理图接线 [[File: STM32-lesson1yuanli.jpg|600px|center|thumb]] *打开Maple IDE编译器,将程序拷贝到编译器中,选择好板卡(Microduino-CoreSTM32 to Flash)。点击下载按钮或者使用快捷键(Ctrl+U)即可完成下载。 ==结果== *程序一 led从左到右依次循环点亮每一个led。 *程序二 可以看到五种花样效果:单独一个从左至右亮;单独一个从从右至左亮;两边往中间亮及中间往两边亮;从左到右依次点亮;从右到左依次熄灭。|}
该页面使用的模板:
模板: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
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息