首页 > 代码库 > 51单片机第一弹---流水灯
51单片机第一弹---流水灯
转行搞硬件。。acm算是走到头了,毕竟电子是自己专业的特色。。
初撸单片机,买的板子是STC89C52(某宝58大洋淘来的。。) 郭天祥新概念的那本书(好像有点不配套不过凑活着弄了也。。)
说一下容易犯的错误吧。
1.串口驱动搞了1个多小时。。一直安装不上,后来跟着教程做的
2.书上写的控制LED端口的是P1 ,但实际上买的这快板子是P2 ,最开始搞了半天老是点不亮灯,后来一想会不会端口错了,换成0试试?换了不行,又换了2.。亮了(这是个问题,以后要找学长问问,怎么根据开发板看出来每个模块的端口?我找了一会也没找到。。)
3.工程式的代码敲起来有点不太习惯。。而且吐槽一下Keil 4 ,没缩进还能不能愉快的玩耍了。。
内容:
一:LED工作原理
贴张原理图。。
最开始看书上讲的原理很抽象。。这张图不错,很清楚
二:代码实现流水灯
基本思路:初始化状态为1111 1110 即只有最左边的灯亮,然后间隔性的往右移动0,(用到位移函数_crol_(a,b) 将a左移b位,循环左移并非像<< 运算似的最低位补0,右移自己脑补) 用到延时函数。。其实就是用循环卡住,大约O(24700000)==10ms
#include<reg52.h> #include<intrins.h> #define GPIO_LED P2 #define uint unsigned int #define uchar unsigned char void Delay10ms(uchar n); void main() { uchar i; GPIO_LED=0xfe;//1111_1110 while(1) { for(i=0;i<7;i++) { GPIO_LED=_crol_(GPIO_LED,1); Delay10ms(1); } for(i=0;i<7;i++) { GPIO_LED=_cror_(GPIO_LED,1); Delay10ms(1); } } } void Delay10ms(uchar n) { uchar i,j,k; while(n--) { i=50; while(i--) { j=38; while(j--) { k=130; while(k--); } } } }
51单片机第一弹---流水灯
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。