51单片机实验1-流水灯的设计(流水灯,蜂鸣器,爆闪灯)

2023-11-06

关于软件的使用我们用的是proteus和keil软件,关于软件的安装和使用,这里就不在说明了。如果软件还没有安装可以参考

proteus安装:Proteus软件的安装与使用方法(超详细)

http://t.csdn.cn/ZaUjM

keil安装:keil5安装教程 

http://t.csdn.cn/vuHsM

keil5使用教程

http://t.csdn.cn/lroGE

接下来我们开始进行流水灯的设计

实验项目1-流水灯的设计

实训目的:

1、编写程序通过控制51单片机引脚控制LED灯的点亮与关闭,实现“流水灯”效果

2、编程程序利用延时函数,完成8个LED闪烁的效果

3、控制无源蜂鸣器发声,尝试发出不同频率的声音

实验步骤

(一)“流水灯”的实现

在isis professional中设计电路如下:

 主要器件:AT89C51、RES、LED-GREEN、power

程序代码如下:

#include<reg51.h>
#include<intrins.h>
void delay10ms(unsigned int c);//声明了一个名为 delay10ms函数,后边会完善函数体
void main(void)
{	P1=0xfe;      //P1 变量的值赋为 0xfe,即二进制的 1111 1110。
	while(1)
	{	delay10ms(100);   //延时 100 毫秒
		P1=_crol_(P1,1);    //crol 函数将 P1 左移一位,并将移出的最高位移到最低位,实现 LED 灯的闪烁效果
	}
}

void delay10ms(unsigned int c) //完善延时函数
{	unsigned char a, b;
	for(;c>0;c--)
	{	for(b=38;b>0;b--)
		{	for(a=130;a>0;a--);
		}
	}
}
//延时函数这段代码是一个三层循环。实现 delay10ms 函数的目的。

(二)爆闪灯

编程实现将8个LED灯分为两组,利用延时函数完成每组闪烁5次后,两组LED交替闪烁,实现“暴闪灯”效果

提示:

1、修改电路,LED更换为红色和蓝色;

2、两组灯交替的延时,比连续闪烁5次的间隔大一些。

电路连接:

程序代码如下:

#include<reg51.h>
#include<intrins.h>
void Delay(unsigned long n) // 定义一个延时函数Delay
{	while(n--);      // 循环n次,每次让变量自减,用于实现时间上的延迟
}
void main(void)
{	unsigned char a=5;
	while(1)
	{	for(;a>0;a--)// 内部 for 循环用于控制 LED 灯的闪烁次数和循环时间,因为变量 a=5,LED 灯会反复闪烁五次,每次持续 20,000 毫秒(即 20 秒)
		{	P1=0x00;   // 给P1赋值全0
			Delay(20000);
			P1=0xff;
			Delay(20000);
		}
		while(1)        //while 循环实现了第二种 LED 灯闪烁方式,实现“亮、暗、亮、暗”等间歇性循环的闪烁效果。实现爆闪
		{	P1=0x0f;
			Delay(40000);
			P1=0xf0;
			Delay(40000);
		}
	}
}

(三)蜂鸣器发声

电路连接如下:

主要器件:AT89C51、RES、LED-GREEN、NPN、SPEAKER

 程序代码如下:

