51单片机+proteus+实验(I2C和蜂鸣器)

server/2024/9/19 9:55:17/ 标签: 51单片机, proteus, 嵌入式硬件

目录

1.蜂鸣器

1.1基本概念

1.1.1蜂鸣器的简介

1.1.2蜂鸣器的硬件原理

1.1.3蜂鸣器的音色

1.2代码

1.2.1不同音色驱动

1.2.2使用Music Encode1软件来生成音乐

proteus%E4%BB%BF%E7%9C%9F-toc" style="margin-left:40px;">1.3proteus仿真

2.I2C

2.1基本概念

2.1.1 I2C的基本概念

2.1.2 I2C的通讯时序

  2.1.3AT24C02数据帧

​编辑2.2代码

2.2.1I2C代码

 2.2.2.AT24C02的代码

2.2.3主函数代码 

proteus%E4%BB%A3%E7%A0%81-toc" style="margin-left:40px;">2.3proteus代码


1.蜂鸣器

1.1基本概念

1.1.1蜂鸣器的简介

  • 蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号

  • 蜂鸣器按驱动方式可分为有源蜂鸣器(内含驱动线路)和无源蜂鸣器(外部码驱动)。这里的“源”指的是激励源
  • 无源蜂鸣器的工作原理

(1)无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音(所以无源蜂鸣器可以模拟曲调实现音乐效果)。

(2)无源蜂鸣器是一种简单的声音发生器,它由蜂鸣器元件和驱动电路组成。无源蜂鸣器通常由一个压电陶瓷薄膜振荡器构成,当给定特定频率的电信号时,蜂鸣器会产生声音。

(1)当给蜂鸣器施加直流电压时,内部的压电陶瓷薄膜会受到电场的作用而变形。

(2)当电场的方向改变时,压电陶瓷薄膜会反复振动,产生声音。

(3)蜂鸣器的振动频率由输入的电信号频率决定。

(4)通常情况下,通过改变输入信号  的频率和占空比,可以调整蜂鸣器发出的声音的频率和音调。这样你就可以在控制信号的作用下产生不同的声音效果。

  • 有源蜂鸣器的工作原理

(1)有源蜂鸣器:内部自带振荡源,只需要接入直流电源,即可自动发出声音(声音频率相对固定)。

(1)直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号,有源自激型蜂鸣器的

1.1.2蜂鸣器的硬件原理

https://blog.csdn.net/qq_36347513/article/details/121474727icon-default.png?t=O83Ahttps://blog.csdn.net/qq_36347513/article/details/121474727好的博文

  •  注意事项:

(1)限流电阻,防止基极电流过大损坏二极管

(2)续流二极管:蜂鸣器两端要并联一个肖特基蓄流二极管或者RC器件。原因是关断时,会产生一个尖峰电压,可能会损坏三极管

(3)单片机I/O都不能直接驱动蜂鸣器,原因是I/O的驱动电流很小。

(4)三极管Q1起开关作用(PNP),其基极的低电平使三极管饱和导通,使蜂鸣器发声;而基极高电平则使三极管关闭,蜂鸣器停止发声。

1.1.3蜂鸣器的音色

(1) 频率为f=\frac{1}{T}

1.2代码

1.2.1不同音色驱动

   sound=1;       //PWM的高电平此时三极管为开通Delay1us(852); //高电平的持续时间sound=0;       //PWM的低电平此时三极管为关闭Delay1us(852); //高电平的持续时间

1.2.2使用Music Encode1软件来生成音乐

unsigned char code star[]={ 0x15,0x02, 0x15,0x02, 0x19,0x02, 0x19,0x02, 0x1A,0x02,0x1A,0x02, 0x19,0x03, 0x18,0x02, 0x18,0x02, 0x17,0x02,0x17,0x02, 0x16,0x02, 0x16,0x02, 0x15,0x02, 0x19,0x02,0x19,0x02, 0x18,0x02, 0x18,0x02, 0x17,0x02, 0x17,0x02,0x16,0x02, 0x19,0x02, 0x19,0x02, 0x18,0x02, 0x18,0x02,0x17,0x02, 0x17,0x02, 0x16,0x02, 0x00,0x00 };InitialSound();while(1){   Play(star,0,2,323);}

proteus%E4%BB%BF%E7%9C%9F">1.3proteus仿真

