单片机原理及系统课程设计专业:自动控制班级:1103班姓名:徐越学号:201108902指导教师:李亚宁兰州交通大学自动化与电气工程学院2013年9月1日评语:考勤(10)守纪(10)过程(40)设计报告(30)答辩(10)总成绩(100)单片机原理及课程设计报告1基于单片机的音乐播放器设计摘要随着我国现代化技术建设的发展,电子产品多种多样,但同类电子产品工作原理基本相同,只不过在硬件电路的是实现上有所不同。例如我们我们平时所用的MP3音乐播放器,就可以用单片机和一些电子元件来实现它的基本功能。我的设计是以89C51单片机作为核心工作元件的音乐播放器,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。它在实现音乐播放功能上简单易行,在制作硬件电路上也不困难。因此,此次课程设计,我除了完成了系统的软件设计和实物电路仿真外,利用空余时间制作出了实物。关键字音乐播放器,AT89C51单片机,KEIL,PROTEUS。1引言1.1设计目的此次制作的音乐播放器,只需将音乐编码导入C语言程序,经过KEIL软件运行生成HEX文件,经BDM下载器导入单片机中即可。可以同时生成多首歌曲的音乐编码,再次我选择了两首歌的音乐编码。学生自己动手就可以制作属于自己的个性化的音乐播放器,通过自己动手将所学的单片机知识应用到实践中。1.2设计要求设计一个基于AT89C51的音乐播放器,利用软件编程和相应的硬件电路实现不同歌曲的播放,先利用KEIL软件编程,再用PROTEUS仿真实现,生成可执行的HEX文件,最后焊接实物电路。1.3设计方法采用AT89C51单片机、蜂鸣器,晶体振荡器,晶体管2N2905,复位开关为主要硬件。PROTEUS仿真软件设计和C语言编程方法实现播放器的模拟,用AT89C51实现音乐编码的处理,用晶体管2N2905对电路中电流放大,进而驱动蜂鸣器播放音乐。2设计方案及原理按照系统设计要求,将系统分为主控模块,电源电路复位电路、晶振电路、功率放大电路,蜂鸣器发声电路等模块。系统框图如图1所示。单片机原理及系统课程设计报告2图1系统组成框图AT89C51简介AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机外形及引脚排列如图2所示。图2AT89C51单片机引脚图主控模块AT89C51时钟电路复位电路按键输入电路功率放大电路蜂鸣器发声电路单片机原理及系统课程设计报告33硬件设计3.1晶振电路晶振电路,对于单片机系统而言是必须的,因为单片机内部是由各种各样的数字逻辑器件构成,而这些器件又必须按时间顺序完成。所以在管脚的XTAL1和XTAL2引脚外接石英晶体和俩个谐振电容,电容采用2个30pf电容,采用12M的石英晶体。这样就可以构成单片机的基本时钟电路,时钟频率为12M。如图2所示图2晶振电路3.2复位电路复位电路是对单片机进行初始化操作,使单片机处于一个确定的初始状态。而要AT89S51复位得在RESET引脚上加5V的高电平信号就可以了。复位电路参数为30U的电解电容和1kΩ的电阻。如图3为单片机的复位电路。图3复位电路3.3功率放大电路功率放大电路对工作电流进行放大,因为单片机电路本身的电流不足以带动蜂鸣器发生,加一个三极管放大器2N2905可以带动蜂鸣器发生。图4功率放大电路3.4晶振、复位、功放之间连线电路单片机原理及系统课程设计报告4图5复位电路、晶振电路与单片机之间的连线图3.4系统连接图整体硬件连接图如图6所示。图6系统连接图4软件设计单片机原理及系统课程设计报告54.1主程序设计主程序流程图如图6所示。开始初始化T01T0定时开始定时时间到产生定时中断结束码0播放《祝你生日快乐》《路边的野花不要采》结束歌曲选择i图7主程序流程图5系统仿真及调试软件调试,先编写显示程序并进行硬件的正确性检验,然后分别进行主程序,音乐播放程序和定时程序的编译和调试;硬件调试,仔细检查电路有没有漏接或是错接的地方,再接一个电压表检查供给蜂鸣器的电压是否合适,调节电阻的阻值以调节工作电路的阻值。并且外接了一个数字滤波器检测P1.7引脚的电平高低。单片机原理及系统课程设计报告6如果不理想,继续调整程序和硬件电路,直到得到正确结果。仿真图详见第4图6。6总结通过此次基于单片机的音乐播放器的设计,使我进一步加深了对课堂上知识的理解,对单片机的寻址方式及定时中断的理解更加深刻,熟悉了单片机应用系统设计的各主要环节的设计,了解了三极管2N2905的参数,及使用方法,蜂鸣器的正常工作条件,示波器在PROTEUS中的使用方法,使用外部晶体振荡器如何选取电容,及晶体振频率。但是动手制作实物的过程的,动手焊接能力还是不行,容易把引脚焊接在一起,因此,在以后的学习要加强自己实践能力的锻炼。软件调试,先编写显示程序并进行硬件的正确性检验,然后分别进行主程序,A/D转换程序和LED显示器程序编译和调试;硬件调试,仔细检查电路有没有漏接或是错接的地方,再接一个电压表检查LED显示器显示的数值是否和电压表的示数一致,如果不理想,继续调整程序,直到得到正确结果。单片机原理及系统课程设计报告7附录1音乐播放器源程序//音乐播放器代码#includereg52.h#defineucharunsignedchar#defineuintunsignedintucharCount;sbitSpeak=P1^7;//蜂鸣器器控制脚/*以下数组是音符编码*/unsignedcharcodeSONG[]={//祝你平安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,//路边的野华不要采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,单片机原理及系统课程设计报告80x20,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,};/*********************************************************************名称:Time0_Init()*功能:定时器的初始化,定时时间可用光碟中软件计算,11.0592MZ晶振,10ms*输入:无*输出:无***********************************************************************/voidTime0_Init(){TMOD=0x01;IE=0x82;TH0=0xDC;TL0=0x00;}/*********************************************************************名称:Time0_Int()*功能:定时