单片机课程设计报告按键控制定时器选播多段音乐精编版

合集下载

音乐播放器-单片机课程设计

音乐播放器-单片机课程设计

设计内容与设计要求设计内容:本课题要求以单片机为核心设计一个音乐播放器,完成多曲选择播放控制、停止控制、省电模式控制等功能。

音乐播放器利用单片机的定时器产生乐谱的各种频率方波,信号经过放大后由喇叭发出声音,选取某段音乐使单片机连续播放。

设计3个按键:播放/停止、下一曲、上一曲;4位LED 显示器,用来显示所选曲目,该显示器在播放期间为了节省电源,设计为关闭状态,当一歌曲演奏结束,或选曲时显示器才显示曲目信息。

要求焊接好开发板,在开发板上进行调试。

设计要求:1)确定系统设计方案;2)进行系统的硬件设计;3)完成必要元器件选择;4)开发板焊接及测试5)系统软件设计及调试;6)系统联调及操作说明7)写说明书主要设计条件1、MCS-51单片机实验操作台1台;2、PC机及单片机调试软件,仿真软件proteus;3、开发板1块;4、制作工具1套;5、系统设计所需的元器件。

说明书格式目录第1章、概述第2章、系统总体方案设计第3章硬件设计第4章软件设计及调试第5章系统联调及操作说明第6章总结参考文献附录A系统硬件原理图附录B程序清单进度安排设计时间分为二周第一周星期一、上午:布置课题任务,课题介绍及讲课。

下午:借阅有关资料,总体方案讨论。

星期二、分班级焊接开发板星期三、确定总体方案,学习与设计相关内容。

星期四、各部分方案设计,各部分设计。

星期五、设计及上机调试。

星期六、设计并调试第二周星期一:设计及上机调试。

星期二:调试,中期检查。

星期三:调试、写说明书。

星期四--星期五上午:写说明书、完成电子版并打印成稿。

星期五下午:答辩。

参考文献参考文献1、王迎旭编.《单片机原理与应用》[M].机械工业出版社.2、楼然苗编.《51系列单片机设计实例》[M].北京航空航天大学出版社.3、黄勤编.《计算机硬件技术基础实验教程》[M].重庆大学出版社4、刘乐善编.《微型计算机接口技术及应用》[M].华中科技大学出版社.5、陈光东编.《单片微型计算机原理及接口技术》[M].华中科技大学出版社.第1章概述... ... ... ... ... ... ... ... .. .. . 61.1单片机简介... ... ... ... .. ... ... ... (6)1.2 任务简介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7第2章系统总体方案设计 (8)2.1 音乐的产生... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82.2 系统方案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 10第3章硬件设计 (11)3.1 89C51单片机 (12)3.2 I/O并行口直接驱动LED显示 (14)3.3 蜂鸣电路. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153.4控键电路.. . . . . . . . . . . . . . . . . . .163.5时钟电路 . . . . . . . . . . . . . . . . .. .173.6电源电路 . . . . . . . . . . . . . . . . . . 17 第4章软件设计 (18)4.1.软件设计 (18)4.2 设计方案. . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . .. . . . .19第5章系统调试与仿真 (20)5.1软件仿真阶段 (20)5.2系统的仿真调试阶段 (20)5.3调试问题处理 (21)第6章心得体会 (22)参考文献 (23)附录A:音乐播放器电路设计图 (24)附录B:程序清单 (25)第1章概述1.1单片机简介单片机又称单片微控制器,它不是完成某一逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

音乐播放器单片机课程设计

音乐播放器单片机课程设计

一.概述 (2)二.系统总体方案设计 (3)三.硬件设计 (6)3.1 89C51单片机 (6)图3-1和3-2 (7)3.2 I/O并行口直接驱动LED显示 (7)四.软件设计 (10)4.1.软件设计 (10)五.系统调试与仿真 (12)5.1软件仿真阶段 (12)5.2系统的仿真调试阶段 (12)5.3硬件安装调试 (12)六.总结 (14)参考文献 (15)附录A:音乐播放器电路设计图 (16)附录B:程序清单 (17)一.概述本课题要求以单片机为核心设计一个音乐播放器,完成多曲选择播放控制、停止控制、省电模式控制等功能。

音乐播放器利用单片机的定时器产生乐谱的各种频率方波,信号经过放大后由喇叭发出声音,选取某段音乐使单片机连续播放。

设计3个按键:播放/停止、下一曲、上一曲;4位LED显示器,用来显示所选曲目,该显示器在播放期间为了节省电源,设计为关闭状态,当一歌曲演奏结束,或选曲时显示器才显示曲目信息。

总体的设计思路是这样的。

二.系统总体方案设计本课题要求以单片机为核心设计一个简易音乐播放器,具有自动播放乐曲的功能。

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,音阶对应频率关系图1-1:图2-1本设计用89C51单片机为核心,利用8段数码管显示器.采用动态显示输出,声音输出用蜂鸣器来实现。

采用8段数码管显示器进行动态显示需要占用4根I/O线,蜂鸣器占用1根I/O线,89C51单片机有足够的线,不用扩展I/O口。

用一片单片机即可满足本设计的输入输出。

系统框图如图1-2所示:图2-2通过对音乐播放器主体部分的电路进行模仿设计,达到播放器固有的基本功能,设定按钮K1、 K2和K3。

按钮K1打开并自动播放乐曲1;按钮K2打开并自动播放乐曲2;按钮K3为手动控制音乐停止的按键。

根据设计要求该播放器能实现音键的控制。

除此之外还实现了存储并读出几首音乐的功能。

单片机课程设计实验报告(带歌曲的电子钟)

单片机课程设计实验报告(带歌曲的电子钟)

一、目的任务本课程设计是主干实践课。

课程的任务在于提高学生综合运用所学知识理论、分析解决问题的能力。

二、内容(1)题目带歌曲演奏的电子表(参考硬件25,P78)(2)要求a.利用8051单片机设计出具有时、分、秒显示的电子表。

b.在设定的时间到时,可以演奏一首歌曲。

c.可以定闹,闹钟是另一首歌曲。

(3)设计说明对于这个题目我选择的是汇编语言编程加韦福单片机仿真系统合作完成。

主要由两大模块组成,电子钟模块和歌曲模块,设计思想如下:电子钟模块:利用仿真器的六个LED显示当前时间,通过软件编程完成十分秒的计时,并在LED上同步的显示出来。

其中设置两个按键的功能,当A键按下时,从电子钟模块转换到手动键盘输入的界面,此时手动输入时间,当B键按下时,返回电子钟的界面继续计时并且显示。

歌曲模块:当手动键盘输入时间和当前时间相同时,调取歌曲的子程序,利用仿真器的扬声器放一首歌,本设计中是祝你平安,当歌曲播放完毕,继续回到电子钟的界面,继续计时并且显示。