2.I2C

2.1基本概念

2.1.1 I2C的基本概念

  • I2C 总线( Inter IC BUS )是由 Philips 公司开发的一种通用数据总线
  • 两根通信线:SCL Serial Clock )、 SDA Serial Data ) 同步、半双工,带数据应答
  • 主要特性

(1)I2C主模式特性:时钟生成 ​​​​​​,起始位和停止位生成

(2)I2C从模式特性: 可编程I2C,地址检测双寻址模式,可对2个从地址应答,停止位检测

(3)7位/10位寻址以及广播呼叫的生成和检测

(4)支持不同的通信速度:标准速度(高达100kHz)和快速速度(高达400kHz)

(5)状态标志: 发送/接收模式标志,字节传输结束标志,I2C 忙碌标志

(6)错误标志: 主模式下的仲裁丢失情况,地址/数据传输完成后的应答失败,检测误放的起始位和停止位,禁止时钟延长后出现的上溢/下溢

  • 一主多从模式的规定(物理层)

(1)主机的权力:任何时候,都是主机完全掌控SCL线,另外在空闲状态下,主机可以主动发起对SDA的控制只有在从机发送数据和从机应答的时候,主机才会转交SDA的控制权给从机,这就是主机的权利

(2)从机的权利:对于SCL时钟线,在任何时刻都只能被动的读取,从机不允许控制SCL线,对于SDA数据线,从机不允许主动发起对SDA的控制,只有在主机发送取从机的命令后,或者从机应答的时候,从机才能短暂地取得SDA的控制权

(3)上拉电阻的原因:由于这是半双工的协议,所以主机的SDA在发送的时候是输出,在接收的时候是输入,同样,从机的SDA也会在输入和输出之间反复切换,如果总线时序没协调好,极有可能发生两个脚同时处于输出的状态,如果这时正好是一个输出高电平,一个输出低电平,那这个状态就是电源短路,因此I2C的设计是,禁上所有设备输出强上拉的高电平(即芯片内部的上拉)采用外置弱上拉电阻加开漏输出的电路结构(SCL线只能由主机发送,所以不存在主机和从机同时发送和接收的情况)

(4)线与:总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平

(5)一个I2C总线只使用两条总线线路,一条双向串行数据线 (SDA) ,一条串行时钟线 (SCL).数据线即用来表示数据,时钟线用于数据收发同步。

(6)具有三种传输模式:标准模式传输速率为100kbit/s ,快速模式为400kbit/s ,高速模式下可达3.4Mbit/s,但目前大多I2C设备尚不支持高速模式。连接到相同总线的IC数量受到总线的最大电容400pF限制。

(7)多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线

(8)每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访 问。

(9)设备的SCL和SDA均要配置成开漏输出模式SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右

(10)在一主多从的模式下,I2C可以使用推挽输出的模式

2.1.2 I2C的通讯时序

  •  起始和终止条件

(1)起始条件:SCL高电平期间,SDA从高电平切换到低电平

(2)终止条件:SCL高电平期间,SDA从低电平切换到高电平

(3)起始和停止信号一般由主机产生,

(4)IIC总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

  • 发送一个字节

(1)发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节(主机在发送期间需要主动拉低SDA

(2)SCL为高电平的时候SDA 表示的数据有效, 即此时的SDA 为高电平时表示数据“1”,为低电平时表示数据“0”。当SCL为低电平时,SDA的数据无效,一般在这个时候SDA进行电平切换,为下一次表示数据做好准备

(3)在SCL低电平期间,允许改变SDA的电平,当数据传送完成之后,主机就松手时钟线,下个时刻,SCL回弹到高电平,在高电平期间,是从机读取SDA的时候,所以高电平期间,SDA不允许变化,SCL处手高电平之后,从机需要尽快地读取SDA,一般都是在上升沿这个时刻,从机就已经读取完成了,因为时钟是主机控制的从机并不知道什么时候就会产生下降沿了,所以从机在上升沿时,就会立该刻把数据读走。那主机在放手SCL一段时间后,就会拉低SCL传送下一位。主机也需要在SCL下降沿之后尽快把数据放在SDA上,由于主机具有主导权,只需要在低电平的任意时刻把数据放在SDA上就行了。数据放完之后,主机再松手SCL,SCL高电平,从机读取这一位。主机拉低SCL,把数据放在SDA上,主机松开SCL,从机读取SDA的数据

  •  接收一个字节

​​​​​​(1)SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA,释放SDA相当于切换成输入模式)

