本节重点:实现一个LED流水灯程序
预备知识:
一、C语言常用到的预处理命令
1、define
define是宏定义,程序在预处理阶段将用define定义的内容进行了替换 。因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。
使用#define定义的常量也称为符号常量,可以提高程序的运行效率。
其常见的用法包括两种,分别是:
1)#define 宏名 宏值
2)#define 宏名(参数列表)表达式
而define命令的用法一般分为两种:
第一种语法就是定义符号常量
第二种语法常用来定义符号函数。
举例说明一下:
#define A 3.14
执行这个条件之后,就是能直接将3.14的数值给到A上。
#define AREA(x,y)(x)*(y)
表示用来求长和宽分别是x和y的矩形的面积。
二、函数循环左移/右移
crol (a,b);循环左移函数,a是左移的值,b是左移的位数。包含在intrins.h库函数里面。
cror (a,b);循环右移函数,a是右移的值,b是右移的位数。包含在intrins.h库函数里面
编写程序:
有了上述的知识储备之后,我们在编写一个LED流水灯的程序。
流水灯思路:
首先点亮第一个LED灯,然后延时一段时间,再将当前LED熄灭,然后点亮第二个LED灯,这个过程通过一个函数移动的方式去实现,再延时一段时间,熄灭LED灯,如此往复的循环下去,就能实现一个LED灯的流水视觉。
(本此实验LED灯组采用的是共阴极接法,也就是说需要单片机引脚输出一个1,才会使得LED灯点亮)
程序编写:
#include< reg52.h > //头文件
#include< intrins.h > //头文件
typedef unsigned char u8; //定义类型
typedef unsigned int u16;
#define led P2 //定义LED灯组使用的是P2的八个引脚
void delay(u16 i) //延时函数delay
{
while(i--);
}
void main()
{
u8 i=0; //定义变量i
led=0x01; //设置LED灯组的初始状态值(0000 0001,使用的是共阴极)
delay(50000);
while(1)
{
for(i=0;i< 7;i++) //for循环函数,初始值i为0,满足i< 7的条件,每次循环一次执行i自加1
{
led=_crol_(led,1); //LED左移函数,每次执行for循环执行一次函数移动
delay(50000);
}
for(i=0;i< 7;i++)
{
led=_cror_(led,1); //LED右移函数,每次执行for循环执行一次函数移动
delay(50000);
}
}
}
全部0条评论
快来发表一下你的评论吧 !