(4)硬件设计(完整电路图),文字说明硬件的连接比较简单,只有两根线,即片选端CSO连接LED输入端,P3.6口连接扬声器的输入端,完整的电路图如下所示:(5)软件设计(程序框图,源程序(带注释)),文字说明程序框图:A键和B键的功能框图源程序:OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN equ 08001h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲LEDBuf1 equ 50h ; 显示缓冲Hour equ 40hMinute equ 41hSecond equ 42hC100us equ 43hSPK equ P3.6 ;扬声器接P3.6口Tick equ 10000T100us equ 256-50Num equ 70hljmp Start ;跳入主程序org 000bh ;定时器中断0入口地址jmp T0Intorg 001bh ;定时器中断1入口地址ljmp PPT0Int:push PSWpush ACCmov a, C100us+1jnz Goondec C100usGoon:dec C100us+1mov a, C100usorl a, C100us+1jnz Exitmov C100us, #high(Tick)mov C100us+1, #low(Tick)inc Secondmov a, Secondcjne a, #60, Exitmov Second, #0inc Minutemov a, Minutecjne a, #60, Exitmov Minute, #0inc Hourmov a, Hourcjne a, #24, Exitmov Hour, #0Exit:pop ACCpop PSWretiDelay: ; 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h DisplayLED: ;显示程序mov r0, #LEDBufmov r1, #6 ; 共6个八段管mov r2, #00100000b ; 从左边开始显示Loop:mov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管mov a, @r0mov dptr, #OUTSEGmovx @dptr,amov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管mov r6, #1call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, LoopretisplayLED1:mov r0, #LEDBuf1mov r1, #6 ; 共6个八段管mov r2, #00100000b ; 从左边开始显示DisplayLED1:mov r0, #LEDBuf1mov r1, #6 ; 共6个八段管mov r2, #00100000b ; 从左边开始显示Loop1:mov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管mov a, @r0mov dptr, #OUTSEGmovx @dptr,amov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管mov r6, #1call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, Loop1retTestKey:mov dptr, #OUTBITmov a, #0movx @dptr, a ; 输出线置为0mov dptr, #INmovx a, @dptr ; 读入键状态cpl aanl a, #0fh ; 高四位不用retKeyTable: ; 键码定义db 16h, 15h, 14h, 0ffhdb 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hGetKey:mov dptr, #OUTBITmov P2, dphmov r0, #Low(IN)mov r1, #00100000bmov r2, #6KLoop:mov a, r1 ; 找出键所在列cpl amovx @dptr, acpl arr amov r1, a ; 下一列movx a, @r0cpl aanl a, #0fhjnz Goon1 ; 该列有键入djnz r2, KLoopmov r2, #0ffh; 没有键按下, 返回0ffhsjmp Exit1Goon1:mov r1, a ; 键值= 列X 4 + 行mov a, r2dec arl arl amov r2, a ; r2 = (r2-1)*4mov a, r1 ; r1中为读入的行值mov r1, #4loopz:rrc a ; 移位找出所在行jc Exit1inc r2 ; r2 = r2+ 行值djnz r1, LoopzExit1:mov a, r2 ; 取出键码mov dptr, #KeyTablemovc a, @a+dptrmov r2, aWaitRelease:mov dptr, #OUTBIT ; 等键释放clr amovx @dptr, amov r6, #10call Delaycall TestKeyjnz WaitReleasemov a, r2retToLED:mov dptr, #LEDMapmovc a, @a+dptrretStart: MOV SP,#50Hmov r4,#0mov TMOD, #12h ; 模式2, 定时器mov TH0, #T100usmov TL0, #T100usmov IE, #10001010b ; EA=1, IT0 = 1MOV TH1,#0D8HMOV TL1,#0EFH;MOV TMOD,#10Hmov Hour, #09mov Minute, #0mov Second, #0mov C100us, #high(Tick)mov C100us+1, #low(Tick)setb TR0 ; 启动定时器0MLoop:mov a, Hourmov b, #10div abcall ToLEDmov LEDBuf, a;将小时分开两位来显示mov a, bcall ToLEDmov LEDBuf+1, amov a, Minutemov b, #10div abcall ToLED;将分钟分开两位来显示mov LEDBuf+2, amov a, bcall ToLEDmov LEDBuf+3, amov a, Secondmov b, #10div abcall ToLED;将秒钟分开两位来显示mov LEDBuf+4, amov a, bcall ToLEDmov LEDBuf+5, acall DisplayLED ;调用显示程序cjne r4,#0,zzljmp xxloopzzloop:mov a,60h;对当前输入的时间和计时时间进行比较cjne a,50h,rrrmov a,61hcjne a,51h,rrrmov a,62hcjne a,52h,rrrmov a,63hcjne a,53h,rrrmov a,64hcjne a,54h,rrrmov a,65hcjne a,55h,rrrcall MUSIC0 ;相等即调用音乐程序mov r4,#0rrr: ljmp xxloop ;不相等调用显示程序xxloop: call DisplayLED ; 显示call TestKey ; 有键入?jz MLoop ; 无键入, 继续显示call GetKey ; 读入键码anl a, #0fh ; 显示键码mov dptr, #LEDMapmovc a, @a+dptrmov LEDBuf+5, acjne a,#77h, xxloop 判断A键是否被按下jjloop :mov LEDBuf+0, #0 ; 显示8.8.8.8.mov LEDBuf+1, #0mov LEDBuf+2, #0mov LEDBuf+3, #0mov LEDBuf+4, #0mov LEDBuf+5, #0t1P:call DisplayLED1 ; 显示call TestKe ; 有键入?jz t1p ; 无键入, 继续显示call GetKey ; 读入键码anl a, #0fh ; 显示键码mov dptr, #LEDMapmovc a, @a+dptrmov 50h,at2P:call DisplayLED ; 显示call TestKey ; 有键入?jz t2P ; 无键入, 继续显示call GetKey ; 读入键码anl a, #0fh ; 显示键码mov dptr, #LEDMapmovc a, @a+dptrmov 51h, at3P:call DisplayLED ; 显示call TestKey ; 有键入?jz t3P ; 无键入, 继续显示call GetKey ; 读入键码anl a, #0fh ; 显示键码mov dptr, #LEDMapmovc a, @a+dptrmov 52h, at4P:call DisplayLED ; 显示call TestKey ; 有键入?jz t4P ; 无键入, 继续显示call GetKey ; 读入键码anl a, #0fh ; 显示键码mov dptr, #LEDMapmovc a, @a+dptrmov 53h, at5P:call DisplayLED1 ; 显示call TestKey ; 有键入?jz t5P ; 无键入, 继续显示call GetKey ; 读入键码anl a, #0fh ; 显示键码mov dptr, #LEDMapmovc a, @a+dptrmov 54h, at6P:call DisplayLED1 ; 显示call TestKey ; 有键入?jz t6P ; 无键入, 继续显示call GetKey ; 读入键码anl a, #0fh ; 显示键码mov dptr, #LEDMapmovc a, @a+dptrmov 55h, ayyLoop:call DisplayLED1 ; 显示call TestKey ; 有键入?jz yyLoop ; 无键入, 继续显示call GetKey ; 读入键码anl a, #0fh ; 显示键码mov dptr, #LEDMapmovc a, @a+dptrmov LEDBuf+5, acjne a,#7ch,yyloop;判断B键是否被按下mov r4,#1ljmp mloopPP: INC 20H ;歌曲的子程序MOV TH1,#0D8HMOV TL1,#0EFHRETIMUSIC0: NOPMOV DPTR,#DATMOV 20H,#00HMUSIC1: NOPCLR AMOVC A,@A+DPTRJZ END0CJNE A,#0FFH,MUSIC5LJMP MUSIC3MUSIC5: NOPMOV num+6,AINC DPTRMOV A,#0MOVC A,@A+DPTRMOV num+7,ASETB TR1MUSIC2: NOPCPL SPKMOV A,num+6MOV num+3,ALCALL DELMOV A,num+7CJNE A,20H,MUSIC2MOV 20H,#00HINC DPTRLJMP MUSIC1 MUSIC3: NOPCLR TR1MOV num+2,#0DH MUSIC4: NOPMOV num+3,#0FFHLCALL DELDJNZ num+2,MUSIC4INC DPTRLJMP MUSIC1END0: NOP;MOV R2,#0FFHljmp mloopMUSIC6: MOV num+3,#00HLCALL DELDJNZ num+2,MUSIC6LJMP MUSIC0DEL: NOPDEL3: MOV num+4,#02H DEL4: NOPDJNZ num+4,DEL4NOPDJNZ num+3,DEL3RETNOPDA T: DB 26h,20h,20h,20hDB 20h,20h,26h,10hDB 20h,10h,20h,80hDB 26h,20h,30h,40hEND ;程序结束。

单片机课程设计报告-定时闹钟(含程序)

单片机课程设计报告-定时闹钟(含程序)

