1、LED相关操作(点亮、闪烁、流水灯)

一、LED的相关知识
         1.LED,即发光二极管,是一种半导体固体发光器件。
         2.LED的工作原理:LED的工作是有方向性的,只有当正级接到LED阳极,负极接到LED的阴极的时候才能工作,如果反接LED是不能正常工作的。
         3.LED的原理图解析:开发板上面LED的原理图如右图,LED的阳极串联一个电阻,然后连接到电源VCC,而LED的阴极连接到单片机的P2口,如果你想点亮一盏LED就对把单片机相对应的IO赋为低电平。

 

二、点亮第一盏LED

1、LED相关操作(点亮、闪烁、流水灯)_第1张图片

#include

sbit led=P2^0;

void main()
{
	while(1)
	{
		led=0;
	}
}

 

三、LED闪烁

 

1.#typedef使用
    typedef unsigned char u8;
    typedef unsigned int u16;(后面要加分号)
    重新定义一些常用的关键词,可以增强程序的可移植性,因为在不同的编译软件上面,C语言的数据类型的关键词的位宽是不一样的。

2.while循环函数
while(i<10)
{
       i=i+1;
}
while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。

 

3.延时函数
void delay(u16 i)//大约延时10us
{
       while(i--);     
}

以下程序端口可以更换,同时延时不同,闪烁的频率不同,先置低电平点亮,再置高电平熄灭。

//LED闪烁实验
#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit led=P2^0;		 //将单片机的P2.0端口定义为led

// 延时函数,i=1时,大约延时10us

void delay(u16 i)
{
	while(i--);	
}

void main()
{
	while(1)
	{
		led=0;
		delay(50000); //大约延时450ms
		led=1;
		delay(50000); //大约延时450ms	
	}		
}

 

四、LED流水灯
        1.C语言常用预处理命令
            #define使用
            #define A P0(注意后面不用加分号)
        2.循环左移右移函数
        _crol_(a,b);循环左移函数,a是左移的值,b是左移的位数。包含在instrins.h库函数里面。
        _cror_(a,b);循环右移函数,a是右移的值,b是右移的位数。包含在instrins.h库函数里面。

 

PS:大括号里注释的内容,与下面两个移位函数所呈现的结果有一点点不一样,,注释的内容是从P2^0开始依次亮到P2^7,然后直接又从P2^0开始亮,而使用的移位函数是从P2^0开始依次亮到P2^7,再从P2^7开始依次亮到P2^0。我经过改动注释掉的内容,出现以下几种现象,以此对其移位有了更进一步的了解。首先是1.P2=~(0X01<(左移1位)0000 0010——>(取反)1111 1101(就实现了移动,后面类似) 2.我又将其取反符号删去,就会七个灯亮,然后依次熄灭,但是前一个又变亮。

// LED流水灯实验	

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
#include		//因为要用到左右移函数,所以加入这个头文件

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

#define led P2	   //将P2口定义为led 后面就可以使用led代替P2口


void delay(u16 i)
{
	while(i--);	
}

void main()
{
	u8 i;
	led=0xfe;
	delay(50000); //大约延时450ms	
	while(1)
	{	
/*		for(i=0;i<8;i++)
		{
			P2=~(0x01<


 

 

 

你可能感兴趣的:(51单片机笔记)