#include<reg51.h>
sbit BEEP=P1^0;//蜂鸣器所连接的 IO 口 P1.0,并命名为 BEEP,使用 sbit 表示此变量是一个位单元(Bit)类型。
void Delay(unsigned int n)//延时
{	while(n--);
}
void main(void)
{	while(1)      //在主函数中使用死循环结构 while(1),表示 BEEP 声音需要保持不停
	{ BEEP=0;//每次进入循环体后,先将 BEEP 置零(打开蜂鸣器)
		Delay(50);
		BEEP=1;//再将 BEEP 再置为 1(关闭蜂鸣器)
		Delay(50);
	}
}
//这段代码用于控制单片机上的蜂鸣器发出滴滴声,每次发出一声需要先将 P1 口 0 号位 置0表示打开蜂鸣器,经过50次空循环后将 0 号位 置1来关闭蜂鸣器。接着在进行下一次循环,程序会重复执行这个步骤来实现持续的蜂鸣效果。其中 Delay 函数用于延时控制蜂鸣器响起和停止的时间,参数 n 表示需要空循环的次数,具体的时间取决于 CPU 主频和其他应用程序对系统资源的占用情况,通常需要通过试验来确定具体值。建议在实际应用中使用定时器和计数器配合中断的方式来实现精准的定时控制,而不是使用空循环的方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机实验1-流水灯的设计(流水灯,蜂鸣器,爆闪灯) 的相关文章

  • 华为手机微信与电脑连接到服务器失败怎么办,华为微信到电脑上找不到了怎么办...

    1 华为手机连接电脑后找不到微信保存的视频 应该是在微信专用的文件夹里 文件夹的名字是英文的腾信 如果视频不多可以登陆电脑版微信 然后用文件助手传到电脑再保存 2 华为荣耀10微信存储图片连接电脑找不到 查找微信保存图片的文件信息 打开 文
  • React组件化一

    29 9React课程 第02节 react组件化 第2节 02课react组件化 02课react组件化 02课react组件化 初始化显示constructor构造函数 要使用super 否则没法在内部使用this 2与3之间要对组件进
  • Centos7本地yum安装FTP和HTTP服务

    Centos镜像包下载 http mirror centos org altarch 7 isos 32位 i386 64位 带64的 1 将Vmware中的光驱设置为镜像包 在虚拟机关闭时设置 1 打开虚拟机设置 2 选择CD DVD 3