河南理工大学单片机课程设计报告定时闹钟姓名:XXX学号:XXX专业班级:XXX指导老师:XXX所在学院:电气工程与自动化学院XXX年6月30日本设计是用单片机原理及其相关硬件的运用实现的定时闹钟。

数字电子钟设计与制作可采用数字电路实现,也可以采用单片机来完成。

若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。

若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计与制作中采用单片机AT89C51,它是低功耗、高性能的CMOS型8位单片机。

片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。

另外, AT89C51的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。

显示部分采用六位一体的共阳极数码管,运用同相三态双向总线收发器74LS245作为输出驱动显示部件的元件。

在编写程序的过程采用了定时程序和时间调整程序对称的编写方法。

并且在时间的调整或设置过程中本设计采用了长按进行调时或调分的选择,短按是进行在选择后进行加1,每短按一次,该单位加1.调整完毕以后再次长按原设置键即可跳出设置循环,显示部分――共阳极数码管显示正常走时的时间。

但是该程序在硬件的仿真过程中有点瑕疵。

在仿真开始时警示灯直接亮,必须通过闹钟定时键K2的闹钟设置以后时间才可以正常走时。

之后可以进行时间的调整或闹钟的重新调整。

1 概述 (3)1.1设计任务 (3)1.2设计要求 (3)1.3设计意义 (3)2 系统总体方案与硬件选择设计 (4)2.1系统总体方案 (4)2.2硬件选择设计 (4)3 软件设计 (9)3.1程序流程图 (9)3.2程序模块 (10)4 PROTEUS软件仿真 (17)5 课程设计体会 (19)参考文献 (19)附1:源程序代码 (21)附2:系统原理图 (33)1概述1.1 设计任务在熟练掌握单片机及其仿真系统的使用方法的基础上,综合应用单片机原理,微机原理,微机接口技术等专业知识,设计采用一个AT89C51单片机控制的定时闹钟。

基于51单片机音乐播放器课程设计报告

基于51单片机音乐播放器课程设计报告

基于51 单片机音乐播放器课程设计报告课程设计课程设计名称:单片机课程设计专业班级电科0901 学生姓名:学号:200948360118指导教师:课程设计时间:2012-9-20〜2012-9-28 电子信息科学与技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文) 首页一设计任务及要求利用单片机定时器完成控制音乐的频率,每个音调响的时长,来达到播放出音乐。

并且实时监测红外接收管是否触发中断,来判断是否遥控器按下了播放/ 暂停键、上一首、下一首,进而实时处理。

并把信息显示在1602 液晶上。

音高与频率的对应关系下表:二设计原理图单片机与1602 液晶、红外接收管SM0038 接线图单片机驱动蜂鸣器电路及红外遥控器键码本次实验所用按键及对应编码:( 1 )上一首07 (2) 下一首15 (3)播放/暂停09三程序设计框图Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;装入的初值(10ms 的初装值)Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256; 装入的初值TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TMOD |= 0x11;ET0 = 1;ET1 = 0;PT0 = 0;TR0 = 0;TR1 = 0;EA = 1;void write_cmd(uchar cmd)//1602 lcd_rs=0; lcd_w=0;P0=cmd;delay(7);lcd_en=1;delay(6);lcd_en=0;void write_date(uchar date)//1602lcd_rs=1;lcd_w=0;P0=date;delay(7);lcd_en=1;delay(6);lcd_en=0;void init_1602()// 初始化1602lcd_en=0;write_cmd(1);write_cmd(0x84);write_cmd(0x38); write_cmd(0x0f); write_cmd(0x06);void inte1_init()// 红外中断 // 计算 TL1 应 // 计算 TH1 应 IT1 = 1;// 外部中断,下降沿中断EX1 = 1;// 开外部中断PX1 = 1;//EA = 1;// 开总中断IRIN=1; // 读引脚前,先置高void jiema() // 红外解码uchar i,j; for(j=0;j<4;j++)irma[j]=0;// 清除上次的码for(i=0;i<8;i++)irma[j]=irma[j]>>1;// 右移 1 位while(!IRIN);// 等待 0.56ms 低电平结束 time2_init();// 启动定时, 0.8ms while(!TF2);// 等到 0.8ms 时间到TR2=0;// 关定时器TF2=0;// 清标志位if(IRIN)// 发送是 1,其高电平时间长,大于 0.565ms irma[j]|=0x80;// 把最高位置 1 while(IRIN);// 等待高电平结束,以便于进入下一位的解码 } void Lcd_displays(uchar add,char *s)//1602 显示字符串uchar i;write_cmd(add);for(i=0;i<strlen(s);i++)write_date(s[i]);void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int 写命令写数据Speed)// 播放歌曲函数unsigned int NewFreTab[12]; // 新的频率表unsigned char i,j;unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength; unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;for(i=0;i<12;i++) // 根据调号及升降八度来生成新的频率表j = i + Signature;if(j > 11)j = j-12;NewFreTab[i] = FreTab[j]*2;NewFreTab[i] = FreTab[j];if(Octachord == 1)NewFreTab[i]>>=2;else if(Octachord == 3)NewFreTab[i]<<=2;SoundLength = 0;while(Sound[SoundLength] != 0x00) // 计算歌曲长度SoundLength+=2;Point = 0;Tone = Sound[Point];Length = Sound[Point+1]; // 读出第一个音符和它时时值LDiv0 = 12000/Speed; // 算出 1 分音符的长度(几个10ms)LDiv4 = LDiv0/4; // 算出 4 分音符的长度LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最长间隔标准TR0 = 0;TR1 = 1;while(Point < SoundLength)SL=Tone%10; // 计算出音符SM=Tone/10%10; // 计算出高低音SH=Tone/100; // 计算出是否升半CurrentFre = NewFreTab[SignTab[SL-1]+SH]; // 查出对应音符的频率if(SL!=0)if (SM==1) CurrentFre >>= 2; // 低音if (SM==3) CurrentFre <<= 2; // 高音Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);// 计算计数器初值Sound_Temp_TH0 = Temp_T/256;Sound_Temp_TL0 = Temp_T%256;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0 + 12; // 加12 是对中断延时的补偿}SLen=LengthTab[Length%10]; // 算出是几分音符XG=Length/10%10; // 算出音符类型(0 普通 1 连音 2 顿音) FD=Length/100;LDiv=LDiv0/SLen; // 算出连音音符演奏的长度(多少个10ms) if (FD==1)LDiv=LDiv+LDiv/2;if(XG!=1)if(XG==0) // 算出普通音符的演奏长度if (SLen<=4)LDiv1=LDiv-LDiv4;LDiv1=LDiv*SOUND_SPACE;LDiv1=LDiv/2; // 算出顿音的演奏长度LDiv1=LDiv;if(SL==0) LDiv1=0;LDiv2=LDiv-LDiv1; // 算出不发音的长度if (SL!=0)TR0=1;for(i=LDiv1;i>0;i--) // 发规定长度的音while(TF1==0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0; if(LDiv2!=0) void BeepTimer0(void) interrupt 1 // 音符发生中断BeepIO = !BeepIO;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0;void inte1inte() interrupt 2 // 红外中断,外部中断 1 uchar k=10;EX1 = 0;// 关外部中断while(k--)〃循环十次,一次0.8ms,十次8ms , time2_init();while(!TF2);TF2 = 0;TR2 = 0;if(IRIN)// 中间如果出现高电平,就说明不是9MS 的引导电平{EX1 = 1;// 则开外部中断,退出中断return;while(!IRIN);// 运行到此,说明是引导电平,等待9MS 引导结束k=3;// 循环 3 次,每次0.8ms ,总共 2.4ms,while(k--)time2_init();while(!TF2);TF2 = 0;TR2 = 0;if(!IRIN)//2.4ms 结束如果变低电平,说明是重码,EX1 = 1;return;// 开中断,退出中断while(IRIN);// 等待 4.5ms 高电平结束,到此说明是正常红外信号jiema();// 解码程序,包括用户码,和按键码// irfenli();if(irma[2]==0x09||irma[2]==0x15||irma[2]==0x07){// 判断按下是哪一个键if(irma[2]==0x09)if(com==0)com=1;com=0; if(com)Lcd_displays(0x80,"START");Lcd_displays(0x80,"PAUSE");else if(irma[2]==0x15) newmusic++;if(newmusic==4)newmusic=1;Lcd_displays(0x80,"NEST "); newmusic--;if(newmusic==0)newmusic=3;Lcd_displays(0x80,"LAST ");switch(newmusic){// 更新1602 显示case 1:Lcd_displays(0x88,"MUSIC1");break; case 2:Lcd_displays(0x88,"MUSIC2");break; case 3:Lcd_displays(0x88,"MUSIC3");break; }// Lcd_display();EX1 = 1;return;三首歌曲的代码:位于music.h 文件内// 挥着翅膀的女孩unsigned char code Music_Girl[]={0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03, 0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03, 0x1B,0x03, 0x1F,0x03,0x1F,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03, 0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02, 0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02, 0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00}; // 同一首歌unsigned char code Music_Same[]={0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02, 0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66, 0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00, 0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03, 0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03, 0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03, 0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C,0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03, 0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02, 0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03, 0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70, 0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66, 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02, 0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C, 0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66, 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00, 0x00,0x00 };// 两只蝴蝶unsigned char code Music_Two[] ={0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01, 0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00, 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,课程设计课程设计名称:单片机课程设计专业班级电科0901 学生姓名:学号:200948360118指导教师:课程设计时间:2012-9-20〜2012-9-28电子信息科学与技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页一设计任务及要求利用单片机定时器完成控制音乐的频率,每个音调响的时长,来达到播放出音乐。

