新闻中心

EEPW首页>嵌入式系统>设计应用> 51单片机系列连载2—美丽的发光二极管

51单片机系列连载2—美丽的发光二极管

作者: 时间:2016-11-27 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/201611/322434.htm

法二:使用数组

#include

unsignedchartable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

voidyanshi();

voidmain()

{unsignedinti;

while(1)

{

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

{P1=table[i];(注意,在这里的大括号是一定要加的,否则你就out了)

yanshi();

}}}

voidyanshi()

{unsignedinti;

for(i=0;i<10000;i++);}

法三:左移右移

#include

unsignedchartable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsignedinti;

voidyanshi();

voidmain()

{P1=0xfe;

while(1)

{P1=P1<<1;

P1=P1|0x01;(因为是左移而不是循环左移,所以要末位置一,这样的结果也会导致最后只挨个量一次)

yanshi();}

}

voidyanshi()

{unsignedinti;

for(i=0;i<10000;i++);}

其实想想并不是很难,就是赋值控制亮灭,主要是记住延时那个函数,最后调用就可以了,在这个基础上再拓展一下,双灯左移右移闪烁,也就是双灯左移7次,右移7次,然后全闪7次,程序如下:

#include

voidDelay(unsignedinti);

voidmain()

{unsignedchari;

unsignedchartemp;

while(1)

{temp=0xfc;

P1=temp;

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

Delay(50000);

{temp<<=1;

temp=temp|0x01;

P1=temp;}之所以加入temp做中间变量,防止直接操作端口造成的短暂闪烁

Temp=0x3f;

P1=temp;

For(i=0;i<7;i++)

{Delay(50000);

Temp>>=1;

Temp|=0x80;

P1=temp;}

For(i=0;i<3;i++)

P1=0xff;

Delay(50000);

P1=0x00;

Delay(50000);}

}}

voidDelay(unsignedinti)

{

while(--i);

}

这么一分析,发光二极管真的很简单,赋值端口,控制亮灭,延时,调用函数,基本上就可以了,最重要的是c语言简单知识的一些规范,这都是入门的,不难理解,细心一些就好了,个人觉得比较好的还是自己写程序去调试,调试次数多了,自然而然就熟悉了,孰能生巧,对很多事情都是亘古不变的真理,学习更是如此。


上一页 1 2 下一页

评论


技术专区

关闭