51系列单片机学习-创新互联

1.点亮一个led灯

创新互联于2013年成立,先为富宁等服务建站,富宁等地企业,进行企业商务咨询服务。为富宁企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

//#include "reg52.h"  使用引号和<>都可以
#include
sbit LED8 = P2^7;  // sbit为位定义,定义单片机的P2^7引脚为LED8

void main()
{
  LED8 = 0;  //单片机输出高电平,LED8设置位低电平,灯就会亮起
  while(1)
  {
      
  }
}

2.led闪烁

  led闪烁实际就是在点亮led的基础上加上延时函数就可以实现,重点在于延时函数的定义,以及延时时长,在合适的位置放置延时函数。

#include "reg52.h"

typedef unsigned char u8; //类型是1个字节
typedef unsigned int u16; //类型是2个字节的

sbit LED1 = P2^0;

void delay_10us(u16 ten_us)
{
     while(ten_us--);
}

void main()
{
 while(1)
 {
     LED1 = 0;
     delay_10us(50000); //
     LED1 = 1;
     delay_10us(50000);
 }
}

3.流水灯实现-笨方法

  获取到每个led灯的位,然后在每个灯的亮灭之间加上合适的延时,按照自己想要的顺序编写即可实现。

#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;

sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;

void delay_10us(u16 nus)  //nus为1时延时时间为10us
{
 while(nus--);
}

void main()
{
 while(1)
 {
     LED1=0;
     delay_10us(50000);
     LED1=1;
     
     LED2=0;
     delay_10us(50000);
     LED2=1;
     
     LED3=0;
     delay_10us(50000);
     LED3=1;
     
     LED4=0;
     delay_10us(50000);
     LED4=1;
     
     LED5=0;
     delay_10us(50000);
     LED5=1;
     
     LED6=0;
     delay_10us(50000);
     LED6=1;
     
     LED7=0;
     delay_10us(50000);
     LED7=1;
     
     LED8=0;
     delay_10us(50000);
     LED8=1;
     
     LED7=0;
     delay_10us(50000);
     LED7=1;

     LED6=0;
     delay_10us(50000);
     LED6=1;
     
     LED5=0;
     delay_10us(50000);
     LED5=1;
     
     LED4=0;
     delay_10us(50000);
     LED4=1;

     LED3=0;
     delay_10us(50000);
     LED3=1;
     
     LED2=0;
     delay_10us(50000);
     LED2=1;
     

 }
}

4.led流水灯---移位+循环实现

  使用左移操作符<< + for循环实现流水灯。define详解:http://t.csdn.cn/7JyIS

#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;

#define LED_PORT    P2//使用宏定义端口,对端口状态进行移位操作

void delay_10us(u16 nus)
{
 while(nus--);
}

void main()
{
 u8 i ;
 while(1)
 {

     for(i=0;i<8;i++)
     {
         LED_PORT=~(0x01<1111 1110    左移一位循环=>1111 1101,实现8个流水灯效果
         delay_10us(50000);
     }

 }
}

5.流水灯-使用左移右移库函数实现

  调用封装好的函数来实现流水灯,#include。intrins.h,函数,应用于程序设计,一般出C51单片机编程中,一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用。

#include
#include

typedef unsigned int u16;
typedef unsigned char u8; 

#define LED_PORT P2

void delay_10us(u16 ten_us)
{
 while(ten_us--);
}

void main()
{
 u8 i;
 LED_PORT =~0x01;
 delay_10us(50000);
 while(1)    
 {
         for(i=0;i<7;i++)
       {
         LED_PORT=_crol_(LED_PORT,1);
         delay_10us(50000);
         }
         for(i=0;i<7;i++)
         {
         LED_PORT=_cror_(LED_PORT,1);
         delay_10us(50000);
         }
 }
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享文章:51系列单片机学习-创新互联
分享地址:http://pwwzsj.com/article/cdiscc.html