单片机电子系统课程设计—简易电子琴
- 格式:doc
- 大小:330.50 KB
- 文档页数:20
简易电子琴设计用单片机控制扬声器,弹奏出一段音乐。
一、预备知识:乐曲由不同音符组成,各音符都有对应的频率,频率不同的方波加在扬声器上,就产生一个持续的音符。
利用不同的音符、音高、音长组合,就可产生想要的音乐。
对于单片机来说,利用其定时器产生不同频率的方波非常方便,以11.0592、22.1184MHz 晶振(实验箱)为例,列出高中低音符与单片机定时器初值如下表所示注意:1、一个音段常见由7个标准音组成(1do、2ri、3mi、4fa、5sol、61a、7si),但实际乐曲中还有一些介于2个标准音之间的音,即半度音,有 1.5、2.5、4.5、5.5、6.5共5个,所以完整的1个音段有12个音。
2、选择简谱时,尽量选用只含7个标准音的乐曲,而且要选C大调的(简谱左上角标着1=C X/4 ),否则各音符的频率要做相应的变化。
10二、设计目的了解扬声器的发声原理,进一步熟悉定时器、键盘扫描、LED 显示电路的工作原理及编程方法。
三、设计内容1 、设计键盘、LED 显示、扬声器驱动电路原理图;2、设计程序流程图;3 、编程调试,利用按键作为琴键,按下不同的键发出相应的音调,同时在LED 最右位显示对应键号值。
四、参考接线扬声器的SPK+ 端接VCC,SPK 负端连接到某一I/O 口。
五、设计步骤程序:KEYBUF EQU 30HSTH0 EQU 31HSTL0 EQU 32HTEMP EQU 33HORG 0000LJMP MAINORG 000BHLJMP INT_T0MAIN:MOV TMOD,#01HSETB ET0SETB EAWAIT:MOV P3,#0FFHCLR P3.4MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1LCALL DELAYMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1MOV A,P3ANL A,#0FHCJNE A,#0EH,NK1MOV KEYBUF,#0LJMP DK1NK1:CJNE A,#0DH,NK2MOV KEYBUF,#1LJMP DK1NK2:CJNE A,#0BH,NK3MOV KEYBUF,#2LJMP DK1NK3:CJNE A,#07H,NK4MOV KEYBUF,#3LJMP DK1NK4:NOPDK1:MOV A,KEYBUFMOV B,#2MUL ABMOV TEMP ,AMOV DPTR,#TABMOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK1A:MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK1ACLR TR0NOKEY1:MOV P3,#0FFHCLR P3.5MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY2LCALL DELAYMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY2MOV A,P3ANL A,#0FHCJNE A,#0EH,NK5MOV KEYBUF,#4LJMP DK2NK5:CJNE A,#0DH,NK6MOV KEYBUF,#5LJMP DK2NK6:CJNE A,#0BH,NK7MOV KEYBUF,#6LJMP DK2NK7:CJNE A,#07H,NK8MOV KEYBUF,#7LJMP DK2NK8:NOPDK2:MOV A,KEYBUFMOV B,#2MUL ABMOV TEMP ,AMOV DPTR,#TABMOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK2A:MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK1ACLR TR0 NOKEY2:MOV P3,#0FFHCLR P3.6MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY3LCALL DELAYMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY3MOV A,P3ANL A,#0FHCJNE A,#0EH,NK9MOV KEYBUF,#8LJMP DK1NK9:CJNE A,#0DH,NK10MOV KEYBUF,#9LJMP DK1NK10:CJNE A,#0BH,NK11MOV KEYBUF,#10LJMP DK1NK11:CJNE A,#07H,NK12MOV KEYBUF,#11LJMP DK3NK12:NOPDK3:MOV A,KEYBUFMOV B,#2MUL ABMOV TEMP ,AMOV DPTR,#TABMOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK3A:MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK3ACLR TR0NOKEY3:MOV P3,#0FFHCLR P3.7MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4LCALL DELAYMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4MOV A,P3ANL A,#0FHNK13:NK14: NK15:NK16: DK4: CJNE A,#0EH,NK13 MOV KEYBUF,#12 LJMP DK4CJNE A,#0DH,NK14 MOV KEYBUF,#13 LJMP DK4CJNE A,#0BH,NK15 MOV KEYBUF,#14 LJMP DK4CJNE A,#07H,NK16 MOV KEYBUF,#15 LJMP DK4NOPMOV A,KEYBUF MOV B,#2MUL ABMOV TEMP ,AMOV DPTR,#TABMOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK4A:MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK4ACLR TR0NOKEY4:MOV DPTR,#LED_TABMOV A,KEYBUFMOVC A,@A+DPTRMOV P1,ALJMP MAINDELAY:MOV R6,#10 D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RETINT_T0:MOV TH0,STH0MOV TL0,STL0CPL P2.0RETITAB:DW 62018,62401,62743,62895DW 63185,63441,63670,63774DW 63966,64138,64216,64360DW 64489,64603,64655,64752 LED_TAB:DB ;低1,2,3,4;低5,6,7 ,中1;中2,3,4,5;中6,7 ,高1,2至9 共阴3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;0DB 77H, 7CH, 39H, 5EH, 79H, 71H;A 至F END原理图:EXFJldlVTAll■匚AIE:pc.ii*r 1 ■HM口1 店MinPE.MiAE.-iF匚ar屋理ix傅?1 ALVEffSviC rzarti*i"Pl.1吒灯血fl J叭孑n1)r i J raji'TITIf irf ri.hTC和止■Fl?mfio。
单片机简易电子琴课程设计简易电子琴实验一、课程设计目的与要求1、掌握蜂鸣器的使用方法;2、掌握蜂鸣器的不同发音的方法;3、通过本次课程设计加深对单片机课程的认识和掌握,对单片机的应用做进一步了解。
二、课程设计设备STAR 序列试验仪一套、PC 机一台三、课程设计内容1、简易电子琴原理(1)蜂鸣器输入不同频率的方波,会发出不同的声音;(2)通过按键,由单片机控制产生不同频率的方波,从而发出不同的声音。
2、课程设计过程(1)通过单片机,是G6区的1-7号键由低到高发出1-7的音阶。
四、课程设计原理图1234567P1.0P1.1P1.2P1.3P1.4P1.5P1.6VccBuzzerLS12KR15.1KR28550Q60.01uFC40Ctrl100R11P1.7五、课程设计框图主程序:节拍1子程序(手动按键时用) 节拍2子程序(手动按键时用)0FFH->P1 开始 播放一段音乐 P1.0=0调用节拍1子程序 N Y 调用节拍2子程序 Y调用节拍3子程序Y 调用节拍4子程序 调用节拍5子程序 调用节拍6子程序 调用节拍7子程序P1.1=0P1.2=0N P1.3=0Y Y Y P1.4=0P1.5=0N P1.6=0Y N N N 0->P1.7 延时180us 1->P1.7 延时190us开始 返回0->P1.7 延时200us 1->P1.7 延时200us开始 返回节拍3子程序(手动按键时用)节拍4子程序(手动按键时用)开始0->P1.7延时180us1->P1.7延时170us返回开始0->P1.7延时160us1->P1.7延时160us返回节拍5子程序(手动按键时用)节拍6子程序(手动按键时用)开始0->P1.7延时150us1->P1.7延时150us返回开始0->P1.7延时140us1->P1.7延时140us返回节拍7子程序(手动按键时用)节拍1子程序(自动放音时用,时间约0.2s )节拍2子程序(自动放音时用,时间约0.2s ) 节拍3子程序(自动放音时用,时间约0.2s )0->P1.7 延时220us 计数器-1 1->P1.7 延时210us 1100->计数器 N计数器-1=0返回Y 0->P1.7 延时130us 1->P1.7 延时130us开始 返回开始节拍4子程序(自动放音时用,时间约0.2s ) 节拍5子程序(自动放音时用,时间约0.2s )节拍6子程序(自动放音时用,时间约0.2s ) 节拍7子程序(自动放音时用,时间约0.2s )NY 0->P1.7 延时170us 计数器-1 1->P1.7 延时170us开始 1300->计数器 计数器-1=0返回Y N0->P1.7 延时180us 计数器-1 1->P1.7 延时180us 开始 1250->计数器 计数器-1=0返回0->P1.7 延时185us 计数器-1 1->P1.7 延时180us开始 1200->计数器 Y N计数器-1=0返回NY 0->P1.7 延时190us 计数器-1 1->P1.7 延时190us 开始 1150->计数器 计数器-1=0返回六、课程设计步骤1、主机连线说明D1区:Ctrl — A3区:P1.7 G6区:JP74 —A3区:JP51(P1口)2、运行程序,按G6区的1-7号键,输出7种音阶。
目录1概述 (1)2方案设计 (2)2.1系统设计要求 (2)2.2电子琴系统的组成 (2)2.3电子琴系统的设计思想 (2)2.3.1 硬件设计思想 (2)2.3.2 软件设计思想 (3)3硬件电路设计 (4)3.1系统方案 (4)3.2系统功能框图 (5)3.3功能模块详细设计 (5)3.4主要芯片功能描述 (9)4 系统软件设计 (11)4.1主程序流程图 (11)4.2源程序 (12)4.3设计总结 (16)5 仿真与调试 (17)结束语 (19)参考文献 (20)1概述单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),单片机芯片常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
它最早是被用在工业控制领域。
由于单片机在工业控制领域的广泛应用,单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
INTEL的Z80是最早按照这种思想设计出的处理器,当时的单片机都是8位或4位的。
其中最成功的是INTEL的8031,此后在8031上发展出了MCS51系列单片机系统。
因为简单可靠而性能不错获得了很大的好评。
尽管2000年以后ARM已经发展出了32位的主频超过300M的高端单片机,直到目前基于8031的单片机还在广泛的使用。
在很多方面单片机比专用处理器更适合应用于嵌入式系统,因此它得到了广泛的应用。
事实上单片机是世界上数量最多处理器,随着单片机家族的发展壮大,单片机和专用处理器的发展便分道扬镳。
单片机课程设计 电子琴一、课程目标知识目标:1. 让学生理解单片机的基本原理,掌握单片机在电子琴设计中的应用。
2. 使学生掌握电子琴的基本结构,能运用单片机编程实现电子琴的基本功能。
3. 帮助学生了解电子琴音调产生原理,掌握音调与频率的关系。
技能目标:1. 培养学生运用单片机进行电子琴设计与编程的能力,能独立完成一个简单的电子琴项目。
2. 培养学生动手实践能力,提高焊接、调试和故障排除等技能。
3. 培养学生团队协作和沟通能力,能在项目过程中进行有效分工与合作。
情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,提高学习积极性。
2. 培养学生勇于尝试、不断探索的精神,增强克服困难的信心。
3. 引导学生关注科技发展,认识到所学知识在现实生活中的应用,培养创新意识。
分析课程性质、学生特点和教学要求,本课程目标具体、可衡量,有助于学生和教师在教学过程中明确预期成果。
将目标分解为具体学习成果,为后续教学设计和评估提供依据。
在教学过程中,注重理论与实践相结合,充分调动学生的积极性,提高学生的实践能力。
二、教学内容1. 单片机基础知识:介绍单片机的组成、工作原理,重点讲解CPU、内存、I/O口等部分的功能与应用。
教材章节:第一章单片机基础2. 电子琴结构与原理:讲解电子琴的基本结构,音调产生原理,键盘与发音电路的连接方式。
教材章节:第三章电子乐器原理3. 单片机编程:以C语言为基础,讲解单片机编程方法,重点掌握延时、中断、I/O口控制等编程技巧。
教材章节:第二章单片机编程基础、第五章中断与定时器4. 电子琴设计与制作:结合单片机知识,指导学生进行电子琴设计,包括硬件电路设计、程序编写、调试与优化。
教材章节:第四章单片机应用实例、第六章电子琴设计与制作5. 实践操作:安排学生进行电子琴硬件焊接、程序烧写、调试与测试,培养动手实践能力。
教材章节:第七章实践操作教学内容安排与进度:第一周:单片机基础知识学习,完成CPU、内存、I/O口等功能的学习。
简易电子琴单片机课程设计一、课程目标知识目标:1. 让学生掌握简易电子琴单片机的基本原理和组成结构,理解其工作流程。
2. 使学生了解并掌握电子琴音阶与音符的关系,能够识别常见音符及其对应的单片机程序编写方法。
3. 帮助学生掌握基础编程知识,能够使用相关软件编写简易电子琴程序。
技能目标:1. 培养学生运用单片机进行音乐创作的能力,能够编写并演奏简单曲目。
2. 提高学生动手实践能力,能够独立完成简易电子琴单片机的组装和调试。
3. 培养学生团队协作和问题解决能力,能够在团队中共同完成课程项目。
情感态度价值观目标:1. 培养学生对电子琴音乐创作的兴趣和热情,激发学生探索音乐世界的欲望。
2. 培养学生勇于尝试、不断探索的精神,增强面对困难的勇气和信心。
3. 培养学生环保意识和创新精神,关注科技发展,认识到科技进步对音乐产业的影响。
本课程针对高年级学生,结合学科特点,以实用性为导向,将理论知识与实践操作相结合。
课程目标旨在让学生在学习过程中,既能掌握电子琴单片机的基本知识,又能提高动手实践和团队协作能力,同时培养对音乐的热爱和科技创新意识。
通过分解课程目标为具体学习成果,为后续教学设计和评估提供明确方向。
二、教学内容1. 简易电子琴单片机原理及结构- 了解单片机的基本概念及功能- 学习简易电子琴单片机的组成结构及工作原理- 教材章节:第三章 单片机原理及其应用2. 音阶与音符关系- 掌握音阶与音符的基本概念及对应关系- 学习简易电子琴音阶与单片机程序编写方法- 教材章节:第四章 音乐基础与编程3. 编程知识与软件应用- 学习基础编程知识,如C语言基本语法、数据类型等- 掌握相关编程软件的使用,如Keil、Proteus等- 教材章节:第五章 单片机编程与仿真4. 动手实践与项目制作- 完成简易电子琴单片机的组装、调试与演奏- 课程项目:团队协作完成一首简单曲目的电子琴演奏- 教材章节:第六章 单片机项目实践5. 回顾与拓展- 对所学知识进行总结回顾,巩固学习成果- 探讨简易电子琴单片机的拓展应用,如与其他智能硬件的结合- 教材章节:第七章 单片机拓展应用教学内容根据课程目标制定,保证科学性和系统性。
单片机电子琴课程设计一、课程目标知识目标:1. 让学生理解单片机的基本原理和功能,掌握电子琴的基本构造和演奏方法。
2. 帮助学生掌握单片机编程的基本技巧,学会使用相关软件进行程序设计。
3. 使学生了解音乐理论中音阶、音符的基本知识,并将其应用于电子琴演奏。
技能目标:1. 培养学生动手操作单片机的能力,学会连接电子琴硬件并进行调试。
2. 培养学生编写简单电子琴程序的能力,实现不同音符的播放和乐曲演奏。
3. 提高学生团队协作和沟通能力,能够共同分析和解决在电子琴制作过程中遇到的问题。
情感态度价值观目标:1. 培养学生对单片机及电子琴制作的兴趣,激发学生探究精神,养成自主学习的好习惯。
2. 培养学生具有创新意识,敢于尝试,勇于实践,面对失败保持积极的心态。
3. 增强学生的环保意识,培养节约资源、爱护设备的良好习惯。
课程性质:本课程为实践性较强的课程,结合理论知识,培养学生的动手操作能力和实际应用能力。
学生特点:学生具备一定的电子知识和编程基础,对新鲜事物充满好奇心,喜欢动手实践。
教学要求:结合学生特点,注重理论与实践相结合,充分调动学生的积极性,提高学生的实践能力和创新能力。
在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 理论知识:- 单片机原理:介绍单片机的基本结构、工作原理和功能。
- 音乐理论:讲解音阶、音符、音长等基本音乐知识。
- 编程基础:回顾C语言基本语法,学习单片机编程方法和技巧。
2. 实践操作:- 电子琴硬件连接:学习电子琴硬件的组成,进行电路连接和调试。
- 程序编写:编写程序实现电子琴基本功能,如按键识别、音符播放等。
- 歌曲演奏:设计程序,实现简单乐曲的演奏。
3. 教学大纲:- 第一周:单片机原理学习,音乐理论知识回顾。
- 第二周:编程基础复习,电子琴硬件连接与调试。
- 第三周:编写电子琴程序,实现基本功能。
课程设计报告姓名:曹班级:101班学号:课程设计名:简易电子琴一、概述:本系统设计制作一个可演奏的电子琴。
综合应用了两项设计:(1)能产生纯音,了解音调高低的控制方法,用键盘代替电子琴的键盘,控制演奏音乐。
(2)演奏一支乐曲(天空之城)。
那音阶要怎么使用C51单片机产生呢?C51在这项工作中运用它哪些资源呢?我们怎么实现一个按键对应一个音阶呢?二、系统描述:(1)我们从初中开始就知道,声音是由振动产生的,基本的这7个音阶的频率之间满足某种数学关系由低到高排列的自然音,所以我们可以通过改变单片机输出频率就可以得到不同的音阶;(2)为了得到精确的频率(周期的倒数),我们可以使用C51单片机定时中断模块。
(3)通过判断按键是否被按下,然后执行该按键按下时的函数(在程序中是改变T1的初值得到实现)。
需要注意的是,在该程序中让8051的内部定时器使其工作在计数器模式MODE1下,改变记数值TH0及TL0以产生不同频率的方法。
例如频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时956/1=956在每记数9次时将I/O口反相,就可得到中音D0(523HZ)。
记数脉冲值与频率的关系公式如下:N=Fi/2/Fr N:记数值Fi:内部计时一次为1微秒.故其频率为1MHZFr;要产生的频率起记数值的求法如下:T=65536-N=65536-Fi/2/Fr例如:设K=65536,F=1000000=Fi=1MHZ,求低音D0(523HZ),高音的D0(1046HZ)的记数值。
T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr低音D0的T=65536-500000/262=63627中音D0的T=65536-500000/523=64580低音D0的T=65536-500000/1047=65059详细的音阶频率与计数初值可参考附录一;三、电路设计1.单片机最小系统模块2.三极管信号放大模块扬声器发出对应音符模块如下:3.按键电路模块:四.程序设计:本系统的程序流程图如下:程序如下:#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit kongzhi=P1^1;sbit fm=P1^0; //蜂鸣器输出的IO口uchar timeh,timel,i=8,t; //timeh,timel为定时器高低4位,i为演奏音符个数uchar code yinyue[]={0x63,0x71,0x83,0x71,0x82,0xA2,0x76,0x32,0x32,0x63,0x51,0x62,0x82,0x54,0x32,0x32,0x42,0x32,0x42,0x11,0x32,0x81,0x81,0x81,0x73,0x41,0x41,0x71,0x74,0x63,0x71,0x83,0x71,0x82,0xA2,0x74,0x31,0x31,0x63,0x51,0x62,0x82,0x54,0x31,0x42,0x83,0x71,0x71,0x83,0x91,0x91,0xA1,0x82,0x83,0x71,0x61,0x61,0x72,0x51,0x66,0xff};//---------------------------简谱---------------------------------------//1-7代表中音do~si,8代表高音douchar code yinfu[]={0x11,0x21,0x31,0x41,0x51,0x61,0x71,0x81,0xff};//----------------------------简谱音调对应的定时器初值---------------------------uchar code cuzhi[]={ 0xff,0xff, //占位符0xFC,0x44,0xFC,0xAD,0xFD,0x0A,0xFD,0x34,0xFD,0x83,0xFD,0xC8,0xFE,0x06,//中音do~si的T计数初值0xFE,0x22,0xFE,0x57,0xFE,0x85,0xFE,0x9B,0xFE,0xC2,0xFE,0xE4,0xFF,0x03}; //高音do的T计数初值void delay1ms(unsigned int ms); //延时ms毫秒子程序void delay165ms(uint z); //延时165ms,即1/4拍子程序void keysong(); //演奏子程序int key();void song();main(){ kongzhi=1;EA=1; //开总中断ET0=1; //开定时器0TMOD=0x01; //定时器0工作在方式1TH0=0;TL0=0;TR0=1;P3=0xff;while(1){ if(kongzhi==0){song();}else{key();keysong();}}}void song(){uint temp;uchar jp; //jp是简谱1~8的变量t=0;while(1){ temp=yinyue[t];if(temp==0xff) break; //到曲终则跳出循环jp=temp/16; //取数的高4位作为音调if(jp!=0){timeh=cuzhi[jp*2]; //取T的高4位值timel=cuzhi[jp*2+1]; //取T的低4位值}else{TR0=0;fm=1; //关蜂鸣器}delay165ms(temp%16); //取数的低4位作为节拍TR0=0; //唱完一个音停10msfm=1;delay1ms(10);TR0=1;t++;}TR0=0;fm=1;}void timer0() interrupt 1 //定时器0溢出中断子程序用于产生各种音调{TH0=timeh;TL0=timel;fm=~fm; //产生方波}void keysong(){uint temp;uchar jp; //jp是简谱1~8的变量delay1ms(50);if(i!=8){ TR0=1;temp=yinfu[i];jp=temp/16; //取数的高4位作为音调if(jp!=0){timeh=cuzhi[jp*2]; //取T的高4位值timel=cuzhi[jp*2+1]; //取T的低4位值}else{TR0=0;fm=1; //关蜂鸣器}delay165ms(temp%16); //取数的低4位作为节拍TR0=0; //唱完一个音停10msfm=1;delay1ms(10);//TR0=1;//i++;}TR0=0;fm=1;}int key(){ switch(P2){case 0xfe: return 0;case 0xfd: return 1;case 0xfb: return 2;case 0xf7: return 3;case 0xef: return 4;case 0xdf: return 5;case 0xbf: return 6;case 0x7f: return 7;default: return 8;}}//函数名:delay165ms//函数功能:采用软件实现延时约z*165ms//形式参数:无void delay165ms(uint z) //延时165ms,即1/4拍{uint x;for(x=0;x<z;x++)delay1ms(165);}//函数名:delay1ms//函数功能:采用软件实现延时约ms*1ms//形式参数:无//返回值:无void delay1ms(unsigned int ms){ unsigned int i,j;for(j=0;j<ms;j++)for(i=0;i<0x100;i++);}五.制作与调试:最后制作出的成品:六.测试结果。
单片机课程设计电子琴一、课程目标知识目标:1. 学生能理解单片机的基本原理和电子琴的基础知识,掌握单片机控制电子琴的基本电路构成。
2. 学生能掌握单片机编程的基本方法,运用C语言或汇编语言实现电子琴的音调控制。
3. 学生了解电子琴音阶与频率的关系,能运用数学知识进行音调计算。
技能目标:1. 学生能够独立设计并搭建单片机控制电子琴的硬件电路。
2. 学生能够编写程序,实现电子琴的基本功能,如音阶播放、简单曲目的演奏等。
3. 学生能够运用调试工具对电子琴程序进行调试和优化。
情感态度价值观目标:1. 学生通过动手实践,培养对单片机及电子制作的兴趣,增强学习动力。
2. 学生在团队协作中,学会沟通与交流,培养合作精神和解决问题的能力。
3. 学生在学习过程中,认识到科技对生活的改变,培养创新意识和社会责任感。
课程性质:本课程为实践性较强的课程,旨在让学生通过动手操作,掌握单片机控制电子琴的基本知识和技能。
学生特点:学生具备一定的电子基础和编程能力,对单片机有一定了解,对电子琴感兴趣。
教学要求:注重理论与实践相结合,强调动手实践和团队合作,关注学生的个体差异,提高学生的综合能力。
通过分解课程目标为具体学习成果,使学生在完成课程后能够达到上述目标。
后续教学设计和评估将以此为基础,确保课程目标的实现。
二、教学内容1. 理论知识:- 单片机原理与结构:介绍单片机的基本构成、工作原理及性能特点。
- 电子琴基础知识:讲解电子琴的音阶、音色及演奏方法。
- 单片机编程语言:回顾C语言和汇编语言的基本语法,为编程打下基础。
2. 实践操作:- 硬件电路设计:学习并搭建单片机控制电子琴的硬件电路,包括按键输入、音频输出等。
- 程序编写:编写程序实现电子琴的基本功能,如音阶播放、单音演奏等。
- 程序调试与优化:学习使用调试工具,对程序进行调试和优化。
3. 教学大纲:- 第一阶段(1课时):回顾单片机原理、电子琴基础知识及编程语言。
- 第二阶段(2课时):设计并搭建单片机控制电子琴硬件电路。
单片机简易电子琴课程设计一、课程目标知识目标:1. 让学生理解单片机的基础知识,掌握其编程原理;2. 帮助学生掌握简易电子琴的设计原理,包括音阶、音色和节奏的控制;3. 引导学生掌握电子琴的硬件连接和软件编程,了解两者之间的联系。
技能目标:1. 培养学生动手操作能力,能够独立完成单片机与电子琴硬件的连接;2. 培养学生编程能力,能够编写简单的程序控制电子琴演奏;3. 提高学生的问题解决能力,能够针对电子琴演奏过程中出现的问题进行调试和优化。
情感态度价值观目标:1. 培养学生对单片机及电子琴制作的兴趣,激发学习热情;2. 培养学生团队协作精神,学会在合作中共同解决问题;3. 培养学生创新思维,鼓励学生敢于尝试,勇于突破。
课程性质分析:本课程为实践性较强的课程,结合单片机技术与音乐知识,旨在培养学生的动手实践能力和创新精神。
学生特点分析:初中年级学生已经具备一定的物理知识和逻辑思维能力,对新鲜事物充满好奇心,喜欢动手实践。
教学要求:1. 结合课本知识,注重理论与实践相结合,提高学生的综合运用能力;2. 教学过程中,关注学生个体差异,给予每个学生个性化的指导;3. 注重教学评价,及时了解学生学习进度,调整教学策略,确保课程目标的实现。
二、教学内容1. 单片机基础知识:讲解单片机的组成、工作原理,重点掌握I/O口控制、定时器、中断等基本功能。
相关教材章节:第一章 单片机概述、第二章 单片机硬件结构。
2. 电子琴原理:介绍电子琴的基本原理,包括音阶生成、音色合成、节奏控制等。
相关教材章节:第三章 电子乐器原理、第四章 音频信号处理。
3. 硬件连接:学习如何将单片机与电子琴硬件连接,包括键盘矩阵、音频放大器、扬声器等。
相关教材章节:第五章 单片机接口技术。
4. 软件编程:编写程序实现电子琴的基本功能,包括音阶演奏、音色切换、节奏控制等。
相关教材章节:第六章 单片机编程基础、第七章 程序设计实例。
5. 实践操作:分组进行电子琴制作,让学生动手实践,提高实际操作能力。
《电子系统设计》课程设计实训报告姓名:学号:专业班级:指导教师:设计题目:简易电子琴完成时间:2011年06月20日目录目录 (1)一、引言 (2)1.1 摘要 (2)1.2 课程设计的目的 (2)1.3 课程设计的内容 (2)二、芯片简介 (2)2.1.1 AT89C51简介 (2)2.1.2 AT89C51主要功能特性 (3)2.2.1 DS18B20简介 (3)2.2.2 DS18B20的工作原理 (4)三、音乐产生的原理 (5)四、系统设计 (6)4.1 音乐发声流程图 (6)4.2 程序流程图 (7)4.3 总体电路流程图 (7)五、总结 (8)六、参考文献 (8)附录 (9)1.1 硬件电路图 (9)1.2 PCB封装图 (9)2.1 程序清单 (10)一、引言:1.1 摘要:电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
1.2 课程设计的目的:巩固和运用所学课程,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力,通过对一个简易的八音符电子琴的设计,进一步加深对计算机原理以及数字电路应用技术方面的了解与认识,进一步熟悉数字电路系统设计、制作与调试的方法和步骤。
巩固所学课堂知识,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力。
为了进一步了解计算机组成原理与系统结构,深入学习Protel技术,用C语言去控制将会使我们对本专业知识可以更好地掌握。
1.3 课程设计的内容:(1)设计一个简易的八音符电子琴,它可通过按键输入来控制音响。
(2)演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存入的乐曲。
(3)能够自动演奏多首乐曲,且每首乐曲可重复演奏。
二、芯片简介:2.1.1 AT89C51简介:AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k BytesISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89C51具有如下特点:40个引脚(引脚图如图2—1所示),4k Bytes Flash 片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89C51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
图2—1 AT89C51芯片引脚图2.1.2 AT89C51主要功能特性:·兼容MCS-51指令系统· 32个双向I/O口· 2个16位可编程定时/计数器·全双工UART串行中断口线· 2个外部中断源·中断唤醒省电模式·看门狗(WDT)电路·灵活的ISP字节和分页编程· 4k可反复擦写ISP Flash ROM· 4.5-5.5V工作电压·时钟频率0-33MHz· 128x8bit内部RAM·低功耗空闲和省电模式· 3级加密位·软件设置空闲和省电功能·双数据寄存器指针2.2.1 DS18B20简介:美国DALLAS半导体公司的DS18B20是世界上第一片支持“单总线”接口的数字式温度传感器,能够直接读取被测物的温度值。
它具有TO-92、TSOC、SOIC 多种封装形式,可以适应不同的环境需求。
其测量范围在-55~+125℃、-10℃~+85℃之内的测量精度可达±0 .5℃,稳定度为1%。
通过编程可实现9、10、11、12位的分辨率读出温度数据,以上都包括一个符号位,因此对应的温度量化值分别为0.5℃、0.2 5 ℃、0.25℃、0.0625℃,芯片出厂时默认为12位的转换精度。
读取或写入DS18B20仅需要一根总线,要求外接一个约 4.7 千欧姆的上拉电阻,当总线闲置时,其状态为高电平。
此时DS18B20是温度——电流传感器,对于提高系统抗干扰能力有很大的帮助。
负压特性电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
掉电保护功能 DS18B20内部含有 EEPROM,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。
DS18B20 具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。
(引脚图如图2—2所示)。
图2—2 DS18B20引脚图2.2.2 DS18B20的工作原理:DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。
其一个工作周期可分为两个部分,即温度检测和数据处理。
在讲解其工作流程之前我们有必要了解 DS18B20的内部存储器资源。
DS18B20共有三种形态的存储器资源,它们分别是:( 1 )ROM只读存储器,用于存放DS18B20ID编码,其前 8位是单线系列编码 ( DS18B20的编码是19 H),后面48位是芯片唯一的序列号,最后8位是以上56位的CRC码(冗余校验)。
数据在出厂时设置不由用户更改。
DS18B20共64位ROM。
( 2 )R A M 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为 8 位。
如图2所示。
第 1、2个字节是温度转换后的数据值信息,第3和第4字节是高温触发器和低温触发器的易失性拷贝,第 5 个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率,DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。
以上字节内容每次上电复位时被刷新。
配置寄存器字节各位的定义如图2所示。
低5 位一直为 1 ,是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户不要去改动;和用来设置分辨率,决定温度转换的精度位数。
三、音乐产生的原理:一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。
利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。
就可在P1.0引脚上得到此频率的脉冲。
利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系式(如式4-1所示)是:N=fi÷2÷fr 4-1 式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下:T=65536-N=65536-fi÷2÷fr例如:设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。
T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr低音DO的T=65536-500000/262=63627中音DO的T=65536-500000/523=64580高音DO的T=65536-500000/1046=65059单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表3—1所示四、系统设计:4.1 音乐发声流程图:图 4—14.2 程序流程图:图4—24.3 总体电路流程图:图4—3五、总结:将程序烧入芯片,调试成功后,可任意弹奏自己想要的旋律。
本研究通过制作电子琴,将几个模块很好的融合起来,对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
通过本次课程设计,不仅让我更深入的了解《电子系统设计》这门学科,更使自己有了继续探索的兴趣。
同时也更加掌握了C语言和Protel。
对我来说,在之前的学习过程中没有能够很好的掌握电子系统设计的学习,在很多地方还有生疏和遗漏,并且在此次课程设计过程中也遇到困难不能自已独立解决。
但是,通过这次程序设计,除了增加了自己的编程能力,提高了自己的动手能力。
同时我也深感“认真严谨”这个词的重要性,一点点小的马虎,便会导致整个程序不能正常运行。
在今后的学习中,我将继续保持严谨的学习态度。
与此同时,在同学的帮助下,让我体会到了相互学习的重要性,而更让人难以忘怀的是在热烈讨论问题时,那激情横溢的场面。
总之,此次课程设计让我获益匪浅。
六、参考文献:[1] 康年光《电子技术基础(数字部分)》高等教育出版社 2005.07[2] 刘乐喜《微机计算机接口技术及应用》华中科技大学出版社 2005.08[3] 谢嘉奎《电子线路(线性部分)》高等教育出版社 2004.04[4] 潭浩强《C语言程序设计》清华大学出版社 2005.07[5] 李群芳、肖看《单片机原理、接口及应用—嵌入式系统技术基础》清华大学出版社 2005.03附录:1.1 硬件电路图:1.2 PCB装配图:2.1 程序清单:#include "AT89X52.H"#include "ABSACC.H"#define paino P3_7Unsigned inttab[16]={63628,63835,64021,64103,64260,64400,64524,64580,64684,64777, 64820,64898,64968,65030,65058,65110};unsigned char jianma[16]={0xee,0xde,0xbe,0x7e, 0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b, 0xe7,0xd7,0xb7,0x77};unsigned char c[4]={0xef,0xdf,0xbf,0x7f};unsigned char z; //z为频率常数unsigned char x=0; //x为节拍常数unsigned char u=0;unsigned char code music_tab[] ={0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,0x20, 0x40, 0x1C , 0x10, //八月桂花遍地开0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00};unsigned char code song_tab[] ={0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20 ,0x30,0x20,//祝你平安0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20 ,0x1c,0x20,0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80 ,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10 ,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10 ,0x2b,0x10,0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40 ,0x40,0x20,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20 ,0x26,0x20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20 ,0x20,0x20,0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10 ,0x30,0x10,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10 ,0x2b,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20 ,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10 ,0x30,0x20,0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10 ,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00};void time1(void) interrupt 3 //产生10MS精确定时{ TH1=(65536-10000)/256;TL1=(65536-10000)%256;x--;}void delayms(unsigned int a) //微秒延时程序{while(--a);}void main(void){unsigned char m,n,a=0;unsigned char j,j1,jj1,jjj1,j2,jj2,j3=0;unsigned char w=0;bit e=0;unsigned char s=0;unsigned char h=0;bit r=0;TMOD=(TMOD&0x00)|0x11;TH1=(65536-10000)/256;TL1=(65536-10000)%256;EA=1; // T0,T1工作方式1ET0=1;ET1=1;TR0=0;TR1=0;while(1){if(P3_2==0){while(1){switch(song_tab[u]){case 0x00:u=0;delayms(25000); break; // 曲终停顿一定时间case 0xff:u=u+1;delayms(100);break; //遇到休止符停顿一定时间100微秒,再取下一个频率default:z=song_tab[u++]; //取频率到zx=song_tab[u++]; //取节拍到xif(z==0x18||z==0x30)s=1;else if(z==0x15||z==0x2B)s=2;else if(z==0x26)s=3;else if(z==0x20)s=5;else if(z==0x1C)s=6;elses=3;h++;if(r==1){h=1;r=0;}if(h==1){P0=discode[s];P2=(P2|0xf0)&0xef;delayms(50);}else if(h==2){P0=discode[s];P2=(P2|0xf0)&0xdf;delayms(50);}else if(h==3){P0=discode[s];P2=(P2|0xf0)&0xbf;delayms(50);}else if(h==4){P0=discode[s];P2=(P2|0xf0)&0x7f;delayms(50);r=1;}TR1=1;while(x!=0){paino=!paino;delayms(3*z);//调整产生的频率,可以通过在m前的值来修正音调的高低}TR1=0;}}}if(P3_3==0){while(1){switch(music_tab[u]){case 0x00:u=0;delayms(25000); break; // 曲终停顿一定时间case 0xff:u=u+1;delayms(100);break; //遇到休止符停顿一定时间100微秒,再取下一个频率default:z=music_tab[u++]; //取频率到zx=music_tab[u++]; //取节拍到xif(z==0x18||z==0x30)s=1;else if(z==0x15||z==0x2B)s=2;else if(z==0x26)s=3;else if(z==0x20)s=5;else if(z==0x1C)s=6;elses=3;h++;if(r==1){h=1;r=0;}if(h==1){P0=discode[s];P2=(P2|0xf0)&0xef;delayms(50);}else if(h==2){P0=discode[s];P2=(P2|0xf0)&0xdf;delayms(50);}else if(h==3){P0=discode[s];P2=(P2|0xf0)&0xbf;delayms(50);}else if(h==4){P0=discode[s];P2=(P2|0xf0)&0x7f;delayms(50);r=1;}TR1=1;while(x!=0){paino=!paino;delayms(3*z);//调整产生的频率,可以通过在z前的值来修正音调的高低}TR1=0;}}}for(m=0;m<4;m++){P1=c[m];for(n=0;n<16;n++){if(P1==jianma[n]){delayms(300); //去抖动if(P1==jianma[n]) //按键正式启动{w++;if(e==1){w=1;e=0;}if(n>14)j=n-13;else if(n==7||n==14)j=1;else if(n>7&&n!=14)j=n-6;elsej=n+1;a=1; //松开按键,P1就不等于jianma[n]了 }}else if(a==1) //保存数码信息显示{if(w==1){P0=discode[j];P2=(P3|0xf0)&0xef;delayms(50);j1=j;}else if(w==2){P0=discode[j];P2=(P2|0xf0)&0xef;delayms(50);P0=discode[j1];P2=(P2|0xf0)&0xdf;delayms(50);j2=j1;jj1=j;}else if(w==3){P0=discode[j];P2=(P2|0xf0)&0xef;delayms(50);P0=discode[jj1];P2=(P2|0xf0)&0xdf;delayms(50);P0=discode[j2];P2=(P2|0xf0)&0xbf;delayms(50);j3=j2;jj2=jj1;jjj1=j;}else if(w==4){P0=discode[j];P2=(P2|0xf0)&0xef;delayms(50);P0=discode[jjj1];P2=(P2|0xf0)&0xdf;delayms(50);P0=discode[jj2];P2=(P2|0xf0)&0xbf;delayms(50);P0=discode[j3];P2=(P2|0xf0)&0x7f;delayms(50);e=1;}}while(P1==jianma[n]) {paino=!paino;TH0=tab[n]/256;TL0=tab[n]%256;TR0=1;while(TF0!=1);TF0=0;}}}}}答辩:问:如何把电子琴与测温结合起来,当达到预设报警时,发出音乐声音?答:要把电子琴与温度控制结合起来,只需在主函数main()加入一些程序语句例如我们要让室温大于38摄氏度,就让电子琴唱歌,我们只需在mian()函数中的while(1)循环中加入如下语句If(read_temp>=38){P3_3=0;}便可实现当温度大等于38摄氏度时,扬声器便会唱歌。