第一篇:单片机课程设计
《单片机技术》课程设计说明书
音乐盒
院、部:电气与信息工程学院 学生姓名:刘亮 指导教师:凌云职称讲师 专业:电子信息工程 班级:电子1302班 学
号:1330340220 完成时间: 2016年1月11日
摘要
音乐盒起始于中世纪欧洲,当时为使教会的钟塔报时,而将大小的钟表上装置机械设备,被称为可发出声音的组钟。
本次的课题主要分为数码管显示模块、供电模块、按键模块、发声模块、复位电路和AT89S52单片机。数码管显示模块采用共阳极数码管,通过P0口控制,实现歌曲序号的显示;供电模块采用+5V供电;按键通过P3口控制,实现歌曲播放顺序的调换和暂停播放功能;扬声器由P3.1口控制,实现歌曲播放。
主要的工作过程是通过按键控制下一首和上一首播放以及暂停和播放,同时有数码管显示当前正在播放的歌曲序号,扬声器播放出音乐。
此次设计主要用到PROTEUS、KEIL编程和AD作图软件。用PROTEUS画出原理图,用KEIL编写程序,将程序导入原理图中进行仿真。最后用AD画出PCB图,打印图纸进行腐蚀焊接。将程序下载到单片机中,利用I/O口产生方波,驱动扬声器,发出音调,从而演奏乐曲。
关键词:扬声器;AT89S52单片机;I/0口
目 录
背景意义、任务要求及设计原理、框图··························1 1.1 背景意义···············································1 1.2 任务要求···············································1 1.3 设计原理···············································1 1.4 设计框图···············································1 2 硬件系统····················································3 2.1 数码管模块··············································3 2.2 键盘模块················································3 2.3 复位电路················································3 2.4 蜂鸣器模块··············································4 3 软件系统·····················································5 3.1 主程序介绍及流程图······································5 3.2 各个模块及功能介绍······································6 3.2.1 定时器模块········································6 3.2.2 延时模块··········································6 3.2.3 中断模块··········································7 3.2.4 数码管显示模块 ···································9 4 电路仿真和程序检测··········································10 5 实物制作及调试··············································11 结束语 ····························································12 参考文献 ··························································13 致 谢· ···························································14 附 录· ···························································15 背景意义、任务要求及设计原理、框图
1.1 背景意义
音乐盒的起源是中世纪欧洲的教会用来钟塔报时,后来,随着工业的发展,逐渐的体积变小,功能变多,不过多数以机械音乐盒为主,这样的音乐盒大部分体积较大音调单一,容易受到外界的影响,而且,代价昂贵。
此次设计的音乐盒,是基于单片机设计制作的电子音乐盒。与传统的相比更加小巧,音质更优美而且可以演奏和弦音乐。单片机音乐盒的动力是+5V的电源,制作简单,可以批量生产,控制功能强大,可以随时的加减歌曲,使用更加的方便而且不易受到外界的影响而音质变坏,另外,可以根据需要,添加流水彩灯等外设更改外观,使音乐盒的功能更加丰富。
1.2 任务要求
此次的设计要求为:设计一个具有特定功能的音乐盒,要求包含软件和硬件两大模块,能够通过按键来选择曲目,切换曲目,显示器来显示曲目编号,能够准确的播放曲目。
1.3 设计原理
本次的设计最主要的在于蜂鸣器的设计,想要蜂鸣器发出不同的音调,通过单片机的定时器产生一定长度的方波,方波脉冲驱动蜂鸣器发声。要产生音频脉冲,只需要算出某一音频的周期,然后取半周期的时间定时。利用定时器计时这半个周期时间,每当计时到之后,就将输出脉冲的I/O反向,然后在重复计时此周期时间再对I/O口反相,就可在I/O口得到此频率的脉冲。如中音DO,频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时1912/2=926。在每计数956次时将I/O口反相,就可以得到中音。
每当有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出曲目。数码管采用共阳极数码管,通过单片机P0口控制,实现曲目序号的显示。功能键盘采用按键开关,通过P3口控制,实现曲目播放顺序的调换和暂停播放功能,蜂鸣器由P3.1口控制,实现音乐播放。
1.4 设计框图
单片机接+5V电源供电,晶振电路负责产生单片机所需要的时钟信号,通过功能键产生外部中断,控制音乐盒的上一曲和下一曲。在由I/O口输出控制蜂鸣器发声。另外可以用复位电路对程序初始化,在程序出错时,重启单片机。具体 的设计框图如图1所示。
图1 总体设计框图
编程设置好定时时间,通过编程器写入AT89S52单片机系统中。由AT89S52单片机的定时器每秒通过P1口控制LED数码管显示,复位信号由按键输入,没按一次,系统恢复原始状态。电源,晶振电路,单片机,功能键,和扬声器部分具体介绍在后面有介绍。硬件系统
2.1 数码管模块
歌曲显示部分用数码管来显示,LED显示器件是通过发光二极管显示字段的器件,该设计采用的是7段数码管,原理是由P0口控制数码管中的7端LED发光二极管,通过单片机给予P0口不同的数值来显示不同的数字。数码管分为共阳极和共阴极两种,共阳极的数码管,当管脚是低电平有效,而阴极的数码管,是管脚高电平有效。这样,单片机给予P0口的数值将会发生差异,也就是说,不同种类的数码管,对应的ASCII码就会不同。本次选用的是共阳极数码管,其引脚如图2所示。
图2 数码管引脚
2.2 键盘模块
本次的键盘模块采用按键开关这样操作简单,辨别容易的开关。用到4个按键开关,分别是复位按键,下一首按键,上一首按键,和暂停按键。上一首按键和下一首按键接单片机的外部中断0,外部中断1。暂停按键接定时器1,复位按键在复位电路中,接单片机RES。
2.3 复位电路
复位电路主要用于初始化程序,当单片机音乐盒发生死机时,用复位电路初始化程序来重启单片机。两个电容,两个电阻和一个复位按键组成,当单片机死机时,按下按键,即可重启,其电路原理图如图3所示。
图3 复位电路原理图
2.4 扬声器模块
扬声器模块最为重要,当单片机输出脉冲经过扬声器时,会是扬声器发声,不过因为设计中用到的元件较多,不能保证通过扬声器的电流足够大,所以要用三极管放大电路来放大电流,这样才能让扬声器正常工作,具体的原理图如图4所示。
图4 扬声器原理图 软件系统
3.1 主程序介绍及流程图
一个系统的正常运行不仅需要硬件的运行,还需要软件系统的支持。同时软件要根据硬件的连接来设计,来配合硬件的工作,例如,本次的设计用到的是P 0口和P3口。所以,设计的时候就要注意,只能用到P0和P3。本次用到的软件设计选用课堂学到的汇编语言。另外用KEIL软件来编写程序,用课堂上学到的中断和循环等来编写程序。
主程序要开始定义音频输出端口,歌曲总数以及每首歌的入口地址;然后对定时器初始化,确定工作方式,赋初值,开放中断启动定时器工作;对音频输出端口初始化;设置音节起始位置和节拍间距,把音节和节拍的入口地址信息存放在固定存储单元中,查询音乐的节拍表;当6首歌曲的节拍查询结束后,音乐播放完毕,程序结束。主程序的清单在附录中,其流程图如图5所示。
图5 主程序流程图
3.2 各个模块及功能介绍 3.2.1 定时器模块
单片机中有两个16位的可编程计数器/定时器,他们具有定时和计数的功能,可用于定时控制,延时,对外部的事件检测和计数。
定时器的核心部件是加一计数器,通过TMOD寄存器可以使定时器工作在定时或者计数,还可以选择工作方式,工作方式关系到后面音调和节拍的调用,因此,要选择合适的工作方式。定时器模块的程序清单见附录。图6为定时程序流程图。
图6 定时器模块流程图
3.2.2 延时模块
此处的延时模块并不是固定的延时程序,而是将节拍表中的接拍数存放在固定的单元中,再将固定单元中的内容送给延时程序中,这样空拍就可以将节拍分开,这样,图7为延时程序流程图。
图7 延时流程图
3.2.3 中断模块
中断模块主要用来进行上一首,下一首和暂停的控制,本次的中断主要用到INT0,INT1和T1三个I/O口。不同的中断有不同的程序。因为单片机中只有两个外部中断,因此,我决定选用定时器1来改变成中断,即应定时器1的F0判断,当F0为1时,为中断。在此仅具体介绍上一曲的功能。下面为流程图介绍。
图8 中断程序流程图
3.2.4 数码管显示模块
本次设计采用的是共阳极的数码管,因此要采用相应的数值来控制数码管的亮灭。另外还要求通过按键在改变曲目顺序的时候改变数码管显示数字。下面为数码管显示模块的流程图。
图9 数码管显示模块流程图 电路仿真和程序检测
仿真图作图用到的是PROTEUS软件,对于这个软件,我们已经相当的熟悉,所以用起来比较顺利,首先将各个元件搜索出来,必须要有单片机最小系统,显示模块,按键模块,发声模块。根据要求,可以画出仿真图。如图10所示。
图10 设计仿真图
将KEIL中写好的程序导入到单片机中,开始检测,首先检测是否能够清晰的播放出音乐,其次通过控制三个按键来检测上一首,下一首和暂停的功能是否实现,观察数码管的数字是否随着按键的变化,通过以上检测,发现程序和仿真完全符合标准,表示仿真和程序检测通过,可以制作实物。
5实物调试
将程序编译好产生.hex文件,通过无需驱动程序将编译好的.hex文件导入到三合一的实验板中,在外边接入三个按键开关来控制上一首,下一首和暂停,调试过程与仿真图的调试过程相同,可以通过按键来控制歌曲的调换和暂停,而且也可以控制数码管按曲目的调换来显示序号。实验成功,实验成品如图11所示。
图11 实物图 11
结束语
首先要感谢凌老师平时的耐心教导,才能让我对单片机这门课程产生兴趣,在平时的课堂上都会跟着老师的思路走,下课后,努力的完成老师布置的作业是凌老师让我学到了很多关于单片机的知识。
其次对这次制作课程设计的感想。本次的课题是音乐盒,最主要的就是程序设计,经过比较分,决定采用51编程语言,因为平时上课接触最多的就是汇编语言,对于C语言,了解比较少,并不是非常熟练。运用课堂上学到的定时,中断,循环,以及数码管显示和按键程序,可以比较完整的制作出这次的课题。不仅可以复习近平时学到的知识,还会有新的能力学到,比如AD绘图的使用和熟悉。
最后,了解了单片机的方便性,和强大性。这是我们走向岗位的通行证,必须学会单片机,才会在大四毕业的时候找到适合自己的好工作。
参考文献
[1]李广弟.单片机基础[M].第3版.北京:北京航空航天大学出版社,2003.06.[2]李全利.单片机原理及应用(C51编程)[M].北京:高等教育出版社,2012.12.[3]楼然苗.51系列单片机设计实例[M].北京:北京航空航天大学出版社,1999.06.[4]李叶紫.单片机应用教程[M].北京:清华大学出版社,2002.01.[5]李光飞.单片机课程设计实例指导[M].北京:北京航空航天大学出版社,2004.09.致
谢
这次的设计可以说是给了我很多,不仅仅是学习上的,更多的是精神上和生活中的
首先要感谢老师的教育,让我学到了这么多的知识,在这段制作单片机课设的时候更是有感触,当听到设计的音乐盒发出声音的时候,第一感觉是好舒畅,因为第一次可以看到自己制作出这样的东西,在这些自豪中,更能感觉到老师对我们的栽培是那么的重要。
还要感谢同学们的帮助,有的时候,自己真的是不懂了,就去问同学,这不仅仅是问问而已,更能加深同学之间的友情,而且还会收获更多的知识,在这样的学习氛围中,收益的是我们大家。所以我要感谢在这次课设里帮助过我的所有同学。
这次的设计给我最大的启发就是,在学习中马虎不得。当你马虎的对待学习,学业也会马虎的对待你,这样吃亏的还是自己,学业本来就是自己的,自己不努力,难道就会白白得来吗?所以以后的学习中不能有一丝的马虎大意,就算是为了自己也要学下去。
附
录
附录A 电路原理图
附录B 电路实物图
附录C 元器件清单
名
称
型
号
个
数
芯片
AT89S52 1 数码管八段2
电容
22µF
电容
33pF
三极管1
电阻
470Ω
电阻
300Ω
电阻
200Ω
电阻
1KΩ LED灯8
下载口
晶振
12MHZ1
按键
排阻8位4
排阻
2位1
短路帽
插针
若干
附录D 程序清单
OUT BIT p3.1
N EQU 6 OUT_NUM EQU P0 ORG 0000H AJMP MAIN ORG 0003H AJMP LAST_SONG ORG 000BH LJMP F_T0 ORG 0013H AJMP NEXT_SONG ORG 001BH AJMP START_PAUSE ORG 0030H MAIN: MOV SP ,#60H MOV DPTR,#TABLE MOV R0 ,#30H MOV R5 ,#00H MOV R6 ,#1 SET_TAB: MOV A,R5 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A ,R5 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A ,R5 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A,R5 MOVC A,@A+DPTR MOV @R0 ,A INC R0 INC R5 INC R6 CJNE R6,#N+1,SET_TAB MOV TMOD ,#61H MOV TH1,#0FFH MOV TL1,#0FFH SETB ET1 SETB ET0 CLR PT0 SETB PT1 SETB IT0 SETB PX0 SETB IT1 SETB PX1 SETB EX1 SETB EX0 SETB EA SETB TR1 SETB OUT CLR F0 MOV 22H ,#01H MOV DPTR,#OUT_TAB MOV A,22H MOVC A,@A+DPTR MOV OUT_NUM,A MOV R7,#00H
START0: MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H,A NEXT:MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR JZ END0 MOV R1,A ANL A,#0FH MOV R2,A MOV A,R1 SWAP A ANL A,#0FH JNZ SING CLR TR0 SJMP SING1 SING:DEC A MOV R3,A RL A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOVC A,@A+DPTR MOV 21H,A MOV TH0,A MOV A,R3 RL A INC A MOVC A,@A+DPTR MOV 20H,A MOV TL0,A SETB TR0 SING1: LCALL DELAY JB F0,FOR AJMP NEXT FOR:CLR TR0 JB F0,$ AJMP NEXT END0: CLR TR0 MOV A,22H CJNE A,#N,WW MOV 22H,#01H MOV R7,#00H MOV OUT_NUM,#11111001B AJMP WWW WW:MOV A,R7 ADD A,#4 MOV R7,A INC 22H CLR EA PUSH DPH PUSH DPL MOV A,22H MOV DPTR,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A POP DPL POP DPH WWW:SETB EA AJMP START0 F_T0:MOV TH0,21H MOV TL0,20H CPL OUT RETI NEXT_SONG: PUSH ACC PUSH DPH PUSH DPL CLR EA MOV A,22H CJNE A,#N,Q MOV R7,#00H MOV 22H,#01H AJMP BACK Q: INC 22H MOV A,R7 ADD A,#4 MOV R7,A BACK: MOV R4,#00H MOV A,22H MOV DPTR,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A MOV B ,R0 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H,A DEC R4 MOV R0,B POP DPL POP DPH POP ACC SETB EA RETI LAST_SONG: PUSH ACC PUSH DPH PUSH DPL CLR EA MOV A,22H CJNE A,#1,QQ MOV 22H,#N MOV B,#4 MOV A,#N-1 MUL AB MOV R7,A AJMP BACK2 QQ: DEC 22H MOV A,R7 SUBB A,#4 MOV R7,A BACK2: MOV R4,#00H MOV A,22H MOV DPTR ,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A MOV B,R0 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0 ,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H ,A DEC R4 MOV R0,B POP DPL POP DPH POP ACC SETB EA
RETI START_PAUSE: CPL F0 JB F0,RETURN SETB TR0 RETURN: RETI DELAY: MOV 27H,26H D2: D3:
MOV 28H,#125 MOV 29H,#248 DJNZ 29H,$ DJNZ 28H,D3 DJNZ 27H,D2 DJNZ R2,DELAY RET OUT_TAB: DB 0CH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH TABLE: DW SONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3,SONG4,TABLE4,SONG5,TABLE5,SONG6,TABLE6 TABLE1: DW 64580,64684,64777,64820,64898,64968,65030 DW 63628,63835,64021,64103,64260,64400,64524 SONG1: DB 04H DB 32H,54H,52H,32H,54H,52H,32H,12H,12H,32H,32H,54H,52H,32H,52H,52H,32H,32H,21H,31H,4H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H DB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32 26
H,52H,54H,32H,34H,31H,21H,12H,24H,34H DB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H DB 22H,0D1H,11H,0E2H,0D2H,0C2H,0C4H,0C4H,32H,52H,52H,32H,62H,05H,61H,54H,31H,52H,31H,12H,31H,32H,54H,52H,32H,52H,52H,32H DB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52H,32H,62H,51H,61H,54H,31H,12H,32H,12H,32H,12H,32H,32H,54H,52H
DB DB DB 32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H 32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,34H,31H,21H,12H,24H,24H DB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H TABLE2: DW 63835,64021,64103,64260,64400,64524,64580,64684,64777 DW 64820,64898,64968,65030,65058,65110,65157,65178 SONG2: DB 02H DB 04H,94H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02H
02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H DB 04H,0C2H,0C2H,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H, 27
DB 0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8H DB 0C8H,0C8H,08H,08H,78H,28H,38H,34H,24H DB 24H,64H,64H,24H,64H,72H,72H,78H,58H,54H,44H,38H,34H,14H,34H,84H,74H,74H,62H,0D8H,78H,28H,38H,34H,24H
DB DB DB
58H,58H,58H,58H,0A8H,0A8H,0A4H,0B4H,0A4H,84H,0A4H, 24H,64H,64H,24H,64H,72H,72H,72H,94H,92H,94H,0A4H,58H,58H,54H,44H 94H,98H,98H,08H 84H,82H,82H,82H,82H,94H,0A2H,94H,92H,82H,74H,72H,74H,72H,72H,72H,72H,92H,91H,91H,94H,54H,74H,94H 02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H 02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H
DB 0A4H,0A2H,0B2H,0B3H,0C4H,0E8H,0D8H DB 0C8H,0C8H,0C8H,08H DB 00H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,TABLE3: DW 64898,64968,65030,65086,65135,65158,65199,64260,64400,64524,64580,64684,64777,64862 SONG3: DB 03H DB 28
04H,04H,0C2H,14H,12H,12H,12H,11H,11H,0C2H,0D1H,0E1H,14H,14H,02H,32H,12H,21H,31H,52H,51H,51H,54H DB 32H,31H,31H,12H,11H,31H,52H,51H,31H,24H,24H,24H,64H,54H,24H,34H,52H,34H,52H,32H,21H,31H,12H,11H,21H,34H,04H DB 52H,51H,0D1H,12H,12H,32H,31H,31H,52H,51H,51H,22H,22H,22H,0D2H,0D1H,0D1H,24H,22H,0C2H,14H,12H,12H,34H,32H,32H,54H,54H,54H,54H DB 12H,11H,31H,52H,51H,51H,64H,54H,32H,31H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H DB 0A2H,0A1H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H,0C4H,14H,0C4H,14H,14H,04H DB 04H,04H,04H,04H DB 00H TABLE4: DW 64260,64400,64524,64580 ,64684,64777,64280,64898,64968,65030,65058,65110,65157,65178,65217 SONG4: DB 04H
DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H 29
DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 0C4H,0B4H,04H DB 00H DB 82H,01H,81H,94H,84H TABLE5: DW 64021,64103,64260,64400 ,64524,64580,64684,64777,64820,64898,64968,65030,64934 SONG5:
DB 05H DB 42H,82H,82H,82H,84H,02H,72H DB 62H,72H,62H,52H,48H DB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2H DB 12H,0A2H,0D2H,92H,88H DB 82H,0B2H,0B2H,0A2H,84H,02H,72H DB 62H,72H,62H,52H,44H,02H,12H DB 12H,62H,62H,52H,44H,02H,82H DB 72H,62H,52H,32H,48H DB 00H TABLE6: 64021,6103,64260,64400,64524,64580,64624,64777,64820,64898,64958,65030,65058,65110,65157 SONG6: DB 06H
DB 0A2H,0B2H,0D2H,0B2H,0A4H,0B2H,0D2H DB 0B2H,0A2H,82H,72H,88H DB 72H,82H,0A2H,82H,72H,62H,42H,62H DB 0A4H,02H,0B2H,0A4H,84H DB 72H,82H,72H,62H,72H,84H,72H DB 64H,62H,12H,34H,02H,42H DB 38H,38H DW DB 38H,38H 30
DB 44H,02H,32H,44H,64H DB 72H,74H,82H,0A4H,02H,062H DB 0A8H,0A8H DB 0B2H,0B4H,0A2H,84H,82H,72H DB 62H,72H,82H,0A2H,88H DB 72H,74H,62H,42H,32H,32H,62H DB 78H,78H DB 82H,84H,72H,82H,0A2H,84H DB 72H,82H,72H,62H,48H DB 32H,0A2H,82H,0F2H,0A2H,0B2H,82H,72H DB 68H,68H DB 0B2H,0B2H,0B2H,0A2H,82H,84H,02H DB 72H,74H,62H,42H,32H,42H,62H DB 78H,78H DB 0A2H,0B2H,0A2H,72H,82H,84H,82H DB 72H,74H,62H,44H,64H DB 0A8H,0A4H,02H,0A2H DB 0A2H,0B1H,0A1H,82H,0A2H,0B4H,0B2H,0C2H DB 0A2H,0B2H,0A2H,82H,78H DB 84H,72H,62H,44H,02H,62H DB 72H,81H,71H,62H,72H,84H,02H,0A2H DB 0B4H,02H,82H,74H,82H,72H DB 68H,68H DB 00H END DB 72H,82H,72H,62H,72H,84H,0A2H 31
第二篇:单片机课程设计
设计题目: 单片机课程设计
学生姓名:
学
院: 电气与信息工程学院
班
级: 电子111班 指导教师:
日 期: 2014年9月20日
一、课程设计目的:
了解电子元器件的功能与原理,掌握单片机的结构和原理,学会使用单片机应用开发技术的相关软件如 keill、STC_ISP_V394等,能够使用c语言的语言编程简单的功能。
二、设计的思想:
利用所提供的单片机和开发板的原理图用keill软件编程程序以实现一些功能。然后用STC_ISP_V394.exe软件将编译完全正确的程序生成的hxe文件下载到开发板上,再调试编译的程序能否实现其所设计的功能。
1、对蜂鸣器的了解:
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,它由振荡器、电磁线圈、磁铁、振动膜片及外壳组成,接通电源后,振荡器产生的音频信号由电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性的振动发声。
2、设计:
我们所使用的开发板实物图如图一,单片机对右上角蜂鸣器的控制是加入三极管接入vcc,单片机的第22引脚和负极上,以此来控制蜂鸣器工作。单片机我们选择STC89C52RC+1602液晶来实现对蜂鸣器的控制及显示所需要的信息。
图一 调试说明:
首先用Keil软件创建一个工程,将程序源代码输入并编译生成单片可执行的.hex文件。其次,打开单片机实践板的电源,接好串口线,用STC-ISP烧录软件,将.hex文件烧录入单片机中。程序下载完毕后,单片机会自动执行程序功能。最后,观察程序功能的执行情况,看是否达到了设计要求。
如果单片机实践板硬件电路的执行结果与设计结果一致,则说明设计过程及流程没有问题,完全符合设计要求。否则,先检查单片机实践板的硬件电路是否完好,是否有断点、漏焊、虚焊以及元器件是否完好等情况,排除故障重新连接后重新进行调试。如果仍然无法正
常实现,则说明程序编写有误,需要认真检查程序流程,然后经过反复的修改与调试排除故障,实现设计要求的各项功能。编译和烧写该程序到单片机:
(1)用Keil编译上面的代码,并设置产生16进制代码文件*.hex.(2)用专用下载线,连接好实验板和电脑串口(DB9)(2)运行hex文件烧写软件STC_ISP_V394.exe
选单片机的型号,并打开编译产生好的hex文件
点击下载,给开发板上电。
3、实现的功能:使用单片机将歌曲《八月桂花》的调子通过蜂鸣器播放出来,用1602液晶将想要表达的信息有步骤地显示在液晶显示屏上,并且调子与显示内容可以任意通过修改的程序烧录到单片机内,实现设计产品的使用性与灵活性。
三、实验程序:
/************************************************************************
[主题] C51音乐程序《八月桂花》
[功能]
通过单片机演奏音乐,显示一些内容
/**********************************************************************/
#include
#include
//本例采用89C52, 晶振为11.0592MHZ
//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;
//所以拿出谱子, 试探编吧!
unsigned char i=0;sbit Beep = P2^7;
unsigned char p,m;
//m为频率常数变量
unsigned char n=0;//n为节拍常数变量
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
};
void int0()interrupt 1
//采用中断0 控制节拍
{ TH0=0xd8;
TL0=0xef;
n--;
}
void delay(unsigned char m)
//控制频率延时
{
unsigned i=3*m;
while(--i);
}
void delayms(unsigned char a)//豪秒延时子程序
{
while(--a);
//采用while(--a)不要采用while(a--);各位可编译一下看看汇编结果就知道了!
}
typedef unsigned char BYTE;typedef bit BOOL;
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;sbit LCD_EP = P2^2;
BYTE code dis1[] = {“
WLCOME TO
”};BYTE code dis2[] = {“
DanPianJi ”};BYTE code dis3[] = {“
111iZnaiD
”};BYTE code dis4[] = {“
eiXeiX ”};
delays(int ms){
// 延时子程序 int i;while(ms--){
for(i = 0;i< 250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
} } }
BOOL lcd_bz(){
// 测试LCD忙碌状态 BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result =(BOOL)(P0 & 0x80);LCD_EP = 0;return result;}
lcd_wcmd(BYTE cmd){
while(lcd_bz());LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;
}
lcd_pos(BYTE pos){
lcd_wcmd(pos | 0x80);
// 写入指令数据到LCD //设定显示位置
}
lcd_wdat(BYTE dat)
{
//写入字符显示数据到LCD while(lcd_bz());LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}
lcd_init(){
lcd_wcmd(0x38);
delays(1);lcd_wcmd(0x0c);
delays(1);lcd_wcmd(0x06);
delays(1);lcd_wcmd(0x01);
delays(1);}
void main()
{
BYTE j;
lcd_init();
delays(10);
//LCD初始化设定
//16*2显示,5*7点阵,8位数据//显示开,关光标 //移动光标 //清除LCD的显示内容
// 初始化LCD
lcd_wcmd(0x06);
//向右移动光标
lcd_pos(0);
//设置显示位置为第一行的第1个字符
j = 0;
while(dis1[ j ]!= ' ')
{
//显示字符“Welcome TO”
lcd_wdat(dis1[ j ]);
j++;
delays(30);
//控制两字之间显示速度
}
lcd_pos(0x40);
j = 0;
while(dis2[ j ]!= ' ')
{
lcd_wdat(dis2[ j ]);
j++;
delays(30);
}
delays(800);
lcd_wcmd(0x01);
delays(1);
lcd_wcmd(0x04);
lcd_pos(15);
j = 0;
while(dis3[ j ]!= ' ')
{
lcd_wdat(dis3[ j ]);
j++;
delays(30);
}
lcd_pos(0x4F);
j= 0;
while(dis4[ j ]!= ' ')
{
lcd_wdat(dis4[ j ]);
j++;
delays(30);
}
delays(800);
//设置显示位置为第二行第1个字符 //显示字符“ DanPianJi ”
//控制两字之间显示速度
//控制停留时间
//清除LCD的显示内容
//向左移动光标
//设置显示位置为第一行的第16个字符
//显示字符“DianZi111”
//控制两字之间显示速度
//设置显示位置为第二行的第16个字符//显示字符“ XieXie ”
//控制两字之间显示速度
//控制停留时间
TMOD&=0x0f;
TMOD|=0x01;
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(1)
{
a: p=music_tab[i];
if(p==0x00)
{ i=0, delayms(1000);goto play;}
//如果碰到结束符,延时1秒,回到开始再来一遍
else if(p==0xff){ i=i+1;delayms(100),TR0=0;goto a;} //若碰到休止符,延时100ms,继续取下一音符
else
{m=music_tab[i++], n=music_tab[i++];} //取频率常数 和 节拍常数
TR0=1;
//开定时器1
while(n!=0)Beep=~Beep,delay(m);
//等待节拍完成, 通过P1口输出音频(可多声道哦!)
TR0=0;
//关定时器1
}
}
四、电路图的protue仿真
五、单片机课程设计心得体会:
这个学期的单片机课已经早早的上完了,但是理论纯属理论,没有与实践的结合总让我们学的不踏实,感觉没有达到学以致用的效果。所庆幸的是在课程介绍考试完之后,老师给我们安排了这次单片机课程设计,给了我们学以致用的做好的实践
关于这次课程设计,我们花费了比较多的心思,既是对课程理论内容的一次复习和巩固,还让我们丰富了更多与该专业相关的其他知识,比如软件应用等,在摸索中学习,在摸索中成长,在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获,在真正设计之前我们做了相当丰富的准备,首先巩固一下课程理论,再一遍熟悉课程知识的构架,然后结合加以理论分析、总结,有了一个清晰的思路和一个完整的的软件流程图之后才着手设计。在设计程序时,我们不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;养成注释程序的好习惯是非常必要的,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也能为资料的保存和交流提供了方便;我觉得在设计课程过程中遇到问题是很正常,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计又出错了。
除了对此次设计的准备工作之外,我们还学到了很多平时难得的东西,首先是团队协作,在这次设计当中,难免和同学产生观点和意见的分歧,以及分工明细、时间安排等不合理,通过这次设计,我们体会到了团结合作的重要性及力量之强大,还有让我们处理事情更加有条理,思路更加清晰明了了,发现、提出、分析、解决问题和实践能力的提高都将受益于我在以后的学习、工作和生活中。
除了对此次设计的准备工作之外,我们还学到了很多平时难得的东西,首先是团队协作,在这次设计当中,难免和同学产生观点和意见的分歧,以及分工明细、时间安排等不合理,通过这次设计,我们体会到了团结合作的重要性及力量之强大,还有让我们处理事情更加有条理,思路更加清晰明了了,发现、提出、分析、解决问题和实践能力的提高都将受益于我在以后的学习、工作和生活中。
第三篇:单片机课程设计
基于单片机的火灾智能报警控制系统的设计
前言
在各种灾害中,火灾是最经常、最普通地威胁公众安全和社会发展的灾害之一。人类能够对火进行利用和控制,是文明进步的一个重要标志。火,给人类带文明进步、光明和温暖。但是,失去控制的火,就给人类造成灾害。据统计,我国 70 年代火灾年平均损失不到 2.5 亿元,80 年代火灾年平均损失不到
3.2 亿元。进入 90 年代,特别是 1993 年以来,火灾造成的直接财产损失上升到年均十几亿元,年均死亡 2000 多人。2010年上海静安区高层住宅着火,导致58人死亡,70余人受伤。2014年1月云南香格里拉大火,烧毁房屋100多栋,直接经济损失1亿多元人民币。火灾事件经常发生,防止火灾事故关系到人民群众的生命财产安全和社会和谐稳定。现在各种电子产品的普及,再加上人们防火意识的不强,这些都给火灾的发生带来了巨大的安全隐患。
对于火灾最关键的问题在于预防,目前防火报警系统趋于智能化、自动化,灵敏程度也越来越高。在这种背景下,基于单片机的火灾智能报警控制系统能突显出其巨大的优越性。目前,国内大多数偏重于商场、宾馆、高级写字楼、大型仓库等大型火灾报警系统的研发和设计。本系统侧重于小型火灾智能报警系统的设计,可在火灾发生初期检测到并且报警,还能够实时显示温度和烟雾浓度。
第四篇:单片机课程设计
单片机课程设计
课题: 简易电子琴设计
学
院:
电气与信息工程学院 专
业:
电子信息工程 姓
名:
李琳琳 学
号:
093411106
指导老师:
田巍
河南城建学院
2014年
01 月
01 日
第五篇:单片机课程设计
单片机课程设计
---------
机电汽车工程学院
同组成员:(机091-1)姓名(学号):