您的位置 首页 资料

第5课 让发光二极管闪耀

在第4课中我们分别用位操作法和总线操作法点亮了第一个发光二极光,也可以说正式迈出了单片机程序设计的第一步,相信通过前面的学

在第4课中咱们分别用位操作法和总线操作法点亮了第一个发光二极光,也能够说正式迈出了单片机程序规划的第一步,信任经过前面的学习,咱们现已能够很轻松的点亮发光二极管。但光会点亮发光二极管必定不行的,咱们常常能够看到外面街头巷尾各式各样美丽的闪耀的流水或者说广告灯,如图1,这是怎样完成的呢,这节课咱们就来讲下如让发光二极管闪耀和流水灯程序的规划。

图1 美丽的广告灯
1怎么完成发光二极管闪耀和简略延时
学过汇编的同学都清楚,单片机机在履行指令时,是一条一条指令次序履行的,关于C言语也相同,也是一条一条句子履行,而每履行一条指令或一条句子,都要占用必定的时刻,使用单片机履行程序的这个特色就可能用来完成发光二极管闪耀。
详细方法就如图2所示,是先点亮发光二极管,然后写一条延时句子,在这段延时时刻内,单片机什么事也不做,而此刻发光二极管仍是一向坚持亮的状况,然后延时时刻完后,再让发光二极管平息,平息后也写一条延时程序,而在这段时刻内,发光二极管一向坚持平息,直到延时时刻结束再复上而的亮的进程,这样一向不断的循环下去就完成在发光二极不断闪耀。
图2 发光二极管闪耀 
延时能够由while句子来完成,也可由for句子完成,因为前面咱们现已介绍过while句子,所以这儿先介绍怎么使用while句子完成延时。
(1)使用while句子进行延时
因为while句子在前咱们现已解说过,这儿直接给出程序如例1。
例1 使用whiel句子完成发光二极管闪耀程序
#include
sbit D1=P1^0;
unsigned int a;
void main()
{
while(1)
{
a=50000;
D1=0;
while(a–);
a=50000;
D1=1;
while(a–);
}
}
程序剖析:上面程序中呈现了新的句子,unsigned int a;因为程序的需求,这儿咱们先界说了一个变量a,所谓变量其实便是代表单片机内存中具有特定特点的一个存储单元,它用来寄存数据,也便是变量的值,如下面的a=50000,在程序中这些值是能够改动的。其间a表明变量的姓名,unsigned int是无符号整形的意思,它的取值规模为0-65535,也便是界说成此类型后,在对程序编译时,编译体系会给这个变量分配一个存储空间用来寄存数据,且无符号整形的空间存数的规模为0-65535。 后边的程序对a赋值时,其规模只能是0-65535,如程序后边的a=50000,假如此刻咱们对a赋值a=70000,此刻编译时便是报错。咱们也能够把变量a界说为其它类型的,如unsigned char a表明为把变量a界说为无符号字符型,其赋值规模为0-255
当然咱们也能够界说其它的类型 short int、float等,但作为单片机初学者,一般只用到无符号字符型unsigned char(赋值规模为0-255)和无符号整形unsigned int(赋值规模为0-65535)两种,其它类型能够暂时不论,详细请参阅C言语相关书本。
unsigned int a理解后,下面便是一个大循环while(1),在大循环里,咱们先给a赋值50000,然后灯亮D1=0,再进行延时while(a–)(a–,表明自减1的意思,while(a–),表明a从50000开始自减50000次,此刻每自减1有必定的时刻,所以自减50000次相当于延时的意思),再后的程序便是延时后再灯灭,再延时,再重复前面的进程,终究就能够完成灯一亮一灭闪耀的现象。下载到试验室的现象如图3所示。
图3 发光管闪耀
经过上面程序咱们完成 了发光管闪耀的功用,但这儿闪耀的距离时刻咱们并不清楚详细是多少,咱们只能依据详细的屡次试验确认咱们所需的时刻距离,假如真实要知道的话,能够经过51单片机的软件仿真得出,这儿咱们不作解说,今后等咱们单片机学得差不多再去学习。
下面咱们再给出另一种程序延时的for句子的写法,这种写法在详细的项目用得更多。
(2)for句子及其延时
for句子是C言语中重要的句子,其格局如下:
格局:

使用for句子相同能够写出延时程序,例如:
unsigned int i;
for(i=1;i<=3;i++) ;
这儿首要界说了一个无符号变量i,在for句子中,i=1为表达式1;i<=100为表达式2;i++为表达式3,for句子内程序履行如下
1、给变量i赋值为1;
2、判别i是否小于等于3;此刻值为真,即履行for中的句子,此处for后边的句子为空句子,省掉不写,
相当于什么都不履行,然后跳到句子3;
3、履行i++,i++为自加1的意思,此刻i的值变为2,
4、跳到第2 步判别i是否小于等于3,此刻依然小于等于3,又履行空句子;
5、履行i++,此刻i的值变为3;
6、跳到第2 步判别i是否小于等于3,此刻等于3,直接跳出;
经过上面6步,for句子履行结束,留意,单片机在履行每一条句子的时分都需求必定的时刻,此刻咱们只需求改动表达式2的值就
能够得到咱们想要的延时时刻了。
此处需求留意的时,咱们把i界说为无符号整形后,i的值最大值只能为65535,也便是使用上面的格局,咱们能够写出最大的延时程序如下:
unsigned int i;
for(i=1;i<=65536;i++)
但咱们此刻如还需求更长的时刻时,假如再让i值变大的话,编译时就会犯错,此刻咱们能够写成如下的写法:
unsigned int i;
unsigned int j;
for(i=1;i<=65536;i++)
{
for(j=1;j<=100;j++);
}
上面的句子称为c句子的嵌套,是指一个for句子中又包括一个完好的for句子,内嵌的句子还能够嵌套for句子,这称为多层嵌套,咱们这儿只要两层。
留意第一个for句子后边没有“;”,这儿第一个for句子履行了65535次,第二个for句子履行了100次,相当于一共履行了655535×100次,这样的写法就能够写出较长的延时时刻。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/317333.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部