完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
在上一次的实验当中,也就是昨天的时候,历经千辛万苦,总算是理解的延时的计算,多少明白点了汇编语言的写法,以及看到汇编或者是C语言之后,如何去进行两者之间的相互转换。虽然如果你给我一个延时时间,让我直接去写出延时函数,我目前还不行。但这不是有软件嘛,自动生成就好了,哥们我只需要去理解即可,基础的做好吧。
那么这篇博客,个人就来接着上一次的流水灯实验,来说说刚做好的“流水灯来回循环点亮”。 实验所用到的程序如下: #include《reg51.h》 #include《intrins.h》 #define led P0 void delay500ms(void) //误差500ms { unsigned char a,b,c; for(c=205;c》0;c--) for(b=116;b》0;b--) for(a=9;a》0;a--); //此处的难点就在于对于延时时间的计算与设定。 } void main() { unsigned char i,j; led=~0x01; // 点亮第一个led灯。 delay500ms(); // 延迟500ms,等待一个灯被点亮。 for(i=0;i《7;i++) // 将led右移一位 { led=_crol_(led,1); // led灯轮流输入低电平,也就是轮流点亮。 delay500ms(); } for(j=1;j《7;j++) { led=_cror_(led,1); delay500ms(); } } 其实如果对比昨天的实验程序,你会发现只多了一个右移函数的使用,另外就是一个for循环的使用了。刚开始我以为把左移函数当中的i《7,改为i《4,后面的循环当中加上一个i《3即可了。但在把程序烧录进入单片机之后,发现实验现象并不是我像的那样,只有前几个灯开始来回点亮。这个时候,我就意识到自己应该是错了,有点离谱的那种,没有理解for循环的意思。这也是自己学习单片机到现在一直都有的毛病。 之后我又做了一个实验,那就是让led灯先点亮中间的I/O口,因为我调用的是P0口,所以应该是把P0.3口先点亮。之后让他先向右循环点亮四个I/O口,再返回P0.3口,再向左循环点亮3个I/O口。 实验程序如下: #include《reg51.h》 #include《intrins.h》 #define led P0 void delay500ms(void) //误差500ms { unsigned char a,b,c; for(c=205;c》0;c--) for(b=116;b》0;b--) for(a=9;a》0;a--); //此处的难点就在于对于延时时间的计算与设定。 } void main() { unsigned char i,j; led=~0x08; // 点亮第一个led灯。 delay500ms(); // 延迟500ms,等待一个灯被点亮。 for(i=0;i《3;i++) // 将led右移一位 { led=_cror_(led,1); // led灯轮流输入低电平,也就是轮流点亮。 delay500ms(); } led=~0x08; // 点亮第一个led灯。 delay500ms(); for(j=0;j《4;j++) { led=_crol_(led,1); delay500ms(); } } 这里首先就要把P0.3口输入低电平,这其实和最开始的点亮led灯是一样的道理,运用到了16进制和十进制的转换。之后就进入一个简单的for循环,让点亮之后延迟500ms的低电平先进入P0.4口,点亮。之后就是把第一个for循环给执行完毕,也就是把P0.3-P0.7这几个I/O口给全部输入低电平。 然后在程序当中,我就又直接加入了最开始的点亮P0.3口的输出低电平程序,为的就是再次让程序运行到P0.3口开始执行。后面就是一个左移函数了,向左点亮P0.0-P0.3这四个I/O口。 到这里,我的LED点灯,以及流水灯实验也就全部结束了。总结下吧: 1,首先要敢于去写,想学会单片机,不下功夫是不行的。遇到不会的知识,就要学习去百度,新手刚学,咱要搞懂基础的东西。不要给了实例,自己看懂了就行,看懂和能写出来这是两码事情。 2,回归到实验当中去说。首先要搞懂各种定义,比如***it led=P0^.0。这就是很简单的定义一个位变量名,直接把P0.0口用“led”给代替了,也是为了后续书写方便。紧接着就是各种库了,比如#include 《intrins.h》,这个库可以调用很多的特殊寄存器以及特殊位变量,外加就是左移和右移函数的调用了。然后就是#define led P0,这其实和之前的定义没什么区别,不过一个是定义位变量,一个是定义了总的I/O口。 再往后就是理解延时的计算了,懂的汇编和C语言之间的转换,知道循环该怎么去算机器周期,可以套用公式。 3,最后就是有想法就去做,不会就去查,不要怕,每天时间很多,深入学习会发现很多新奇的东西,继续加油! |
|
|
|
只有小组成员才能发言,加入小组>>
2496 浏览 0 评论
1059浏览 2评论
678浏览 1评论
440浏览 0评论
175浏览 0评论
292浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 14:36 , Processed in 0.992465 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号