第二讲 流水灯设计 蜂鸣器发声

1、如何创建一个函数

#include <reg52.h>

unsigned int A;

void delay(unsigned int);  // 可省略形参名称 
/*
如果函数声明和定义都在同一个文件中,声明和定义之间没有其他需要
引用该函数的代码,可以省略函数声明,只保留函数定义 但C51不适用
*/
void main()
{
	while(1){
	A = 50000;
  P2 = 0xFE ;	
	delay(3000);	
	P2 = 0xFD ;
  A = 50000;		
	delay(3000);	
	}

}

void delay(unsigned int time)
{
	unsigned int i,j;
	for(i=0;i<time;i++)
		for(j=0;j<125;j++); // for循环内部只有一条语句可省略大括号
	
}

2、keil如何进行调试

1.工具栏介绍

2.更改晶振频率

频率:串口通讯

3.观测变量的实时变化

4.观察port口的变化

3.流水灯

可使用移位函数

4.蜂鸣器 

蜂鸣器发声的条件

蜂鸣器:有源 无源两种,无源蜂鸣器则需提供一 定频率的脉冲信号才能发声;

即高低电平的翻转。

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器


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

sbit beep=P1^5;	   

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

void main()
{	
	while(1)
	{	
		beep=~beep;
		delay(10); //延时大约100us   通过修改此延时时间达到不同的发声效果	
	}
}

### 单片机控制流水灯蜂鸣器同时工作的代码示例 为了实现单片机控制流水灯并使蜂鸣器同步发声的效果,可以采用如下所示的C语言代码。这段代码基于51系列单片机编写,并假设使用了常见的8位微控制器架构。 ```c #include <reg51.h> // 定义LED连接到P2端口上的低四位(P2.0-P2.3),共四个LED形成流水灯光效 sbit LED1 = P2^0; sbit LED2 = P2^1; sbit LED3 = P2^2; sbit LED4 = P2^3; // 将蜂鸣器定义在P1.5上 sbit BEEP = P1^5; void Delay(unsigned int time) { unsigned int i, j; for (i = 0; i < time; i++) // 外层循环次数决定总的延时长度 for (j = 0; j < 1275; j++); // 内层循环提供更精细的时间控制 } void main(void){ while(1){ // 主函数无限循环执行以下操作 // 设置初始状态:关闭所有LED和蜂鸣器 LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0; BEEP = 0; // 开始逐个点亮LED并伴随短促的蜂鸣声 LED1 = 1; // 点亮第一个LED BEEP = 1; // 打开蜂鸣器 Delay(500); // 延迟一段时间保持当前显示模式 BEEP = 0; // 关闭蜂鸣器 Delay(500); LED2 = 1; // 接着点亮第二个LED... BEEP = 1; Delay(500); BEEP = 0; Delay(500); LED3 = 1; // ...第三个LED... BEEP = 1; Delay(500); BEEP = 0; Delay(500); LED4 = 1; // 最后第四个LED BEEP = 1; Delay(500); BEEP = 0; Delay(500); // 清除所有的LED以便重新开始下一轮流动光效 LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0; Delay(1000); // 较长时间间隔用于区分每轮之间的过渡 } } ``` 上述代码展示了如何利用简单的`while`循环结构来创建一个连续不断的动画效果——即所谓的“流水灯”,并且每当有一个新的LED被激活时都会触发一次短暂的声音提示来自蜂鸣器[^4]。 值得注意的是,在实际应用中可能还需要考虑硬件层面的因素,比如确保单片机能驱动蜂鸣器所需的电流强度;如果必要的话,则应加入适当的外部元件如晶体管或专用驱动芯片来进行电平转换和支持更大的负载需求[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值