51单片机(V51)学习——流水灯、蜂鸣器

导读:本篇文章讲解 51单片机(V51)学习——流水灯、蜂鸣器,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、三种流水灯模式

(1)板子

在这里插入图片描述

(2)制作流水灯

1、间断性开关法

#include<reg52.h>
//	初始化灯引脚
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
sbit LED5=P1^4;
sbit LED6=P1^5;
sbit LED7=P1^6;
sbit LED8=P1^7;

#define ON  0;
#define OFF 1;
//	延迟函数
void delay(unsigned int xms)
{
	unsigned int i,j;
	for(i=xms;i>0;i--)
		for(j=112;j>0;j--);
}

void main()
{
	while(1)
	{
		LED1=ON;
		delay(300);
		LED1=OFF;

		LED2=ON;
		delay(300);
		LED2=OFF;

		LED3=ON;
		delay(300);
		LED3=OFF;

		LED4=ON;
		delay(300);
		LED4=OFF;

		LED5=ON;
	    delay(300);
		LED5=OFF;

		LED6=ON;
		delay(300);
		LED6=OFF;

		LED7=ON;
		delay(300);
		LED7=OFF;

		LED8=ON;
		delay(300);
		LED8=OFF;
	
	}	

}

2、位移法

#include<reg52.h>
#define ON  0;
#define OFF	1;

void delay(unsigned int xms)
{
	unsigned int i,j;
	for(i=xms;i>0;i--)
		for(j=112;j>0;j--);
}

void main()
{				
	   unsigned int i;								 
	   while(1)
	   {
	   		P1 = 0xfe;	//	1111 1110	初始值
			for(i=0;i<8;i++)
			{
				delay(100);		//	0.1秒 偏移一次
				P1 <<= 1;	 // 1111 1100 此时开灯
				P1 = P1|0X01;  //  1111 1101 此时关灯
			}
	   }
}

3、循环位移法(分文件)

  • 包含头文件 #include<intrins.h>
i = _crol_(i,1)	表示 i 循环左移1位
i = _cror_(i,1)	表示 i 循环右移1

main.c文件

#include<reg52.h>
#include "delay.h"
#include<intrins.h>
sbit FM = P2^3;

void main()
{
	P1=0Xfe;	//初始化 1111 1110
	while(1)
	{
		
		delay(200);
		
		P1 = _crol_(P1,1);	//	让 P1 循环左偏移 1
		
	}

}

delay.c文件

void delay(unsigned int xms)
{
	unsigned int i,j;
	for(i=xms;i>0;i--)
		for(j=112;j>0;j--);
}

delay.h文件

// 	如果没有定义 就定义这个宏,声明延迟函数
#ifndef _delay_h
#define _delay_h

void delay(unsigned int xms);

#endif

二、蜂鸣器+流水灯

  • 蜂鸣器的端口引脚为
  • sbit FM = P2^3;
  • 默认下 FM = 1 (高电平关闭蜂鸣器)
#include<reg52.h>
#define ON  0
#define OFF	1
sbit FM = P2^3;
void delay(unsigned int xms)
{
	unsigned int i,j;
	for(i=xms;i>0;i--)
		for(j=112;j>0;j--);
}

void main()
{
	unsigned int i;
	while(1)
	{  
		P1 = 0xfe;
		for(i=0;i<8;i++){
			delay(100);
			P1 <<= 1;
			P1 = P1|0X01;	//	偏移后开响
			FM = ON;
			delay(100);		//	单片机只能单独执行一次所以要延迟
			FM = OFF;
		}
	}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68458.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!