单片机课程设计音乐播放器报告

单片机课程设计音乐播放器报告

中州大学《单片机》课程设计报告报告题目:音乐播放器作者所在系部:工程技术学院作者所在专业:电气自动化作者所在班级:B10204作者姓名:张强作者学号:20104020416指导教师姓名:雷刚完成时间:2014年10月12日课程设计任务书课题名称音乐播放器的设计完成时间 6.12 指导教师王晓职称副教授学生姓名张婷班级B10204总体设计要求和技术要点利用单片机设计一个音乐播放器,并能够播放三种音乐,音乐自行设计。

一、设计目的1.掌握单片机定时器的使用方法2.掌握单片机扩展显示器、键盘的方法二、技术指标1.键盘设置3种音乐的播放切换;2.LED显示3种音乐的提示符;3. 流水灯闪烁工作内容及时间进度安排第14周:周1到周2查阅资料,确定设计方案周3到周4编写程序并进行proteus仿真周5焊接调试第17周:周1撰写实验报告周2验收课程设计成果1.与设计内容对应的软件程序与焊接实物2.课程设计报告书内容摘要本文的主要内容是用AT89C52单片机为核心控制元件,设计一个音乐播放器,以单片机作为主控核心、蜂鸣器等模块组成。

利用单片机产生不同频率来获得要求的音阶,最终可随意编写需要的程序,播放出音乐。

在此设计中我采用12MHz的晶振,产生的频率信号即音乐信号由P3.7口输出,信号经过放大后由喇叭发出声音。

设有四个按键,其中两个能实现多首音乐的选择,另一个能实现开始功能和单曲重播的功能,最后一个能实现复位和关闭歌曲的功能。

设有一位数码管,每选择一首曲子能在数码管上显示当前的曲目(只是数字)。

设十六个发光二极管,能随歌曲频率闪烁。

关键字:单片机音乐不同频率按键目录一、概述 (1)二、方案设计与论证 (1)1.硬件设计 (1)2.软件设计 (2)三、单元电路设计与分析 (3)1.单片机最小系统 (3)2. 数码管显示 (4)3.发光二级管和按键 (4)4.蜂鸣器发声 (5)5.软件部分程序和流程图 (5)四、总原理图及元器件清单 (11)1.总原理图 (11)2元器件清单 (11)五、结论 (12)六、心得体会 (12)七、参考文献 (12)一、概述作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括“Do“、“Re“、“Me“--等音阶在内的各种频率声音。

基于单片机汇编编程的音乐提示定时器课程设计报告

基于单片机汇编编程的音乐提示定时器课程设计报告

目录第一章概述 (1)一单片机的组成及特点 (1)二定时器的应用 (1)第二章系统总体设计 (2)第三章硬件模块方案设计 (3)一必要元器件选择 (3)二蜂鸣器电路设计 (3)三晶振电路设计 (4)四系统原理图设计 (4)第四章系统软件设计 (6)一主程序设计 (6)二键盘处理子程序 (8)第五章系统调试 (10)一硬件部分调试 (10)二软件部分调试 (10)1编辑、编译 (10)2 程序下载 (11)3 运行调试 (11)第六章总结体会 (12)附录1 (13)程序清单 (13)附录2 (22)参考文献 (22)第一章概述一单片机的组成及特点单片机是将CPU、存储器、定时器/计数器、输入/输出接口电路、中断、串口通信接口等主要计算机部件集成在一块大规模集成电路芯片上,组成单片机微型计算机,简称单片机。

单片机具有集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等特点。

二定时器的应用随着社会的进步,电子行业的发展,定时器的应用极大的方便了人们的生活。

定时关闭家用电器(如:空调,微波炉,电磁炉,洗衣机),定时提醒(如:约会,小憩)。

本篇设计讨论了基于单片机的音乐提示定时器,从降低硬件成本,方便用户操作出发,以软件为主,同时兼顾软硬件升级。

第二章 系统总体设计本系统基于STC 89C52RC 单片机,4个8段数码管采用动态显示倒计时时间,定时时间输入采用4x4矩阵键盘(虽然在本设计中只用到4个按键,考虑到系统升级故采用4x4矩阵键盘),单片机中的系统总线与存储器已足够满足系统要求故不需扩展。

本系统要求以单片机为核心设计一个音乐提示定时器,具备倒数计时、时间设置、音乐演奏等功能。

设计60分钟、20分钟、10分钟、5分钟的设置开关或按键,例如20分钟,显示为“20.00”,内定倒数计时时间为5分钟,显示为05:00。

一旦按键后则开始倒计时,当计时为0则演奏一曲音乐,而且可循环播放,可随时停止。

按键选播电子音乐 课程设计

按键选播电子音乐 课程设计

例说51单片机课程设计——课题:按键选播电子音乐第 1 章单片机系统功能简介本例单片机内置了三段电子音乐,按下连接P3.2的K1键时将触发INT0中断,中断例程控制切断播放另一段音乐。

