微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > c51循环移位的浅谈

c51循环移位的浅谈

时间:11-18 来源:互联网 点击:
如果学习单片机,最基本的考题就是流水灯了,呵呵,可是有时候一个很厉害的工程师,还真是不好弄出来,当然,我不是工程师,可是学习51单片机也有很长时间了,回想起当初学习51的时候,一直都是没有自己的核心的东西,今天就谈谈c51循环移位的见解

记得如果你打开intrins.h(51自带的一个头文件),你会发现其中有关于定义_crol_()(字符循环左移函数)(一般我们用的多的是这个,呵呵),还有一个是_cror_()(字符循环右移函数)

可是,如果你去面试的时候,这个时候,你难道还用它自带的循环函数么?当然不能了。真是的(有时候我们自己小组出的笔试题就是流水灯,可是我却紧锁眉头,感觉很是窝囊。咳,今天就把源程序写出来。)这时候就要用到你的c语言知识了,呵呵。

假如说是共阴极数码管的话:

程序可以这样(只写主要算法):

while(1)

{

temp=0x01;

P1=temp;

delay(100); //延时100ms

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

{

temp=temp<1;

P1=temp;

delay(100);

}

}

可是假如是共阳极流水灯的话,就得写成这样,更好些:

while(1)

{

temp=0xfe;

P1=temp;

delay(100);

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

{

P1=(temp>(8-i);

delay(100);

}

}

看到没有,其中核心的一条语句就是 temp=temp<1;P1=temp;和P1=(temp>(8-i);,其实第一个可以用第二个代替,不过对于共阴极的太过简单,直接写出来就行了,可是对于共阳极的话,就得思考思考了,先左移,然后和右移的数进行相或,这是相当经典的(8次)。呵呵,可能还有更经典的,以后有时间补充上,呵呵。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top