LED灯的闪烁需要用到时间,时间需要数据,既然有了数据就会使用不同的数据类型,C51基本数据类型、C51扩充数据类型,延时功能主要使用基本数据类型,根据数据类型来给变量赋值,如果赋值超出了数据类型表示范围,单片机加载程序后不能正常运行。
一、C51基本数据类型
二、C51扩充数据类型
三、LED灯闪烁实现方式
LED灯闪烁主要是通过程序控制LED灯点亮,亮一会儿,LED灯灭,灭一会儿。把这段描述的语句用编程语句来代替可以通过下面三种方法来实现。
1、简单循环语句延时的方法实现
2、软件延时函数(无参数)的方法实现
(1)结合第一个简单循环语句进行修改得到下图所示程序。
把 unsigned int i = 20000; while(i--);语句封装在自定义延时函数中,自定义函数一般有函数声明、函数定义、函数调用三部分组成,如果自定义函数放在主函数之前,程序书写方式如下图所示。为了使程序更加完善,便于他人查找函数功能,我们还是采用先声明、再定义,然后在主函数中调用的方式,如上图所示。
(2)为了更加精确延时时间,可以使用STC-ISP软件设置延时时间,以500ms为例,按照下图中红框选项来选择,然后点击“生成C代码”,点击“复制代码”,把改延时函数放到主函数后面。
完整程序如下图所示,在程序中多引用了一个头文件 #include <intrins.h>,因为在程序中使用了C51库函数:“_nop_(); ” ,所以要在程序前面添加该库函数的头文件。
3、带参数延时函数的方法实现
接下来介绍最常用的自定函数,带参数的延时函数,可以通过不同数据来改变延时时间。带参数的延时函数功能如下图所示。这里忽略有参函数的讲解,在学单片机之前大家都会提前了解C语言,假如没有C语言基础,可以在网上查找相关资料提前学习。我们在后面编写程序时都会结合下面这个框架对函数功能进行详细说明,为了方便他人查看。
仿真电路使用【51单片机】1-LED灯的点亮(位操作与字节操作)Proteus 8.6 仿真中的电路,程序编译后加载到仿真电路可以观察LED灯亮灭效果。