随机推荐

  • clang简介

    文章目录 clang编译器 clang选项 阶段选择选项 语言选择和模式选项 目标选择选项 代码生成选项 O0 O1 O2 O3 Ofast Os Oz Og O O4 g gline tables only gmodules fstand
  • 适用于 24 V 电源系统的车载网络 ESD 保护

    Nexperia 安世半导体 近日推出符合 AEC Q101 标准的产品组合 其中包含六个 ESD 保护器件 PESD2CANFD36XX Q 旨在保护 LIN CAN CAN FD FlexRay 和SENT 等车载网络 IVN 中的总线
  • 日期补0位

    function getNowFormatDate var day new Date var Year 0 var Month 0 var Day 0 var CurrentDate 初始化时间 Year day getYear 有火狐下2
  • Red Hat Enterprise Linux 8 配置yum源

    Red Hat Enterprise Linux 8 配置YUM源的两种方式 一 本地YUM源 1 备份源文件 cd etc yum repos d mkdir bak mv repo bak 2 挂载镜像 mount t iso9660
  • 面试官都在问

    面试官都在问 Linux命令mpstat详解 1 mpstat的基本用法 mpstat的全称为Multiprocessor Statistics 是一款常用的多核CPU性能分析工具 用来实时查询每个CPU的性能指标 以及所有CPU的平均指标
  • 用qsetting实现文件保存和读取

    QSettings 是 Qt 库中的一个类 可以用来读取和保存应用程序的配置数据 使用 QSettings 可以方便地保存和读取配置信息 比如窗口的大小和位置 最近打开的文件列表等 实现保存文件的步骤如下 创建 QSettings 对象 并
  • OpenCV 3.3.1及Contrib附加库安装教程及问题Undefined reference to cv::xfeatures2d

    INSTALL OPENCV ON UBUNTU OR DEBIAN 1 KEEP UBUNTU OR DEBIAN UP TO DATE sudo apt get y update sudo apt get y upgrade sudo
  • cpp课程设计实验题:编写程序,定义抽象基类Shape(形状),由它派生出3个派生类: Circle(圆形)、Rectangle(矩形)和Square 正方形),用函数函数ShowArea()分别显

    编写程序 定义抽象基类Shape 形状 由它派生出3个派生类 Circle 圆形 Rectangle 矩形 和Square 正方形 用函数函数ShowArea 分别显示各种图形的面积 最后还要显示所有图形的总面积 要求用基类指针数组 使它的
  • adb 指令

    1 基本指令 指令 adb version 显示 adb 版本 指令 adb help 帮助信息 查看 adb 所支持的所有命令 指令 adb start server 启动 adb 服务 指令 adb kill server 关闭 adb
  • Unity 分帧加载和分块加载

    分帧加载和分块加载 在我们实际做项目的时候 往往会遇见需要创建大量数据的时候 这时如果在一帧里面大量创建数据 那我们的游戏就会发生卡顿从而降低了用户的体验 为了解决这种情况 可以使用使用分帧加载使得每帧只加载固定数量的数据来解决 也可以使用
  • 经纬度坐标与距离的相互转换及其实现

    经纬度坐标与距离的相互转换 1 经纬度与距离角度的换算关系 2 Python代码实现 1 经纬度与距离角度的换算关系 a 在纬度相等的情况下 经度每隔0 00001度 距离相差约1米 每隔0 0001度 距离相差约10米 每隔0 001度
  • 【ElementUI组件优化】自定义icon图标的使用

    风雨里做个大人 阳光下做个小孩 前端经常会用到UI提供的各种图表 推荐阿里的图标库 如果UI要求不是很严格 我们可以自己在图标库中找到想要的图标 搜索之后可以点击下载 在ElementUI中使用Icon图标组件使用非常简单 同时 在图标按钮
  • 微信小程序如何实现(点击发送弹幕)

    扫一扫以上小程序 许愿灯池 可以查看具体点击发送弹幕功能 效果图 点击 祝福一下吧 即可弹出弹幕 直接上代码 index wxml
  • spark学习7:RDD编程

    1 目录 2 创建RDD 两种方式 2 1从文件系统加载 sc textFile 方法来加载文件数据 并将文件数据转换为RDD 2 1 1 从本地文件加载数据 val rdd1 sc textFile file home hzp Docum
  • error:LNK2005 函数已经在*.obj中定义

    出现上面的错误 只要原因有如下几个 1 头文件的重复包含 包含的头文件中含有变量 函数 类的定义 在其他使用的地方多次包含 造成重复包含 产生LNK2005错误 有两种解决方法 1 使用宏 在头文件head h中加入 ifndef HEAD
  • IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?

    1 前言 在IM这种讲究高并发 高消息吞吐的互联网场景下 MQ消息中间件是个很重要的基础设施 它在IM系统的服务端架构中担当消息中转 消息削峰 消息交换异步化等等角色 当然MQ消息中间件的作用远不止于此 它的价值不仅仅存在于技术上 更重要的
  • 华北电力大学计算机专业学什么,华北电力大学计算机专业与杭州电子科技大学计算机专业哪一个强...

    技校网专门为您推荐的类似问题答案 问题1 北京工业大学 华北电力大学 北京 西安电子科技大学这三个学校的信息安全专业哪个比较 不要相信一个新设置的专业 我就上华电一个新兴专业 就业这个费劲啊 华电还是电力为主 弱电方面就业不是很好 推荐西电
  • 定时执行shell脚本,让其停掉 在重启

    bin bash appname zhihu data 0 0 1 SNAPSHOT jar binPath u01 isi zhihu data monitor ps ef grep appname grep v grep wc l if
  • 【猴博士】概率论与数理统计 笔记总结(完结)

    前言 视频在B站看 视频在MOOC看 是笔记 可能不全 其他没写的章节是因为我考试不考 就没看了 概率论 第一章 随机事件和概率 概率论与数理统计 猴博士 笔记 p1 p2 古典概型 几何概型 概率论与数理统计 猴博士 笔记 p3 4 事件
  • 51单片机实验1-流水灯的设计(流水灯,蜂鸣器,爆闪灯)

    关于软件的使用我们用的是proteus和keil软件 关于软件的安装和使用 这里就不在说明了 如果软件还没有安装可以参考 proteus安装 Proteus软件的安装与使用方法 超详细 http t csdn cn ZaUjM keil安装