(2)SCL为高电平的时候 SDA 表示的数据有效, 即此时的SDA 为高电平时表示数据“1”,为低电平时表示数据“0”。当SCL为低电平时,SDA的数据无效,一般在这个时候SDA进行电平切换,为下一次表示数据做好准备

(3)因为总线是线与的特征任何一个设备拉低了,总线就是低电平,如果从设备总是占据总线,那么其他设备无论发什么数据,总线都始终是低电平。释放SDA前由主机控制,释放SDA后由从机控制

 (4)每次数据传输都以字节为单位,每次传输的字节数不受限制,数据以字节(8bit)传输

  • 地址及数据方向

(1)I2C总线上的每个设备都有自己的独立地址,主机发起通讯时,通过SDA信号线发送设备地址(SLAVE_ADDRESS) 来查找从机。I2C协议规定设备地址可以是7位或10位,实际中7位的地址应用比较广泛。紧跟设备地址的一个数据位用来表示数据传输方向,它是数据方向位 (R/W),第8位或第11位。数据方向位为“1”时表示主机由从机读数据,该位为“0”时表示主机向从机写数据。读数据方向时,主机会释放对SDA信号线的控制,由从机控制SDA 信号线,主机接收信号,写数据方向时,SDA由主机控制,从机接收信号

