程序设计目标及程序运行效果说明
程序下载好后,数码管上显示的每个数字代表着不同的音调。通过按键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学习:可变调的蜂鸣器相关推荐

  1. 单片机学习笔记 —— 可变调的蜂鸣器

    一.乐理基础 相关名词: 音名:do re mi fa so la xi 唱名:C D E F G A B,此外还有#C #D #E-表示升一个调 半音:C和#C的频率比值为1:2,它们之间相差12个 ...

  2. HNU小学期计算机系统设计与创新基础训练——基于STC学习板的加密信息存储与游戏操作系统(第一部分设计思路+基础原理)

    HNU小学期计算机系统设计与创新基础训练--加密信息存储与游戏操作系统 一. 选题名称 二. 选题背景 三. 实现功能 1. 主要功能 2. 细节设计 四. 设计思路 五. 基本原理 1. 数码管与发 ...

  3. 湖南大学STC学习板导航键的使用

    前言:发现STC板子上的按键不够用了,想着用导航键,但无奈在网上找了很久都没有任何一个字眼是关于STC学习板导航按键的使用和详细的代码.今天下午我帅帅的学长教会了我如何去使用导航键,为了更好的巩固和理 ...

  4. STC学习:可校准的实时时钟

    程序设计目标及程序运行效果说明 程序设计目标:通过DS1302芯片.晶振.电池和数码管实现实时时钟的数码管显示,并实现实时时钟的时间的准确校准. 程序运行效果说明:将程序下载至芯片,数码管会出现实时的 ...

  5. 【蓝桥杯】单片机学习(6)——蜂鸣器+继电器

    蜂鸣器+继电器 1.蜂鸣器简介 2.蜂鸣器工作过程(CT107D开发板). 3.以普中科技开发板为例 1.蜂鸣器简介 蜂鸣器按照驱动方式可分为有源蜂鸣器和无源蜂鸣器.有源蜂鸣器内部带有振荡器,只要给B ...

  6. MSP430学习笔记5-利用蜂鸣器演奏音乐

    这个小程序仍然是定时器的运用,比较简单,具体的地方都在注释中注明了,参考注释. /********************************************* 程序功能:MCU控制蜂鸣器 ...

  7. 【小月电子】安路国产FPGA开发板系统学习教程-LESSON10无源蜂鸣器驱动

    无源蜂鸣器驱动实验例程讲解 根据多年工作经验,总结出的FPGA的设计流程,概括起来总共有以上12步,其中根据项目难易度可省去其中一些步骤.比如非常简单的项目,我们可以省去虚线框里面的步骤,但是我们的入 ...

  8. 可变调的蜂鸣器、电子音乐

    利用定时器定时翻转蜂鸣器的beep引脚,产生方波使蜂鸣器发生,所以根据定时器不同的定时产生不同的方波,就可以改变蜂鸣器的音调(与改变led灯亮度类似). void time0() interrupt ...

  9. STM32F103C8T6按键扫描学习笔记(LED和蜂鸣器的控制)

    目录 前言 一.按键初始化 1.key.h 2.key.c 二.LED 1.led.h 2.led.c 三.BEEP 1.beep.h 2.beep.c 四.主函数 五.现象 前言 关于STM32F1 ...

最新文章

  1. 为什么LINKBUTTON不能插在LTEMTEMPLATE里???
  2. ISE14.7在win10下的兼容性问题汇总
  3. 做了5年Java,java文件下载代码
  4. shelve 序列化模块——day18
  5. Servlet中乱码问题
  6. 如何在家写出一份无懈可击的产品文档
  7. 在商城系统开发时遇到商品的多级分类,为增强扩展性,子类可以任意添加,此类问题数据库如何设计...
  8. js 递归函数的使用及常用函数
  9. 【LeetCode】19. Remove Nth Node From End of List
  10. autolisp 列表 resbuf
  11. 产品经理应该mysql_数据库对产品经理的重要性
  12. MsSql 生成数据文档
  13. linux本地时间与utc不一致_辽宁无新增 | 北京新增本地确诊病例31例,中高考时间目前不做调整...
  14. VB 读取资源文件里面的字符串
  15. Apache Hudi 是Uber 大数据存储系统
  16. 【CF1333F】Kate and imperfection(埃氏筛+思维)
  17. 网络协议 21 - RPC 协议(中)- 基于 JSON 的 RESTful 接口协议
  18. 如何使用MATLAB绘制平滑曲线
  19. zh-cn 和zh的意思
  20. 怎么做ssl证书配置?

热门文章

  1. 【c++--->模板】
  2. 利用HTML、CSS、JS和Swiper插件实现抖音视频滑动功能
  3. 生成ios证书和签名
  4. 手机死机重启原因总汇
  5. 在ubuntu20.10系统下实现一键OCR识别图片截图中的内容使之转换为文本可以复制粘贴
  6. KVM网络模型之:PCI Passthrough
  7. 【考研plog】目标院校整理第二弹-复试分数线篇
  8. Mybatis的学习笔记
  9. 【6S管理操作手册】
  10. 2.Refused to display ‘http:...‘ in a frame because it set ‘X-Frame-Options‘ to ‘deny‘