一、实验设备

PC机一台、实验箱一台。

二、实验内容

实现电子琴功能,自动演奏歌曲《葫芦娃》片段,并设置两个按键来实现歌曲的“暂停”和“开始/停止”。

图1 《葫芦娃》曲谱片段

三、实验步骤

①先在CUBE软件中进行硬件的图形化配置,选择STM32F407ZE芯片后,先进行常规的RCC和SYS设置,并配置时钟树使得HCLK为168MHz(如图2所示),在项目管理中进行项目的命名、存放地址、IDE等配置。

图2 时钟树的配置

②分析实验得,需要打开定时器并开启PWN波输出,设置PWN波Prescaler为83即可,Counter Period和pulse进行不报错设置(如图3所示)。

图3 定时器的配置

③分析实验得,需要两个按键来实现控制功能,打开两个GPIO并设置为输入模式(如图4所示)。

图4 GPIO开关的配置

④生成配置代码,进入到KEIL中完成相关功能代码,先进行KEIL的常规配置,设置晶振频率为8MHz,并设置硬件调试模式为J-LINK/J-TRACE Cortex,先根据曲谱写入曲谱数组,并写入pwn波输出函数,在while循环中使用递增不断改变曲谱的值,根据曲谱的值改变频率从而改变音调,从而实行歌曲的自动循环演奏,根据对两个按键的扫描通过改变play的值,来完成歌曲的暂停与播放,并通过改变i的值为0来实现歌曲的从头播放,编译下载后,进行硬件连线从而实现实验功能。

//曲谱
uint8_t num[75] = {0,0,    1,1,1,1,3,3,3,      1,1,1,1,3,0,0,      6,6,6,6,6,5,6,6,5,5,1,1,3,3,0,0,0,      8,6,6,5,6,6,5,5,1,1,2,2,0,0,    7,7,7,7,7,7,5,3,3,3,3,5,5,5,5,5,5,0};
//电子琴while (1){flag = KEY_Scan();if(flag!=0){if(flag == 1){if(play == 0){play = 1;i = 0;}else play = 0; }else if(flag == 2){if(play == 0)play = 1;else play = 0;}}        if(play == 1){key = num[i];i++;if(i >= 75) i = 0;switch(key){case 0:{__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,0);break;}case 1:{__HAL_TIM_SetAutoreload(&htim1,1000000/262);__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,1000000/262*0.9);break;}case 2:{__HAL_TIM_SetAutoreload(&htim1,1000000/294);__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,1000000/294*0.9);break;}case 3:{__HAL_TIM_SetAutoreload(&htim1,1000000/330);__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,1000000/330*0.9);break;}case 4:{__HAL_TIM_SetAutoreload(&htim1,1000000/349);__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,1000000/349*0.9);break;}case 5:{__HAL_TIM_SetAutoreload(&htim1,1000000/392);__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,1000000/392*0.9);break;}case 6:{__HAL_TIM_SetAutoreload(&htim1,1000000/440);__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,1000000/440*0.9);break;}case 7:{__HAL_TIM_SetAutoreload(&htim1,1000000/492);__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,1000000/492*0.9);break;}case 8:{__HAL_TIM_SetAutoreload(&htim1,1000000/523);__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,1000000/523*0.9);break;}}HAL_Delay(200); }else if(play == 0)__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,0);

四、实验收获

①学会了在以不同按键实现不同功能的工程中,在按键扫描函数中加入按键正忙变量,来避免出现按键冲突。

②学会了自主设计单片机时,如何规划单片机代码的实现顺序,来逐步验证功能,防止一次性敲完所有代码后,在一次性验证时出现问题,排查错误范围太广。

③通过这次的实验,将理论的单片机知识和实际中的具体问题方案联系了起来,加深了对具体知识的印象,体会了通过STM32分析问题、设计/开发具体问题方案的过程。

