完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
流水灯是单片机学习过程中最经典的案例。 程序的实际运行效果是8个LED以一定时间间隔循环点亮,如同节日彩灯一样。 实验电路本身很简单,但要用面包板搭建也相当费时费力,我使用了一块八LED模块就简单多了。 为了对比,我们首先看一个采用Arduino的引脚概念编写的程序。 右下图为实际电路,八LED模块的引脚0~7接我自己的AVR单片机最小系统板的B端口的0~3,也就是Arduino标识为数字引脚的8~13以及D端口的4~7,也就是Arduino的4、5、6、7引脚。 八LED模块的C引脚接我的板子的低电位即GND引脚。 引脚形式编写的流水灯程序 byteledPin[] = {4,5,6,7,8,9,10,11}; //引脚数组 intcurrentLED = 0; //当前要点亮的LED的标记变量 voidsetup() //初始化,只运行一次 { for (int x = 0;x < 8;x++) //8个引脚都设为输出 { pinMode(ledPin[x],OUTPUT); } } voidloop() //主循环 { changeLED(); //调用变换LED函数 delay(500); //延时 } voidchangeLED() //变换LED函数主体 { for (int x = 0;x < 8;x++) //先将8个LED都置低,熄灭 { digitalWrite(ledPin[x],LOW); } digitalWrite(ledPin[currentLED],HIGH); //仅点亮要点亮的LED currentLED++; //要点亮LED计数变量增一 if (currentLED == 8) //如果要点亮LED计数变量等于8 currentLED = 0; //要点亮LED计数变量归零 } 用端口形式编写流水灯程序 这个例程使用端口的概念实现与前例相同的运行效果,但程序代码要短小简洁的多,连线也顺当得多。 右图为我的最小系统板与八LED模块的接线图,请读者注意此例与前例的区别。 此例的引脚直接接B端口的8个引脚,也就是Arduino的8、9、10、11、12、13引脚,以及被晶振占用的两个引脚。 voidsetup() { DDRB = 0xFF; //设置端口B为输出 } voidloop() { byte cnt; PORTB = 0x01; //从最右侧第一个LED开始 for (cnt = 0;cnt < 8;cnt++) { delay(500); //延迟500毫秒 PORTB = PORTB << 1; //左移一位 } } 感兴趣的朋友可以比较一下,也请给出评价。后续,还将给出8段数码管的例子。 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
WIO Terminal +MCP2515 实现车辆OBD的速度监控
10359 浏览 0 评论
60659 浏览 77 评论
5952 浏览 3 评论
一块扩展板完成Arduino的10类37项实验(代码+图形+仿真)
36013 浏览 219 评论
10022 浏览 0 评论
482浏览 1评论
请教:esp32中用u8g2显示shtc3传感器数据到i2c液晶屏,显示不稳定的问题
1235浏览 1评论
1381浏览 1评论
595浏览 0评论
715浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:56 , Processed in 0.665407 second(s), Total 54, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号