第 2 章单片机系统硬件电路设计2-1 PROTEUS7.5原理图:2-2 元器件清单:第 3 章单片机系统软件设计3-1 流程图设计主程序流程图:3-2 程序设计:#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P3^7;uint code Tone_Delay_Table[]={ 64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178};uchar code Song1_Tone[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0xFF}; uchar code Song1_Time[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xFF};uchar code Song2_Tone[]={3,5,5,3,2,1,2,3,5,3,2,3,5,5,3,2,1,2,3,2,1,1,0xFF};uchar code Song2_Time[]={2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0xFF};uchar code Song3_Tone[]={1,3,3,3,3,5,4,2,5,3,7,6,5,5,7,4,4,3,6,7,2,1,0xFF};uchar code Song3_Time[]={2,1,1,2,1,1,1,2,1,1,3,2,1,1,2,4,1,1,2,1,1,1,0xFF};uchar Song_Index=0,Tone_Index=0;uchar *Song_Tone_Pointer,*Song_Time_Pointer;uchar i=0;void DelayMS(uint ms){uchar t;while(ms--) for(t=0;t<120;t++);}void Key_Press() interrupt 0{TR0=0;Song_Index=(Song_Index+1)%3;switch (Song_Index){case 0: Song_Tone_Pointer=Song1_Tone;Song_Time_Pointer=Song1_Time;break;case 1: Song_Tone_Pointer=Song2_Tone;Song_Time_Pointer=Song2_Time;break;case 2: Song_Tone_Pointer=Song3_Tone;Song_Time_Pointer=Song3_Time;break;}i=0;TR0=1;}void Timer0_Play_music() interrupt 1{TH0=Tone_Delay_Table[Tone_Index]/256;TL0=Tone_Delay_Table[Tone_Index]%256; BEEP=~BEEP;}void main(){TMOD=0x01;IP=0x01;IE=0x83;TR0=0;Song_Tone_Pointer=Song1_Tone;Song_Time_Pointer=Song1_Time;while(1){Tone_Index=Song_Tone_Pointer[i];if(Tone_Index==0xFF){i=0;DelayMS(2000);continue;}TR0=1;DelayMS(Song_Time_Pointer[Tone_Index]*240);TR0=0;i++;}}第 4 章系统调试4-1 在PROTEUS7.5仿真步骤1、将程序在KEIL C中编译,直到达到要求;2、在PROTEUS中绘制硬件图;3、将KEIL C 中编译好的HEX文件加载到PROTEUS中;4、按下K1观察扬声器发出的音乐间隔一会儿再按下K1 看扬声器里的音乐是否切换再按下K1看是否播放第三首音乐;仿真效果:按下K1键发出一首音乐,间隔一会儿再按下K1键切换到第二首音乐,间隔一会儿再次按下K1键发出第三首音乐。

用单片机演奏电子乐曲课程设计报告

用单片机演奏电子乐曲课程设计报告

用单片机演奏电子乐曲课程设计报告1、课程设计目的:我们学习了一个学期的单片机,这次课程设计就是以现有的基础和能力,利用本次设计加以运用,从而达到对所学知识的巩固,更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,在对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。

在根据该电路设计出软件的功能模块、从而完成程序流程图,在跟据程序流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件,硬件结合进行调试、运行,对其功能进行最终测试,并反复思考其测试中遇到相应问题的原因,并将其一一处理,从而完成本次设计的实验要求,以及本次课程设计的最终目的。

本课程设计教学根据课程的教学大纲的要求和单片机原理与接口实验室建设所提供的条件,安排了单片机控制系统的设计课题,从而使我们更好地掌握课堂学习的理论知识,掌握基本实践技能,并能进行一定的综合应用和探索。

通过课程设计的教学,使我们巩固和深化已学的理论知识,加强综合应用能力,训练学生掌握分析问题、解决问题的方法,培养较强的动手能力和一定的单片机应用系统的设计和调试能力。

2、课程设计要求:本次课程设计要求在一周的时间内利用实验室的现有条件或者自己的设备完成程序的编写和调试,具体要求如下:1、设计题目都需要进行硬件设计和软件设计,并调试成功;2、设计的硬件电路要包含I/O设备,并使用I/O功能;3、尽可能使用单片机的定时计数器和中断资源4、硬件可使用THDPJ-1/2型单片机开发综合实验箱,也可使用自己的硬件电路5、可用C51或汇编语言编程3、设计题目分析3.1 题目简介用单片机演奏电子乐曲,相当于制作一个带有录音播放功能的电子琴。

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。

音乐提示定时器单片机课程设计

音乐提示定时器单片机课程设计

目录第1章概述 (1)1.1设计内容 (1)1.2设计要求 (1)1.3 设计目的 (1)第2章总体方案设计及系统框图 (2)2.1 总体方案的设计思路 (2)2.2 系统的设计框图 (3)2.3 工作原理 (3)第3章各模块硬件设计及说明 (5)3.1 单片机的选择及说明 (5)3.2复位电路的设计 (6)3.3 晶振电路的设计 (7)3.4 LED动态显示电路 (8)3.5 音乐播放电路 (9)第4章软件设计及说明 (10)4.1 程序流程图 (10)4.2 音乐定时常数设置 (11)4.3 音乐延时常数设置 (12)第5章调试步骤、结果及使用说明 (15)第6章心得与体会 (16)参考文献 (17)附录1:音乐提示定时器原理图 (18)附录2 程序清单 (19)第1章概述1.1设计内容本课题要求以单片机为核心设计一个音乐提示定时器,具备倒数计时、时间修改、音乐演奏等功能。

可作为微电脑倒数计数器,做一小段时间计时,放在家中使用,例如煮泡面、煮开水或小睡片刻等;用于全自动洗衣机洗涤完毕音乐提示定时器。

设计任务包括控制系统硬件设计和应用程序设计。

1.2设计要求1)确定系统设计方案。

2)进行系统的硬件设计。

3)完成必要元器件选择。

4)开发板焊接及测试。

5)系统软件设计及调试。

6)系统联调及操作说明。

7)写说明书。

1.3设计目的音乐提示定时器设计4个按键设置现在想要倒数的时间:K1--可调整倒数时间为1-60分钟;K2—设置倒数计时时间为5分钟,显笺为“0500”;K3—设置倒数计时时间为20分钟,显示为“2000”;K4—设置倒数计时时间为60分钟,显示为“6000”;一旦按键后则开始倒计时,当计时为0则演奏一曲音乐;内定倒数计时时间为5分钟,显示为0500。

第2章总体方案设计及系统框图2.1 总体方案的设计思路本课题要求以单片机为核心设计一个音乐提示定时器,具备倒数计时、时间设置、音乐演奏等功能。

基于51单片机音乐播放器课程设计报告

基于51单片机音乐播放器课程设计报告

基于51单片机音乐播放器课程设计报告课程设计课程设计名称:单片机课程设计专业班级电科0901 学生姓名:学号:200948360118 指导教师:课程设计时间: 2012-9-20~2012-9-28电子信息科学与技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页一设计任务及要求利用单片机定时器完成控制音乐的频率,每个音调响的时长,来达到播放出音乐。

并且实时监测红外接收管是否触发中断,来判断是否遥控器按下了播放/暂停键、上一首、下一首,进而实时处理。

并把信息显示在1602液晶上。