单片机实验四(电子琴自动演奏)相关推荐

  1. 单片机实验四-七段数码管及键盘控制

    动态显示0-15 ORG 0100HLCALL INIT START:MOV P1,#00H ;控制哪个7段数码管显示MOV R0,#16MOV R1,#30H;LOOP0:MOV P2,@R1;IN ...

  2. 【单片机】实验四定时器

    实验四 定时器 一.实验目的 1.理解单片机内部定时器的工作原理及使用方法 2.了解单片机定时中断程序的编写和调试方法 3.掌握定时器的基本使用方法 二.实验设备(仪器) PC 微机一台 三.实验原理 ...

  3. 单片机实验说明<四>矩阵键盘与LCD基本使用

    实验四 矩阵键盘识别设计 设计要求: 对4×4矩阵式键盘电路的键值进行编码,编程实现在LCD液晶显示器上显示每个按键的"0-F"序号 电路设计: 软件代码: #include &q ...

  4. PWM控制直流电机(单片机实验)

    PWM控制直流电机(单片机实验) 有问题欢迎私信哦 一.题目 设计电路,使用定时器实现PWM对直流电机的转速控制,并且实现按键切换转动方向.并进行软件仿真,做出实物. 二.基本要求 1.设置按键控制直 ...

  5. PLC单片机实验开发设备

    在单片机的应用中,PLC控制系统已经成为了其组成中的重要组成部分.单片机主要利用PLC必备的编程接口来进行通信,使用LCD作为用户的界面,界面中可以显示出PLC的工作状态.工艺参数,也可以使用相应的按 ...

  6. 单片机实验笔记(汇编、Proteus仿真)(下)

    接上一条单片机实验笔记(汇编.Proteus仿真) 第五节课 第五节课 内容为驱动多位数码管.和驱动一位数码管大同小异. ORG 0000H LJMP MAINORG 0100H MAIN: MOV ...

  7. 单片微型计算机原理及应用实验报告,小学期单片机实验报告_相关文章专题_写写帮文库...

    时间:2019-05-13 01:16:21 作者:admin 北京邮电大学信息与通信工程学院 小学期AVR单片机实验报告 实验题目: 基于ATmega16L单片机的电子琴设计 学生姓名:学渣 班 级 ...

  8. PLC单片机实验开发系统装置QY-DPJ12

    一.装置简介 QY-DPJ12PLC单片机实验开发系统综合装置可完成51/96/8088/8086等CPU的单片机.微机的全部软.硬件实验.在单片机仿真实验系统的基础上,增加8088十六位微机原理和接 ...

  9. 基于AT89C52单片机的简易电子琴设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87853299?spm=1001.20 ...

最新文章

  1. 【linux】CentOS启动后网络自动配置过程
  2. Ubuntu系统在VMware虚拟机中显示显示过小
  3. Notepad++写Verilog HDL代码时,在注释语句下出现红色波浪线怎么办?
  4. php 学习笔记 数组2
  5. 数学学习--最小二乘法案例剖析
  6. 智宇科技 ZYARJX-1机械臂智能小车 —— 手机端蓝牙控制程序
  7. 魅族升级android p,高通宣布:这些手机将第一时间升级Android P!
  8. 1月28日云栖精选夜读 | 终于等到你!阿里正式向 Apache Flink 贡献 Blink 源码
  9. JQuery Tree 树形结构插件 zTree
  10. jquery html 片段,十条jQuery代码片段助力Web开发效率提升
  11. aix oracle监听配置_AIX系统中安装ORACLE,客户端连接时,监听会宕掉的问题
  12. 几个ubuntu16.04镜像下载地址
  13. python是如何登上编程语言排行榜榜首的
  14. 领航服务器系统,应用领航:盘点那些年我们一起追过的OS
  15. 滴滴怒怼美团;阿里麻吉宝刷屏;B站、爱奇艺上市 | CSDN 极客头条
  16. Bailian3177 判决素数个数【入门】(POJ NOI0113-10)
  17. [转载] python字符串方法有哪些_27种Python字符串操作方法大全
  18. 多线程之NSThread
  19. java 需要 不是语句,我应该避免使用Java标签语句吗?
  20. 【钉钉-场景化能力包】阿里商旅助力费控报销

热门文章

  1. 【码云周刊第 30 期】打造场景化的图片特效处理工具
  2. 百度网盘内部精简版APK下载-清爽稳定不限速下载文件
  3. AP近邻传播聚类算法(Affinity Propagation)
  4. 算法-经典趣题-窃贼问题
  5. 得力科学计算机换电池,就地取材,简单拆解维修得力小闹钟
  6. ntoskrnl.exe中Zw*与Nt*的区别
  7. vue Element InputNumber 计数器传参数
  8. 打印万年历的c语言程序,c语言打印万年历用数组
  9. 当TFT LCD液晶屏出现残影时该如何解决?
  10. POJ 1325 Kőnig's Theorem