STC学习:可变调的蜂鸣器
程序设计目标及程序运行效果说明
程序下载好后,数码管上显示的每个数字代表着不同的音调。通过按键KEY1可以修改数字的值(0-9);通过KEY2让蜂鸣器发声或者不发声。
程序相关电路及原理说明
当我们给无源蜂鸣器一个周期性的方波即可让其振动发声。
输入方波频率若发生改变,蜂鸣器振动的频率就会发生改变,从而发出不同的音调。
#include<STC15F2K60S2.H>
#define uint unsigned int
#define uchar unsigned char
sbit sbtBeep=P3^4; //蜂鸣器引脚
sbit sbtKey1=P3^2; //按键1引脚
sbit sbtKey2=P3^3; //按键2引脚
sbit sbtSel0=P2^0; //位选信号位
sbit sbtSel1=P2^1; //位选信号位
sbit sbtSel2=P2^2; //位选信号位
sbit sbtSel3=P2^3; //LED与数码管显示的控制位
uint sbtKey1_state=0; //0:Key1未按下 1:Key1已按下
uint sbtKey2_state=0; //0:Key2未按下 1:Key2已按下
bit btBeepFlag; //控制蜂鸣器开关的开关位
uint uiToneNum=0; //音调
uchar arrSegSelect[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-f
//初始化函数
void Init()
{P0M0=0xff;P0M1=0x00;P2M0=0x08;P2M1=0x00;//设置P3^4为推挽模式P3M1=0x00;P3M0=0x10;AUXR|=0x80; //定时器时钟1T模式TMOD&=0xF0; //设置定时器模式为16位自动重装TL0=0xCD; //设置定时初值TH0=0xF4; //设置定时初值TF0=0; //清除TF0标志TR0=1; //定时器0开始计时btBeepFlag=0;P0=0x00; //数码管与LED显示清0sbtSel0=1; //位选设置为第7位sbtSel1=1;sbtSel2=1;sbtBeep=0; //蜂鸣器引脚置0,以保护蜂鸣器ET0=1;EA=1;
}
//延时函数
void DelayMs(uint xms)
{uchar i;for(;xms>0;xms--)for(i=114;i>0;i--);
}
//显示函数
void DisplaySeg7Led()
{P0=0;sbtSel3=0;P0=arrSegSelect[uiToneNum];DelayMs(1);P0=0;sbtSel3=1;P0=0x08;DelayMs(1);
}
//主函数
void main()
{Init();while(1){if(sbtKey1==0){if(sbtKey1_state==0) //判断按键1是否按下{DelayMs(10); //延时消除抖动if(sbtKey1==0){uiToneNum++; //声调改变if(uiToneNum==10)uiToneNum=0;TH0=0xF4-uiToneNum; //减小重装值,从而减小
//定时器中断(蜂鸣器振动)频率sbtKey1_state=1; //设置按键1为已按下}}}elsesbtKey1_state=0;if(sbtKey2==0){if(sbtKey2_state==0) //判断按键2是否按下 {DelayMs(10); //延时消抖if(sbtKey2==0){btBeepFlag=!btBeepFlag; //蜂鸣器开关切换sbtKey2_state=1; //设置按键2为已按下}}}elsesbtKey2_state=0;DisplaySeg7Led();}
}
//T0计时器中断服务处理函数
void T0_Process()interrupt 1
{if(btBeepFlag)sbtBeep=~sbtBeep; //产生方波使得蜂鸣器发声elsesbtBeep=0; //如果开关关闭,则蜂鸣器断电以保护蜂鸣器
}
STC学习:可变调的蜂鸣器相关推荐
- 单片机学习笔记 —— 可变调的蜂鸣器
一.乐理基础 相关名词: 音名:do re mi fa so la xi 唱名:C D E F G A B,此外还有#C #D #E-表示升一个调 半音:C和#C的频率比值为1:2,它们之间相差12个 ...
- HNU小学期计算机系统设计与创新基础训练——基于STC学习板的加密信息存储与游戏操作系统(第一部分设计思路+基础原理)
HNU小学期计算机系统设计与创新基础训练--加密信息存储与游戏操作系统 一. 选题名称 二. 选题背景 三. 实现功能 1. 主要功能 2. 细节设计 四. 设计思路 五. 基本原理 1. 数码管与发 ...
- 湖南大学STC学习板导航键的使用
前言:发现STC板子上的按键不够用了,想着用导航键,但无奈在网上找了很久都没有任何一个字眼是关于STC学习板导航按键的使用和详细的代码.今天下午我帅帅的学长教会了我如何去使用导航键,为了更好的巩固和理 ...
- STC学习:可校准的实时时钟
程序设计目标及程序运行效果说明 程序设计目标:通过DS1302芯片.晶振.电池和数码管实现实时时钟的数码管显示,并实现实时时钟的时间的准确校准. 程序运行效果说明:将程序下载至芯片,数码管会出现实时的 ...
- 【蓝桥杯】单片机学习(6)——蜂鸣器+继电器
蜂鸣器+继电器 1.蜂鸣器简介 2.蜂鸣器工作过程(CT107D开发板). 3.以普中科技开发板为例 1.蜂鸣器简介 蜂鸣器按照驱动方式可分为有源蜂鸣器和无源蜂鸣器.有源蜂鸣器内部带有振荡器,只要给B ...
- MSP430学习笔记5-利用蜂鸣器演奏音乐
这个小程序仍然是定时器的运用,比较简单,具体的地方都在注释中注明了,参考注释. /********************************************* 程序功能:MCU控制蜂鸣器 ...
- 【小月电子】安路国产FPGA开发板系统学习教程-LESSON10无源蜂鸣器驱动
无源蜂鸣器驱动实验例程讲解 根据多年工作经验,总结出的FPGA的设计流程,概括起来总共有以上12步,其中根据项目难易度可省去其中一些步骤.比如非常简单的项目,我们可以省去虚线框里面的步骤,但是我们的入 ...
- 可变调的蜂鸣器、电子音乐
利用定时器定时翻转蜂鸣器的beep引脚,产生方波使蜂鸣器发生,所以根据定时器不同的定时产生不同的方波,就可以改变蜂鸣器的音调(与改变led灯亮度类似). void time0() interrupt ...
- STM32F103C8T6按键扫描学习笔记(LED和蜂鸣器的控制)
目录 前言 一.按键初始化 1.key.h 2.key.c 二.LED 1.led.h 2.led.c 三.BEEP 1.beep.h 2.beep.c 四.主函数 五.现象 前言 关于STM32F1 ...
最新文章
- 为什么LINKBUTTON不能插在LTEMTEMPLATE里???
- ISE14.7在win10下的兼容性问题汇总
- 做了5年Java,java文件下载代码
- shelve 序列化模块——day18
- Servlet中乱码问题
- 如何在家写出一份无懈可击的产品文档
- 在商城系统开发时遇到商品的多级分类,为增强扩展性,子类可以任意添加,此类问题数据库如何设计...
- js 递归函数的使用及常用函数
- 【LeetCode】19. Remove Nth Node From End of List
- autolisp 列表 resbuf
- 产品经理应该mysql_数据库对产品经理的重要性
- MsSql 生成数据文档
- linux本地时间与utc不一致_辽宁无新增 | 北京新增本地确诊病例31例,中高考时间目前不做调整...
- VB 读取资源文件里面的字符串
- Apache Hudi 是Uber 大数据存储系统
- 【CF1333F】Kate and imperfection(埃氏筛+思维)
- 网络协议 21 - RPC 协议(中)- 基于 JSON 的 RESTful 接口协议
- 如何使用MATLAB绘制平滑曲线
- zh-cn 和zh的意思
- 怎么做ssl证书配置?
热门文章
- 【c++--->模板】
- 利用HTML、CSS、JS和Swiper插件实现抖音视频滑动功能
- 生成ios证书和签名
- 手机死机重启原因总汇
- 在ubuntu20.10系统下实现一键OCR识别图片截图中的内容使之转换为文本可以复制粘贴
- KVM网络模型之:PCI Passthrough
- 【考研plog】目标院校整理第二弹-复试分数线篇
- Mybatis的学习笔记
- 【6S管理操作手册】
- 2.Refused to display ‘http:...‘ in a frame because it set ‘X-Frame-Options‘ to ‘deny‘