音高与频率的对应关系下表:二设计原理图单片机与1602液晶、红外接收管SM0038接线图单片机驱动蜂鸣器电路及红外遥控器键码本次实验所用按键及对应编码:(1)上一首 07 (2) 下一首 15 (3)播放/暂停 09三程序设计框图Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;装入的初值 (10ms的初装值)Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;装入的初值TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TMOD |= 0x11;ET0 = 1;ET1 = 0;PT0 = 0;TR0 = 0;TR1 = 0;EA = 1;void write_cmd(uchar cmd)//1602写命令lcd_rs=0;lcd_w=0;P0=cmd;delay(7);lcd_en=1;delay(6);lcd_en=0;void write_date(uchar date)//1602写数据lcd_rs=1;lcd_w=0;P0=date;delay(7);lcd_en=1;delay(6);lcd_en=0;void init_1602()//初始化1602lcd_en=0;write_cmd(1);write_cmd(0x84);write_cmd(0x38);write_cmd(0x0f);write_cmd(0x06);void inte1_init()//红外中断 // 计算TL1应// 计算TH1应IT1 = 1;//外部中断,下降沿中断EX1 = 1;//开外部中断PX1 = 1;//EA = 1;//开总中断IRIN=1; //读引脚前,先置高void jiema() //红外解码uchar i,j;for(j=0;j<4;j++)irma[j]=0;//清除上次的码for(i=0;i<8;i++)irma[j]=irma[j]>>1;//右移1位while(!IRIN);//等待0.56ms低电平结束time2_init();//启动定时,0.8mswhile(!TF2);//等到0.8ms时间到TR2=0;//关定时器TF2=0;//清标志位if(IRIN)//发送是1,其高电平时间长,大于0.565msirma[j]|=0x80;//把最高位置1while(IRIN);//等待高电平结束,以便于进入下一位的解码 } void Lcd_displays(uchar add,char *s)//1602显示字符串uchar i;write_cmd(add);for(i=0;i<strlen(s);i++)write_date(s[i]);void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)//播放歌曲函数unsigned int NewFreTab[12]; //新的频率表unsigned char i,j;unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength; unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;for(i=0;i<12;i++) // 根据调号及升降八度来生成新的频率表j = i + Signature;if(j > 11)j = j-12;NewFreTab[i] = FreTab[j]*2;NewFreTab[i] = FreTab[j];if(Octachord == 1)NewFreTab[i]>>=2;else if(Octachord == 3)NewFreTab[i]<<=2;SoundLength = 0;while(Sound[SoundLength] != 0x00) //计算歌曲长度SoundLength+=2;Point = 0;Tone = Sound[Point];Length = Sound[Point+1]; // 读出第一个音符和它时时值LDiv0 = 12000/Speed; // 算出1分音符的长度(几个10ms)LDiv4 = LDiv0/4; // 算出4分音符的长度LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最长间隔标准 TR0 = 0;TR1 = 1;while(Point < SoundLength)SL=Tone%10; //计算出音符SM=Tone/10%10; //计算出高低音 SH=Tone/100; //计算出是否升半CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出对应音符的频率if(SL!=0)if (SM==1) CurrentFre >>= 2; //低音if (SM==3) CurrentFre <<= 2; //高音Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值Sound_Temp_TH0 = Temp_T/256;Sound_Temp_TL0 = Temp_T%256;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0 + 12; //加12是对中断延时的补偿 }SLen=LengthTab[Length%10]; //算出是几分音符XG=Length/10%10; //算出音符类型(0普通1连音2顿音) FD=Length/100;LDiv=LDiv0/SLen; //算出连音音符演奏的长度(多少个10ms) if (FD==1)LDiv=LDiv+LDiv/2;if(XG!=1)if(XG==0) //算出普通音符的演奏长度if (SLen<=4)LDiv1=LDiv-LDiv4;LDiv1=LDiv*SOUND_SPACE;LDiv1=LDiv/2; //算出顿音的演奏长度LDiv1=LDiv;if(SL==0) LDiv1=0;LDiv2=LDiv-LDiv1; //算出不发音的长度if (SL!=0)TR0=1;for(i=LDiv1;i>0;i--) //发规定长度的音while(TF1==0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0;if(LDiv2!=0)void BeepTimer0(void) interrupt 1 //音符发生中断BeepIO = !BeepIO;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0;void inte1inte() interrupt 2 //红外中断,外部中断1 uchar k=10;EX1 = 0;//关外部中断while(k--)//循环十次,一次0.8ms,十次8ms,time2_init();while(!TF2);TF2 = 0;TR2 = 0;if(IRIN)//中间如果出现高电平,就说明不是9MS的引导电平 {EX1 = 1;//则开外部中断,退出中断return;while(!IRIN);//运行到此,说明是引导电平,等待9MS引导结束 k=3;//循环3次,每次0.8ms,总共2.4ms,while(k--)time2_init();while(!TF2);TF2 = 0;TR2 = 0;if(!IRIN)//2.4ms结束如果变低电平,说明是重码,EX1 = 1;return;//开中断,退出中断while(IRIN);//等待4.5ms高电平结束,到此说明是正常红外信号 jiema();//解码程序,包括用户码,和按键码// irfenli();if(irma[2]==0x09||irma[2]==0x15||irma[2]==0x07){//判断按下是哪一个键if(irma[2]==0x09)if(com==0)com=1;com=0;if(com)Lcd_displays(0x80,"START");Lcd_displays(0x80,"PAUSE");else if(irma[2]==0x15)newmusic++;if(newmusic==4)newmusic=1;Lcd_displays(0x80,"NEST ");newmusic--;if(newmusic==0)newmusic=3;Lcd_displays(0x80,"LAST ");switch(newmusic){//更新1602显示case 1:Lcd_displays(0x88,"MUSIC1");break; case 2:Lcd_displays(0x88,"MUSIC2");break; case 3:Lcd_displays(0x88,"MUSIC3");break; }// Lcd_display();EX1 = 1;return;三首歌曲的代码:位于music.h文件内//挥着翅膀的女孩unsigned char code Music_Girl[]={0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03, 0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03, 0x1B,0x03, 0x1F,0x03,0x1F,0x03, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66,0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03,0x1B,0x03, 0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B,0x03, 0x1B,0x03,0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03, 0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x04,0x1B,0x0E, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03,0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03,0x1A,0x66, 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00,0x18,0x02, 0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02, 0x18,0x66,0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00}; //同一首歌unsigned char code Music_Same[]={0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02, 0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66, 0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00, 0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03, 0x1A,0x01,0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02, 0x1A,0x0D, 0x19,0x03, 0x17,0x00,0x18,0x66, 0x18,0x03, 0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03,0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C,0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03, 0x1B,0x0C, 0x1A,0x0D,0x19,0x03, 0x17,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01,0x10,0x02, 0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03, 0x16,0x00,0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70, 0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66, 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02, 0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C, 0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66, 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00, 0x00,0x00 };//两只蝴蝶unsigned char code Music_Two[] ={0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04,0x0F,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01, 0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03,0x10,0x03, 0x10,0x0D, 0x15,0x00, 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03,0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x0D,0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x1A,0x02, 0x10,0x03,0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03,0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x17,0x02,0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03,0x16,0x03, 0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03, 0x19,0x03,0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03,0x16,0x03, 0x16,0x03, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02,0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03,0x19,0x03, 0x17,0x03, 0x19,0x03, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E,0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,课程设计课程设计名称:单片机课程设计专业班级电科0901 学生姓名:学号:200948360118 指导教师:课程设计时间: 2012-9-20~2012-9-28电子信息科学与技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页一设计任务及要求利用单片机定时器完成控制音乐的频率,每个音调响的时长,来达到播放出音乐。

单片机课程设计报告[5篇]

单片机课程设计报告[5篇]

单片机课程设计报告[5篇]第一篇:单片机课程设计报告《单片机课程设计报告》学校:专业:班级:姓名:学号:指导教师:摘要由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现场数据的采集和控制。

通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用。

关键词单片机,程序,流水灯,数码管,温度计,键盘扫描,定时器等。

实验内容一、课程设计的目的以本学期对单片机的学习和认识,并通过本次课程设计加以应用,从而达到一个对所学知识的巩固、更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,再对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。

在根据该电路设计出软件的功能模块、从而完成程序流程图,在根据流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件、硬件结合进行调试、运行,对其功能进行最终测试,并反复思考其测试中遇到相应问题的原因,并将其一一处理,从而完成本次设计的实验要求,以及本次课程设计的最终目的。

实验一:键盘操作实验实验要求:通过本次实验实现对键盘的控制,操作数码管的显示数字。

