第九篇:流水灯制作(二)

 

第八篇提到了一种制作流水灯的方式,可是代码显得很冗杂,仔细想想原因也就是当时用的位定义,每一步操作都需要对位进行操作,那我们是否有一种方法可以不对位操作,而是直接对那一组端口进行操作呢?理论上说是可以做到的,还是用上一篇的原理图,简单操作一下。当然,对于51来说,对整组端口进行操作制作出流水灯的效果还是有两种方案。首先用到了我们在第四篇“各种各样的符号你认识吗”中的左移右移,按自己的需求进行选择。第一种,我们以从led1到led8依次点亮作为例子来讲解。

#include<reg51.h>

void delay()

{

int x,y,z;

for(x=0;x<100;x++)

for(y=0;y<100;y++)

for(z=0;z<100;z++);}

int main()

{

int i;

unsigned char temp;

temp=0x01;

for(i=0;i<8;i++)

{PA=temp;

temp<<=1;

delay();}

}

程序很简单吧,很短,比上一篇提到的要少不少吧!这就是直接对整组端口惊醒操作。有一点需要指出来,就是许多51的板子上用的并不是PA,而是P1,这一点一定要注意,总的来说,问题不大,详情大家可以比照前面写过的一篇文章点亮一个LED比对一下,运行一下FOR函数的执行方式,很容易就可以了解到这个程序的运行方式。

第二种程序也很简单,就是加入了一个库,少了一些其他的东西。

#include<reg51.h>

#include<intrins.h>

void delay()

{

int x,y,z;

for(x=0;x<100;x++)

for(y=0;y<100;y++)

for(z=0;z<100;z++);}

int main()

{

int i;

unsigned char temp;

temp=0x01;

while(1)

{

P1=temp;

delay();

temp= _crol_(temp,1);}

}

第二种方法和第一种方法差不多,只是引入了一个新的库函数,intrin.h;在这个库里有一个子函数是_crol_(char s,int x)和_cror_(char s,int x)分别是将s按位左移和右移x位,当然,这个是循环的,当左移时1到达最高位,下一次左移一位时,1便是最低位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值