(2)数据和地址均以8位字节传输,MSB在前。起始位后紧随地址字节(7位地址占据一个字节; 10位地址占据两个字节。地址始终在主模式下传送

  • 响应

(1) I2C的数据和地址传输都带响应。响应包括“应答 (ACK)”和“非应答 (NACK)”两种信号。作为 数据接收端时,当设备 (无论主从机) 接收到I2C传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发送“应答 (ACK)”信号,发送方会继续发送下一个数据;若接收端希望结束数据传输,则向对方发送“非应答 (NACK)”信号,发送方接收到该信号后会产生一个停止信号结束信号传输。传输时主机产生时钟,在第9个时钟时,数据发送端会释放SDA的控制权,由数据接收端控制SDA,若SDA为高电平,表示非应答信号 (NACK),低电平表示应答信号 (ACK)(上拉电阻影响下SDA默认为高)

(2)在字节传输8个时钟周期后是第9个时钟脉冲,在此期间接收器必须向发送器发送一个应答位

  • 时序结构

  • I2C的发送和接收数据

  2.1.3AT24C02数据帧

  • AT24C02的简介

(1)AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息

​​​​​​​(2)存储介质:EEPROM(电可擦除可编程ROM);通讯接口:I2C总线;容量:256字节

  • AT24C02的框图

​​​​​​​

  •  AT24C02的硬件电路图

  •  设备地址

 (1)设备地址的高4位由厂家决定,而A2、A1、A0由用户自己设置

(2)EEPROM芯片我们使用的是24C02,该芯片的容量为2Kb,也就是256个字节,这里我们把 A0~A2均接地,对24C02来说也就是把地址位设置成了0了。

  • 向AT24C02写入和读取时序

2.2代码

2.2.1I2C代码

  • 开始I2C

​​​​​​​​​​​​​​

  • 停止I2C

​​​​​​​​​​​​​​

  • 发送一个数据

​​​​​​​​​​​​​​

  • 接收一个数据​​​​​​​

  • 接收应答数据

​​​​​​​​​​​​​​

  • 发送应答数据

 2.2.2.AT24C02的代码

/*** @brief 向I2C中写入数据* @param 写入数据的地址* @param 写入I2C的数据*/
void AT24C02_WriteByte(unsigned char DartAddress,unsigned char Data)
{I2C_Start();               //开启I2C_sendByte(0xA0);        //发送AT24C02的地址 I2C_ReceiveAck();          //接收应答I2C_sendByte(DartAddress); //要写入数据的寄存器地址I2C_ReceiveAck();          //接收应答I2C_sendByte(Data);        //发送数据     I2C_ReceiveAck();          I2C_end();
}unsigned AT24C02_ReadByte(unsigned char DartAddress)
{unsigned char Data;I2C_Start();I2C_sendByte(0xA0);     I2C_ReceiveAck();I2C_sendByte(DartAddress); //要写入数据的寄存器地址I2C_ReceiveAck();I2C_Start();I2C_sendByte(0xA1);        //读操作此时R/W位为1I2C_ReceiveAck();Data=I2C_ReceiveByte();I2C_SendACK(1);I2C_end();return Data;
}

2.2.3主函数代码 

  unsigned char ByteData;LCD_Init();LCD_WriteString(1,1,"hello");AT24C02_WriteByte(0x01,123);LCD_Delay(5);ByteData=AT24C02_ReadByte(0x01);LCD_WriteNum(2,1,ByteData,3);while(1){}

proteus%E4%BB%A3%E7%A0%81">2.3proteus代码


http://www.ppmy.cn/server/117772.html

相关文章

Qt_显示类控件

目录 一、QLabel 1、QLabel属性介绍 2、textFormat文本格式 3、pixmap标签图片 3.1 resizeEvent 4、QFrame边框 5、alignment文本对齐 6、wordWrap自动换行 7、indent设置缩进 8、margin设置边距 9、buddy设置伙伴 二、QLCDNumber 1、QLCDNumber属性介绍 2、实…

【AI大模型】ChatGPT模型原理介绍(下)

目录 🍔 GPT-3介绍 1.1 GPT-3模型架构 1.2 GPT-3训练核心思想 1.3 GPT-3数据集 1.4 GPT-3模型的特点 1.5 GPT-3模型总结 🍔 ChatGPT介绍 2.1 ChatGPT原理 2.2 什么是强化学习 2.3 ChatGPT强化学习步骤 2.4 监督调优模型 2.5 训练奖励模型 2.…

上海亚商投顾:沪指探底回升 华为产业链午后爆发

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日探底回升,深成指、创业板指盘中跌逾1%,午后集体拉升翻红。华为产业链午后走强…

朴朴超市 签到 任务脚本

脚本主要用于自动化处理朴朴超市APP的签到和组队任务。以下是对脚本中主要方法的作用解析: 初始化和登录 - __init__: - 初始化类对象,设置用户信息和请求头,尝试获取并设置随机位置。 - get_AccessToken: - 使用`refresh_token`刷新并获取`access_token`,用于后续的A…

安卓玩机工具-----ADB与 FASTBOOT模式 图形化 多功能玩机刷机工具

工具说明 这款工具是英文版。易于使用的工具提供了用于运行 ADB 和 Fastboot 命令的图形用户界面。ADB 功能包括旁加载、安装和卸载应用程序、测试设备以及重新启动到不同的模式。可以使用 fastboot 命令进行设备管理;其中包括检查 Antirollback 和 active slots 等变…

Nginx:高性能的Web服务器与反向代理

在当今的互联网世界中,Web服务器的选择对于网站的性能、稳定性和安全性至关重要。Nginx(发音为“engine X”)凭借其卓越的性能、丰富的功能集和灵活的配置选项,成为了众多网站和应用程序的首选Web服务器和反向代理。本文将深入探讨…

Canal+RabbitMQ数据同步环境配置

Canal 是阿里巴巴开发的开源工具,主要用于解析 MySQL 的 binlog 日志,从而实现数据同步。Canal 会模拟 MySQL 从库的协议,订阅主库的 binlog,从而获取数据库的变更信息。 将 Canal 解析到的 MySQL 数据库变更消息通过 RabbitMQ 分…

详细分析Uniapp中的轮播图基本知识(附Demo)

目录 前言1. 基本知识2. Demo2.1 基本2.2 自定义分页2.3 自定义动画 3. 扩展 前言 先看代码示例&#xff1a; 实现了一个带有分页指示器的轮播图组件 <template><view class"work-container"><!-- 轮播图 --><uni-swiper-dot class"uni…

flask框架

Flask 1 flask简介 我们之所以在浏览器中输入localhost:8080然后就可以把webapps下面的项目文件以浏览器的方式打开&#xff0c;功臣在与tomcat。python语言写的项目&#xff0c;转换为web&#xff0c;Flask框架 轻量级web应用框架。 环境准备&#xff1a; pip install fl…

SSHamble:一款针对SSH技术安全的研究与分析工具

关于SSHamble SSHamble是一款功能强大的SSH技术安全分析与研究工具&#xff0c;该工具基于Go语言开发&#xff0c;可以帮助广大研究人员更好地分析SSH相关的安全技术与缺陷问题。 功能介绍 SSHamble 是用于 SSH 实现的研究工具&#xff0c;其中包含下列功能&#xff1a; 1、针…

React源码学习(一):如何学习React源码

本系列源码学习&#xff0c;是基于 v16.13.1&#xff0c;v17.x与v16.x区别并不太大&#xff01; 一、如何正确的学习React源码&#xff1f; 找到Github&#xff0c;转到React仓库&#xff0c;fork / clone源码&#xff1a;React 查看Readme&#xff0c;在Documentation中有Cont…

Gateway学习笔记

目录 介绍&#xff1a; 核心概念 依赖 路由 断言 基本的断言工厂 自定义断言 过滤器 路由过滤器 过滤器工厂 自定义路由过滤器 全局过滤器 其他 过滤器执行顺序 前置后置&#xff08;&#xff1f;&#xff09; 跨域问题 yaml 解决 配置类解决 介绍&#x…

鸿蒙 ArkUI组件一

ArkUI组件 布局 布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。在实际的开发过程中&#xff0c;需要遵守以下流程保证整体的布局效果&#xff1a; 确定页面的布局结构。分析页面中的元素构成。选用适合的布局容器组件或属性控制页面中各个元素的位置和大…

适合博客的组件库

在选择适合博客的组件库时&#xff0c;需要考虑博客的主题、内容类型以及预期的用户体验。以下是一些推荐的组件库&#xff0c;它们各自具有独特的特点和优势&#xff0c;能够帮助你提升博客的视觉效果和用户体验&#xff1a; React Markdown&#xff1a;非常适合技术博客和教…

亚信软件测试实习面试记录

一、面试问题记录 1、首先是自我介绍&#xff0c;不用多说 2、技术问题 问得不深&#xff0c;简单来说几乎等于没问&#xff0c;只问了一句会不会***。 会Linux嘛&#xff08;应该可以自己回答的时候适当拓展的&#xff0c;但是我只老老实实说了会&#xff09;&#xff1b; 会…

个人电脑可以当服务器用吗?

服务器和普通电脑的主要区别体现在以下几个方面&#xff1a; 1.CPU处理性能 服务器的CPU配置通常是多核的&#xff0c;普通电脑的CPU往往只包含单个核心&#xff0c;因此在数据处理能力上远远不如服务器。 2.安全性能 服务器具备更高的可靠性、安全性、容错能力和安全保护能…

Sui与3DOS合作推动3D打印网络的去中心化

制造业创新者3DOS宣布将其庞大的3D打印网络与Sui集成。这一集成使用户、3D打印机和制造商能够连接到全球可访问的去中心化网络。 解锁去中心化3D打印的全部潜力依赖于精确的实时协调。Sui作为通用协调层&#xff0c;将用户、3D打印机和制造商同步到一个高效、统一的网络中。通…

jmeter

Jmeter快速入门 1.安装Jmeter Jmeter依赖于JDK&#xff0c;所以必须确保当前计算机上已经安装了JDK&#xff0c;并且配置了环境变量。 1.1.下载 可以Apache Jmeter官网下载&#xff0c;地址&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 1.2.解压 因为下载的…

51单片机+proteus+(DS1302+DS18B20)

目录 1.温度传感器检测&#xff08;DS18B20&#xff09; 1.1基本概念 1.1.1 DS18B20的简介 1.1.2 DS18B20的框图 ​编辑 1.1.3 DS18B20的指令 1.1.4 总线时序协议 1.2代码 1.2.1DS18B20的初始化代码 1.2.2DS18B20的读代码 1.2.3DS18B20的写时序 ​编辑 1.2.4DS18B20…

在树莓派上构建和部署 Node.js 项目

探索在Raspberry Pi上构建和部署Node.js项目的最佳实践。通过我们的专业提示和技巧&#xff0c;克服常见挑战&#xff0c;使您的项目顺利运行。 去年圣诞节&#xff0c;我收到了一份极其令人着迷的礼物&#xff0c;它占据了我许多周末的时间&#xff0c;甚至让我夜不能寐。它就…