实验程序:#include #include #include #include #define WR273 XBYTE[0XC000] #define RD244 XBYTE[0XC000] #define uchar unsigned char #define uint unsigned int sbit DQ =P1^0;uint count=0,x,buf[20],tim,flag;uchar fen,shi;uchar codetable_16_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80 ,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar codetable_16_2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x0 0,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};voidled_clc(void){ XBYTE[0X8000]=0XFF;XBYTE[0X9000]=0XFF;XBYTE [0XA000]=0XFF;XBYTE[0XB000]=0XFF;}void delay(unsigned int i){ while(i--);} void delay_1ms(uint z){ uint i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);} uchar key_test(){ WR273=0XF0;if((RD244&0X0F)!=0X0F)return 1;else return 0;}void time_init(){ TMOD=0X01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;TR0=1;ET0=1;EA=1;} void time_display(){if(count==10000)count=0;XBYTE[0X8000]=table_16_1[coun t%10];XBYTE[0X9000]=table_16_1[count%100/10];XBYTE[0XA00 0]=table_16_1[count%1000/100];XBYTE[0XB000]=table_16_1[co unt/1000];} void TIME_SET(){ uchar a,b,c,d,key;while(flag==1){ led_clc();while(!key_test());a=keyscan();XBYTE[0XB000]=table_16_1[a];while(!key_test());b=keyscan();XBYTE[0XA000]=table_16_2[b];while(!key_test());c=keyscan();XBYTE[0X9000]=table_16_1[c];while(!key_test());d=keyscan();XBYTE[0X8000]=table_16_1[d] ;while(!key_test());key=keyscan();if(key==11){shi = a*10+b;fen = c*10+d;flag=0;} } } void TIME_DIS(){if(tim==60){ fen++;tim=0;if(fen==60){ shi++;fen=0;if(shi==24)shi=0;} } XBYTE[0X8000]=table_16_1[fen%10];XBYTE[0X9000]=table_16_1 [fen/10];XBYTE[0XA000]=table_16_2[shi%10];XBYTE[0XB000]=ta ble_16_1[shi/10];} void main(){ uint temp;led_clc();// serial_init();time_init();while(1){ temp=keyscan();if(temp==10)fla g=1;TIME_SET();//XBYTE[0X8000]=table_16_1[temp];//time_display();TIME_DIS();} } void time()interrupt 2 { uchar m;TH0=(65536-46080)/256;TL0=(65536-46080)%256;m++;if(m==20){ m=0;count++;tim++;} } void serial()interrupt 4 { if(RI==1){ x=SBUF;RI=0;} put_char(x);delay_1ms(5);}实验心得体会:通过本次实验,让我对单片机实验有了更深的了解,认为这个实验还是比较容易的,没有花太多的时间。

定时闹钟_C51单片机课程设计报告

定时闹钟_C51单片机课程设计报告

题目:定时闹钟目录一、概述11.1设计目的及意义11.2设计任务11.3设计系统的主要功能1二、系统总体方案及硬件设计12.1系统总体方案12.2系统设计总框图错误!未定义书签。

2.3硬件设计22.3.1单片机最小系统设计22.3.2报警模块设计62.3.3显示模块设计72.3.4调时模块设计9三、软件设计103.1主程序流程图103.2定时中断子程序流程图113.3程序设计11四、系统的仿真与调试114.1 proteus软件仿真124.2系统的调试10五、设计总结与体会12参考文献12附录1:源程序代码14附录2:系统原理图24一、概述1.1设计目的及意义学习和稳固单片机技术、电子技术、传感器技术及智能仪器等知识,使对已学过的根底知识能有更深入的理解,并融会贯穿。

学会独立思考、独立工作,培养一定的自学能力和独立分析问题能力,以及增强系统地运用已学理论知识去解决实际问题的能力,同时培养成良好的科学态度和严谨的设计习惯。

1.2设计任务完成所选题目的分析与设计,到达技术性能要求。

提交正式课程设计总结报告一份。

本文设计的定时闹钟的核心模块采用AT89C51芯片,时、分、秒用6位LED数码管显示。

在电路中通过四个按键S1、S2、S3和S4来进展定时、调时和复位,定时时间到通过蜂鸣器发出报警声。

1.3设计系统的主要功能(1) 能显示时时-分分-秒秒。

(2) 能够设置定时时间、修改定时时间。

(3) 定时时间到能发出报警声。

二、系统总体方案及硬件设计2.1系统总体方案(1) 由于LED显示器相对于其它显示器〔如LCD显示器〕来说其价格要廉价许多,而且亮度更高,耐温范围较广,所以采用6位数码管来显示"时时-分分-秒秒〞。

(2) 时间的定时用单片机内部时钟电路,在一定的时间内能使其误差较小,如经过一年其误差才仅有数秒。

修改时间和定时用手动按键控制,报警声通过蜂鸣器发出。

这样可以使得硬件电路设计较为简单,且软件设计也易于实现,并能够降低本钱。

经典单片机多功能音乐闹钟课程设计报告

经典单片机多功能音乐闹钟课程设计报告

单片机课程设计报告设计课题: 单片机电子钟课程设计姓名:学院: 湖南工业大学电气与信息工程学院专业: 机电一体化班级:学号:日期 2010年11月数字钟的简介单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面,其调试过程一般分为软件调试、硬件测试、系统调试3个过程。

如果采用单片机系统的虚拟仿真软件——Proteus,则不用制作具体的电路板也能够完成以上工作。

数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。

数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便[4]。

不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

而且是控制的核心部分。

因此,研究数字钟及扩大其应用,有着非常现实的意义。

电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此电子钟的应用会越来越广泛。

而且向着精确、低功耗、多功能发展。

基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。

从而,使数字钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。

另外,程序较为简洁,具有可靠性和较好的可读性。

如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。

单片机控制定时器播放设计

单片机控制定时器播放设计

单片机控制定时器播放设计简介本文档介绍了使用单片机控制定时器实现音乐播放的设计方法。

通过定时器的计时功能,可以精确控制音乐的播放时长和节奏,实现各种音乐效果。

设计步骤步骤一:选择合适的单片机及开发环境在开始设计之前,需要确定使用的单片机型号和相应的开发环境。

常见的单片机型号包括STC89C52、AT89C52等,开发环境常用的有Keil、IAR等。

根据自己的需求和熟悉程度选择合适的单片机和开发环境。

步骤二:连接音乐模块将音乐模块与单片机连接,通常使用串口通信进行控制。

连接时需要将音乐模块的TX引脚连接到单片机的RX引脚,同时接地,以实现数据的传输。

步骤三:编写音乐播放代码使用开发环境编写音乐播放的代码。

代码中需要使用定时器的计时功能来控制音乐的播放时长和节奏。

首先需要初始化定时器,设置合适的计时周期和中断触发方式。

在定时器中断函数中实现音乐播放的控制逻辑,根据需要发送相应的控制命令给音乐模块。

以下是一个简单的示例代码:#include <reg52.h>// 定时器中断函数void Timer0_ISR() interrupt 1{// 控制音乐播放// ...}// 主函数void main(){// 初始化定时器// ...// 设置定时器中断使能// ...// 主循环while (1){// ...}}步骤四:编译、烧录和调试将编写好的代码进行编译,生成可执行文件。

然后使用相应的烧录工具,将可执行文件烧录到单片机中。

完成烧录后,连接相应的硬件,通过调试工具进行调试。

通过调试可以验证代码的正确性和音乐播放效果。

优化设计在实际设计中,还可以对音乐播放模块进行优化设计,以提升音乐播放的效果和性能。

使用中断优化音乐播放可以使用外部中断来检测按键事件,当按下某个按键时,触发相应的中断处理函数。

通过中断函数来控制音乐的播放,实现更加灵活的交互方式。

使用编码器实现音乐控制可以使用旋转编码器来实现音乐的控制,例如调整音量、切换曲目等。

单片机课程设计报告按键控制定时器选播多段音乐精编版

单片机课程设计报告按键控制定时器选播多段音乐精编版

单片机课程设计报告按键控制定时器选播多段音乐精编版MQS system office room 【MQS16H-TTMS2A-MQSS8Q8-MQSH16898】Proteus仿真大作业课题:按键控制定时器选播多段音乐系部:电子工程系班级:计算机控制技术1201班姓名:张坤指导老师:马磊娟前言Proteus技术是计算机控制技术的核心课程,经过一年的学习本人对于其也有了一定的理解此次大型作业的布置正好可以验证自己所学如何能否实际应用本次设计中的硬件设计涉及8051输入/输出(I/O)端口独立式键盘、TFT彩屏显示等应用,而软件设计采用C51语言编写。

因此我的课程设计基本涵盖了课程的重要内容,较好的检测我的学习效果。

Proteus课程设计是一个工程项目,在这一工程中包括选题、绘制电路图+编制程序、Proteus仿真、系统仿真与调试、系统正常运行等流程。

在老师的安排下,我严格按照这一流程开展项目,并最终完成本项目—基于单片机的推箱子游戏设计。

接下来我将具体介绍我们在开展项目中遇到的问题和解决方案的设计。

摘要本课程设计是按键控制定时器选择多段音乐,以AT89S52为系统的操作核心,以一个数码管显示播放音乐的序号,通过按键来选择音乐(本课程设计中含3首音乐)。

硬件设计方案1.单片机及晶振模块该设计选用的是Atmel公司生产的AT89S52型单片机,由石英晶体振荡器产生单片机工作时所需的时钟信号,振荡器采用的是12M的晶振,使其机器周期为1us,方便发音程序的计算和编译。

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

单片机按键控制定时器选播多段音乐

单片机按键控制定时器选播多段音乐

郑州科技学院单片机课程设计题目按键控制定时器选播多段音乐学生姓名张三专业班级 15级物联网一班学号 201566666 院(系)信息工程学院指导教师王完成时间 2017年6月8日一、背景介绍如今,电子技术获得了飞速的发展,现代电子产品几乎渗透了社会的各个领域。

目前,单片机正朝着高性能和多品种方向发展趋势将是进一步想着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路装化等几个方面发展。

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。

概括的讲:一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机是了解计算机原理与结构的最佳选择。

单片机内部也用和电脑功能类似的模块,比如CPU、内存、并行总线。

还有和硬件作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是很低的。

利用单片机实现音乐播放有很多要点,例如外部电路简单,控制方便等,因而备受广大单片机爱好者的喜爱。

通过音乐播放器的设计方案,掌握C语言的编写方法。

并熟练的运用80C51单片机定时器产生固定频率的方波信号,推动喇叭发出旋律,按下单键可以演奏预先设置的歌曲旋律,最重要的是自己还可以通过程序设计输入自己喜欢的歌曲来演奏,本设计采用简易音阶编码直觉式输入法方便设计音乐旋律。

本文将围绕基于单片机按键控制定时器选播多段音乐,介绍一些关于单片机的基础知识、音乐播放器的制作原理及方法(其中包括了音乐编程原理)、定时器的设定,以及仿真软件(Keil、Proteus)的使用方法。

二、设计方案1、方案设计对于C51单片机,它抗干扰性较强,且集成度高、功能强、指令丰富等,可以应用的地方较数字电路更多一些,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表及通讯设备。

按键控制蜂鸣器播放多段音乐的设计论文

按键控制蜂鸣器播放多段音乐的设计论文

《单片机原理及应用》课程设计基于按键控制蜂鸣器播放多段音乐的设计姓名: X X X任课教师: X X院系:X X X专业:电子信息工程提交日期: 2012年6月25日基于按键控制蜂鸣器播放多段音乐的设计引言这学期我们学习了单片机原理及接口技术这一门实用而又生动的课程,初次接触到它就被它丰富的内容所吸引。

单片机自20世纪70年代问世以来,已得到了十分广泛的应用。

随着单片机的集成度越来越高以及单片机系统的广泛应用,对软件编程的要求也越来越高,要求编程人员在短时间内编写出执行效率高、运行可靠的程序代码。

单片机具有一些突出的有点:体积小、重量轻、耗电少、电源单一、功能强、价格低、运行速度较快、抗干扰能力强、可行性高,所以在如今的绝大数的领域中都能够看到单片机的身影。

本次设计是基于AT89C51芯片的电路为基础,外加上三极管的放大、放音设备蜂鸣器,以此来实现音乐硬件控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其播放出优美的音乐。

此次设计共写进了三首歌曲程序,分别是《仙剑》、《月亮代表我的心》和《小星星》。

关键字:单片机蜂鸣器 AT89C51芯片音乐Based on the button control play more paragraphs music of the buzzer designInstructionThis term we have learnt the digital image processing which is a practical and vivid course, First contact to it, I was attractive by its rich content.Since the 1970 s, the single chip microcomputer appeared has been a wide range of applications. With the integration of single chip more and more high and the wide application of single—chip microcomputer system, the software programming requirement also more and more high, requesting programming staff in a short time, writing executive high efficiency and reliable operation program code。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计报告按键控制定时器选播多段
音乐精编版
MQS system office room 【MQS16H-TTMS2A-MQSS8Q8-MQSH16898】
Proteus
仿




课题:按键控制定时器选播多段音乐
系部:电子工程系
班级:计算机控制技术1201班
姓名:张坤
指导老师:马磊娟
前言
Proteus技术是计算机控制技术的核心课程,经过一年的学习本人对于其也有了一定的理解此次大型作业的布置正好可以验证自己所学如何能否实际应用
本次设计中的硬件设计涉及8051输入/输出(I/O)端口独立式键盘、TFT彩屏显示等应用,而软件设计采用C51语言编写。

因此我的课程设计基本涵盖了课程的重要内容,较好的检测我的学习效果。

Proteus课程设计是一个工程项目,在这一工程中包括选题、绘制电路图+编制程序、Proteus仿真、系统仿真与调试、系统正常运行等流程。

在老师的安排下,我严格按照这一流程开展项目,并最终完成本项目—基于单片机的推箱子游戏设计。

接下来我将具体介绍我们在开展项目中遇到的问题和解决方案的设计。

摘要
本课程设计是按键控制定时器选择多段音乐,以AT89S52为系统的操作核心,以一个数码管显示播放音乐的序号,通过按键来选择音乐(本课程设计中含3首音乐)。

硬件设计方案
1.单片机及晶振模块
该设计选用的是Atmel公司生产的AT89S52型单片机,由石英晶体振荡器产生单片机工作时所需的时钟信号,振荡器采用的是12M的晶振,使其机器周期为1us,方便发音程序的计算和编译。

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有
8K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:8k字节Flash,256字节RAM,
32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻
结,单片机一切工作停止,直到下一个中断或硬件复位为止。

AT89S52的引脚分布:
2.数码管显示模块
该部分只用了一个数码管,用来显示播放的音乐序列,数码管的7个管脚都接了1K的上拉电阻。

数码管显示的歌曲序列为0,1,2。

3.按键控制模块
此模块只用了两个按键,按键K1用来控制歌曲的开始和停止,接口,按键K2用于选择歌曲,接口。

按下K1,开始播放音乐,随着改变数码管的显示值(0、1、2),将出现对应的音乐。

4.扬声器模块
扬声器上接了一个三极管,用于放大声音。

程序:
#include<>
#include<>
#defineucharunsignedchar
#defineuintunsignedint
sbitK1=P1^0;常电路LED灯以及数码管会工作在较为稳定、准确的状态,可据此来进一步检测电路连接是否、存在问题
调试过程:接上5V电源后,按下K1键,会有音乐,随着K2的按下,音乐也随之改变。

过程较为顺利。

心得与体会:
在这次课程设计中,我们把学习的单片机理论知识运用到了实践中,加深了我们对单片机理解,同时熟悉了单片机的使用,加强了我们的动手能力。

在电路的焊接方面,也学到了一些知识,如怎样使排版好看,不要杂乱无章。

焊接时,要注意很多的细节,排线走线都要小心,很容易造成短路。

元件清单如下:
22pf的电容两个
12MHZ晶振一个
10K电阻一个
10uf电容一个
2个按键
1个共阳数码管
8个1K的电阻
1个蜂鸣器
1个89S52单片机
参考文献:
[1].谢维成、杨加国单片机原理与应用及c51程序设计.北京:清华大学出版社
[2].阎石.数字电子技术基础.北京:高等教育出版社,2006
[3].谭浩强C程序设计(第三版).北京:清华大学出版社
[4].童诗白模拟电子技术基础.北京:清华大学出版社
[5].王一群怎样用电脑设计电子线路福建科学出版社
[6].王宏研,张鑫电子综合设计实验教程山东大学出版社
[7].陈永甫.多功能集成电路555经典应用实例第一集.北京:电子工业出版社
[8].王新闲.通用集成电路速查手册.山东:山东科学出版社,2005
[9].崔瑞雪、张增良.电子技术动手实践.北京:北京航空航天出版社,2007。

相关文档
最新文档