《单片机原理及应用》课程设计
—八音盒设计
班级:机101-1 学号: 姓名:
完成日期:2013年06月11日
目录
一、单片机设计课程的目的和基本要求........................................ 3 二、八音盒的设计要求 .................................................................... 3 三、关于AT89C51 ........................................................................... 3 3.1、对于AT89C51的性能介绍 .................................................. 3 3.2、AT89C51的管脚介绍 ............................................................ 4 四、总体设计 .................................................................................... 6 五、硬件原理及设计说明 ................................................................ 7 六、软件设计流程图 ........................................................................ 7 七、程序输入窗口、编码及音乐程序 ............................................ 8 7.1程序输入窗口 ........................................................................... 8 7.2编码 ........................................................................................... 9 7.3音乐程序 ................................................................................. 10 八、仿真和调试 .............................................................................. 10 九、元器件清单 .............................................................................. 26 十、电路总图 .................................................................................. 27 十一、实验总结 .............................................................................. 27 参考文献: ...................................................................................... 28
一、 单片机设计课程的目的和基本要求
大学本科生动手能力的培养和提高时大学本科的一个重要内容。本次课程的设计目的,是让我们通过课程设计建立起单片机应用系统的概念,根据系统设计要求,掌握初步的单片机系统设计方法,让学生的动手能力和对单片机系统从硬件系统和软件系统设计两个方面都得到实际的提高。为今后的毕业设计打下良好的基础。
课程设计的基本要求有:
(1)在课程设计过程中,学会使用89S51单片机及相应绘图软件,根据设计要求设计,编程,运行,调试最后提供课程设计报告; (2)课程设计应由学生本人独立完成,严禁抄袭; (3)认真编写课程设计报告。
二、八音盒的设计要求
8051八音盒
本设计利用8051单片机结合内部定时器LCD设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。本设计可以学习8051定时器程序设计,按键扫描及歌曲旋律简单直觉式输入法的设计方法。 其基本功能为:1使用LCD显示器来显示目前演奏的歌曲编号;2具有16个按键操作来选择演奏哪一首歌曲;3内建10首歌曲旋律,按下单键可以演奏歌曲;4演奏时可以按键中断。程序执行后工作指示LED闪动,表示程序开始执行,按下单键0~9便可以演奏歌曲,歌曲演奏中,可以按键中断。
三、关于AT89C51
3.1、对于AT89C51的性能介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
它可以提供以下的功能标准: (1)4K的字节闪烁存储器;
(2)128字节随机存取数据存储器; (3)32个I/O口;
(4)2个16位定时/计数器; (5)1个5向量两级中断结构; (6)1个串行通信口;
(7)片内振荡器和时钟电路。
另外AT89C51还可以警醒OHZ的惊涛逻辑操作,并支持两种软件的节点模式。
3.2、AT89C51的管脚介绍
图3.1 AT89C51的管脚图
VCC:供电电压。 GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行
存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能
P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 3.振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 4.芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持
ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
四、总体设计
(1)要产生音频脉冲,只要算出某一音频的周期(1/音频),然后将此周期除以
2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲
(2)利用8051的内部定时器使其工作在计数器模式MODE1下,改变记数值TH0及TL0以产生不同频率的方法。例如频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时956/1=956在每记数9次时将I/O口反相,就可得到中音D0(523HZ)。
记数脉冲值与频率的关系公式如下: N=Fi/2/Fr N:记数值
Fi:内部计时一次为1微秒.故其频率为1MHZ Fr;要产生的频率 (3):起记数值的求法如下: 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
表 4.1调个音符频率与计数值T的对照表
音符 低IDO #IDO# 低2RE #2RE# 低3M 低4FA #4FA# 低6SO #5SO# 低6LA 频率 262 277 294 311 330 349 370 392 415 440 简码值(T值) 63628 63731 63853 63928 64021 64103 64185 64260 64331 64400 音符 #4FA# 中5SO #5SO# 中6LA #6 中7SI 高IDO #IDO# 高2RE #2RE# 频率 740 784 831 880 932 988 1046 1109 1175 1245 简码值(T值) 64860 64898 64934 64968 64994 65030 65058 65085 65110 65134 #6 低SI 中IDO #IDO# 中2RE #2RE# 中3M 中4FA
466 494 523 554 587 622 659 698 64463 64524 64580 64633 64684 64732 64777 64820 高3M 高4FA #4FA# 高5SO #5SO# 高6LA #6 高7SI 1318 1397 1480 1568 1661 1760 1865 1967 65157 65178 65198 65217 65235 65252 65268
五、硬件原理及设计说明
当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。同时启动定时器T1,显示歌曲号。
(1) 硬件电路中用INT0、INT1分别接S1、S2作为上、下一曲的功能键 (2) 用P1.0-P1.6控制七段码a,b,c,d,e,f。 (3) 用P2.0口控制喇叭。
(4) 电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。
六、软件设计流程图
开始 初始化 设置音节起始位置 设置节拍间距 读取音阶,音符 显示当前播放歌曲序号 节拍结束 音乐结束
七、程序输入窗口、编码及音乐程序 7.1程序输入窗口
图7.1 keil5环境下的程序输入窗口
7.2编码
建立音乐的步骤
(1)先把乐谱的音符找出,然后建立T值表的顺序;
(2)把T值表建立在TABLE1,构成发音符的计数值放在\"TABLE\"。
(3)简谱码(音符)为高位,节拍为(节拍数)低四位,音符节拍码放在程序的TABLE处。
表 7.1 拍与节拍的对照
节拍码 1 2 3 4 5 6 8 A C F
节拍数 1/4节拍 2/4节拍 3/4节拍 1拍 1又1/4节拍 1又1/2节拍 2拍 2又1/2节拍 3拍 3又3/4节拍 节拍码 1 2 3 4 5 6 8 A C 节拍数 1/8拍 1/4拍 3/8拍 1/2拍 5/8拍 3/4拍 1拍 1又1/节拍 1又1/2节拍
表7.2 简谱对应的简谱码、T值、节拍数 简谱 发音 简谱码 T值 5 低音SO 1 64260 6 低音LA 2 64400 节拍码 1 2 节拍数 1/4拍 2/4拍 7 1 2 3 4 5 6 7 1 2 3 4 5 低音TI 中音DO 中音RE 中音MI 中音FA 中音SO 中音LA 中音TI 高音DO 高音RE 高音MI 高音FA 高音SO 不发音 3 4 5 6 7 8 9 A B C D E F 0 64524 64580 64684 64777 64820 64898 64968 65030 65058 65110 65157 65178 65217 3 4 5 6 8 A C F 3/4拍 1拍 1又1/4拍 1又2/1拍 2拍 2又1/2拍 3拍 3又3/4拍
7.3音乐程序
RS BIT P2.0 ;引脚定义,定义液晶显示端口标号 RW BIT P2.1 E BIT P2.2
L50MS EQU 60H ;工作内存定义 L1MS EQU 61H L250MS EQU 62H SEC EQU 65H MIN EQU 64H HOU EQU 63H ORG 0000H LJMP MAIN ORG 000BH ;定时器T0溢出中断入口地址 LJMP TT0 ORG 001BH ; 定时器T1溢出中断入口地址 LJMP T1INT
ORG 1000H
MAIN: ;液晶初始化 MOV SP,#70H MOV P0,#01H ;清屏 CALL DISPLAY
MOV P0,#38H ;8位,2行显示 LCALL DISPLAY
MOV P0,#0FH ;屏显on,光标on,闪烁on LCALL DISPLAY
MOV P0,#06H ;计数地址加1,显示幕on
LCALL DISPLAY
LCALL INITIL ;内存初始化
WAIT: LCALL KEY ;键盘扫描,是否有键按下,否则等待 LCALL MODD LJMP WAIT KEY: NOP NOP
LCALL KS
JNZ K1 ;有按键转到K1 LCALL KAIJI LCALL SOP XN: LJMP KEY K1: LCALL MODD LCALL MODD LCALL KS JNZ K2 LJMP KEY
K2: MOV R2,#0FEH ;读键盘 MOV R4,#00H K3: MOV A,R2 MOV P1,A MOV A,P1
JB ACC.4,L1 ;为1跳转,第一行无按键 MOV A,#00H LJMP LK L1: JB ACC.5,L2 MOV A,#04H LJMP LK L2: JB ACC.6,L3 MOV A,#08H LJMP LK
L3: JB ACC.7,NEXT1 MOV A,#0CH LK: ADD A,R4 PUSH ACC
K4: LCALL DELAY1 ;若同时有其他按键,则等待 LCALL KS JNZ K4
MOV R3,#07H CLR A
MOV R0,#30H MOV R1,#31H MM1: MOV A,@R1 MOV @R0,A
INC R0 INC R1
DJNZ R3,MM1 POP ACC MOV @R0,A RET NEXT1: INC R4 ;列扫描 MOV A,R2
JNB ACC.3,N2 LJMP N1 N2: LJMP KEY N1: RL A
MOV R2,A LJMP K3
KS: MOV A,#0F0H ;判断P1口 MOV P1,A NOP NOP
MOV A,P1 CPL A
ANL A,#0F0H RET
DELAY1:SETB RS0
DL: MOV R5,#0AH DL2: MOV R6,#63 DL3: NOP NOP
DJNZ R6,DL3 DJNZ R5,DL2 CLR RS0 RET
INITIL: ;30H-37H初值为零 MOV R3,#08H MOV R0,#30H M1: MOV @R0,#00H INC R0
DJNZ R3,M1 RET
MODD: ;显示 MOV P0,#8EH
CALL DISPLAY MOV A,37H
MOV DPTR,#TABLE3 MOVC A,@A+DPTR
CALL WRITE2 RET KAIJI: MOV A,37H ;开机提示字 CJNE A,#0FH,DFF
MOV P0,#80H ;设光标地址 CALL DISPLAY
MOV DPTR,#TABLE1;写数据 CALL WRITE1 DFF: RET ;按键值播放歌曲
SOP: MOV A,37H
CJNE A,#01H,A11 LCALL MODD
MOV 52H,#HIGH TABLE10 MOV 53H,#LOW TABLE10 LCALL INITILE2 LCALL MAIN0 A11: CJNE A,#02H,A22 LCALL MODD
MOV 52H,#HIGH TABLE20 MOV 53H,#LOW TABLE20 LCALL INITILE2 lcall MAIN0 A22: CJNE A,#03H,A33 LCALL MODD
MOV 52H,#HIGH TABLE30 MOV 53H,#LOW TABLE30 LCALL INITILE2 lcall MAIN0 A33: CJNE A,#04H,A44 LCALL MODD
MOV 52H,#HIGH TABLE40 MOV 53H,#LOW TABLE40 LCALL INITILE2 lcall MAIN0 A44: CJNE A,#05H,A55 LCALL MODD
MOV 52H,#HIGH TABLE50 MOV 53H,#LOW TABLE50 LCALL INITILE2 lcall MAIN0 A55: CJNE A,#06H,A66 LCALL MODD
MOV 52H,#HIGH TABLE60
MOV 53H,#LOW TABLE60 LCALL INITILE2 lcall MAIN0 A66: CJNE A,#07H,A77 LCALL MODD
MOV 52H,#HIGH TABLE70 MOV 53H,#LOW TABLE70 LCALL INITILE2 lcall MAIN0 A77: CJNE A,#08H,A88 LCALL MODD
MOV 52H,#HIGH TABLE80 MOV 53H,#LOW TABLE80 LCALL INITILE2 lcall MAIN0 A88: CJNE A,#09H,A99 LCALL MODD
MOV 52H,#HIGH TABLE90 MOV 53H,#LOW TABLE90 LCALL INITILE2 lcall MAIN0 A99: CJNE A,#0AH,AAA LCALL MODD
MOV 52H,#HIGH TABLE100 MOV 53H,#LOW TABLE100 LCALL INITILE2 lcall MAIN0 AAA: RET INITILE2:
MOV L50MS,#20 MOV L1MS,#00H MOV L250MS,#00H MOV SEC,#00H MOV MIN,#00H MOV HOU,#00H MOV A,HOU MOV B,#10 DIV AB
ADD A,#30H ;将BCD吗转化为ASIIC码 MOV P0,#0C8H ;显示小时十位 CALL DISPLAY CALL WRITE2 MOV A,B ADD A,#30H
MOV P0,#0C9H ;显示小时个位 CALL DISPLAY CALL WRITE2 MOV A,#3AH
MOV P0,#0DH ;显示冒号 CALL DISPLAY CALL WRITE2 MOV A,MIN MOV B,#10 DIV ADD MOV CALL CALL MOV ADD MOV CALL CALL MOV MOV CALL CALL MOV MOV DIV ADD MOV CALL CALL MOV ADD MOV CALL CALL MOV CALL MOV CALL RET
DISPLAY: AB A,#30H
P0,#0CBH ;显示分十位 WRITE2 A,B A,#30H
P0,#0CCH ;显示分个位 WRITE2 A,#3AH
P0,#0CDH ;显示冒号 WRITE2 A,SEC B,#10 AB
A,#30H
P0,#0CEH ;显示秒十位 WRITE2 A,B A,#30H
P0,#0CFH ;显示秒个位 WRITE2
P0,#0C0H ;设光标地址 DPTR,#TABLE2;写数据 CLR RS ;写指令 CLR RW CLR E LCALL DELAY
DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY
WRITE1 SETB E RET
WRITE1: MOV R1,#00H ;写数据 A1: MOV A,R1 MOVC A,@A+DPTR CALL WRITE2 INC R1 CJNE A,#0FEH,A1 ;未到字符串末尾继续 RET
WRITE2: MOV P0,A SETB RS CLR RW CLR E CALL DELAY SETB E RET
DELAY: MOV R4,#05 D1: MOV R5,#0FFH DJNZ R5,$ DJNZ R4,D1 RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH TAB1: DB 89H,86H,0C7H,0C7H,0C0H TAB2: DB 0C6H,88H,0C0H
TABLE1: DB 'WELCOM HERE',0FEH TABLE2: DB 'DFF WB ',0FEH TABLE4: DB 'CAU',0FEH
TABLE3: DB 30H,31H,32H,33h DB 34H,35H,36H,37H DB 38h,39H,41H,42H DB 43H,44H,45H,46H
MAIN0: MOV TMOD,#11H ;播放歌曲程序 MOV IE,#8aH MOV TH1, #3cH
MOV TL1, #0b0H LCALL KS JNZ TTM12 MOV 40H,#00H NEXT20: MOV A,40H MOV DPH,52H MOV DPL,53H MOVC A,@A+DPTR MOV R2,A
JZ STOP ANL A,#0FH MOV R1,A MOV A,R2 SWAP A ANL A,#0FH JNZ SING CLR TR0 JMP W1 SING: DEC A MOV 22H,A RL A MOV DPTR,#TABLE00 MOVC A,@A+DPTR MOV TH0,A MOV 21H,A MOV A,22H RL A INC A MOVC A,@A+DPTR MOV TL0,A MOV 20H,A SETB TR0 SETB TR1 W1: LCALL DELAY30 INC 40H LCALL KS ;有键跳出 JNZ STOP LJMP NEXT20 STOP: CLR TR0 CLR TR1
LJMP MAIN0 TTM12: LCALL K2 MOV A,37H CJNE A,#0EH,TTM13 CLR TR1
LCALL DELAY1 TTM120: LCALL KS LCALL DELAY1 JZ TTM120 LCALL K2 MOV A,37H CJNE A,#0EH,TTM120 SETB TR1
LJMP NEXT20
TTM13: CJNE A,#0CH,TTM14 MOV A,52H INC A MOV 52H,A MOV A,53H INC A MOV 53H,A MOV A,36H INC A MOV 37H,A LJMP TTM2
TTM14: CJNE A,#0DH,TTM2 MOV A,52H DEC A MOV 52H,A MOV A,53H DEC A MOV 53H,A MOV A,36H DEC A MOV 37H,A TTM2: RET
TT0: PUSH ACC ;定时器中断子程序0 PUSH PSW MOV TL0,20H MOV TH0,21H CPL P3.7 POP PSW POP ACC RETI
;定时器中断子程序1
T1INT: MOV TH1, #3CH ;定时器中断子程序1 MOV TL1, #0B0H DJNZ L50MS,X4
MOV L50MS,#20
SECSET: ;每秒种时钟刷新秒显示一次 MOV A,SEC
MOV B,#10 DIV AB
ADD A,#30H
MOV P0,#0CEH ;显示秒十位 CALL DISPLAY CALL WRITE2
MOV A,B
ADD A,#30H
MOV P0,#0CFH ;显示秒个位 CALL DISPLAY CALL WRITE2 MOV A,SEC INC A MOV SEC,A XRL A,#60 X4: JNZ OUT
MINSET: MOV SEC,#00H ; *每分钟刷新分显示一次 MOV A,MIN INC A
MOV MIN,A MOV B,#10 DIV AB ADD A,#30H
MOV P0,#0CBH ;显示分十位 CALL DISPLAY CALL WRITE2 MOV A,B
ADD A,#30H
MOV P0,#0CCH ;显示分个位 CALL DISPLAY CALL WRITE2 MOV A,MIN MOV B,#3 MUL AB MOV B,#100 DIV AB MOV R2,A MOV A,#10 XCH A,B DIV AB MOV A,MIN XRL A,#60 JNZ OUT HOUSET:
MOV MIN,#00H ;每小时刷新小时显示一次 MOV A,HOU MOV B,#10 DIV AB
ADD A,#30H ;将BCD吗转化为ASIIC码 MOV P0,#0C8H ;显示小时十位
CALL DISPLAY CALL WRITE2 MOV A,B
ADD A,#30H
MOV P0,#0C9H ;显示小时个位 CALL DISPLAY CALL WRITE2 MOV A,HOU INC A MOV HOU,A XRL A,#10 JNZ OUT SJMP OVERFLOW OUT: RETI;溢出处理 OVERFLOW:
MOV L50MS,#20 MOV L1MS,#00H MOV L250MS,#00H MOV SEC,#00H MOV MIN,#00H MOV HOU,#00H RETI DELAY30: MOV R7,#2
W2: MOV R4,#125 W3: MOV R3,#248 DJNZ R3,$ DJNZ R4,W3 DJNZ R7,W2 DJNZ R1,DELAY30 RET TABLE00: DW 64580,64684,64777,64820 DW 64898,64968,65030,64260 DW 64400,64524,65058,63835,64021 TABLE10: ;第一首《精忠报国》
DB 66H,52H,36H,22H,12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H DB 32H,52H,22H,42H,38H,66H,52H,36H,22H,12H,22H,22H,32H,98H DB 24H,22H,32H,54H,52H,32H,92H,12H,92H,82H,98H,66H,52H,36H,22H DB 12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H,32H,52H,22H,42H,38H DB 66H,52H,36H,22H,12H,22H,22H,32H,98H,24H,22H,32H,54H,52H,32H DB 22H,12H,92H,82H,98H,14H,24H,34H,44H,64H,0B4H,64H,32H,52H DB 62H,0B2H,62H,52H,38H,24H,22H,32H,54H,52H,62H,52H,32H,32H,22H,38H DB 64H,0B4H,64H,32H,52H,62H,0B2H,62H,52H,38H,22H,22H,22H,32H,52H,52H
DB 52H,62H,7FH,74H,04H,58H,6FH DB 00
TABLE20: ;第二首《月亮代表我的心》 DB 02H,82H DB 16H,32H,54H,02H,52H DB 0A6H,32H,54H,02H,52H DB 64H,74H,0B6H,64H DB 52H,5CH,32H,22H DB 16H,12H,14H,32H,22H DB 16H,12H,14H,22H,32H DB 26H,12H,94H,22H,32H DB 2CH DB 32H,52H DB 36H,22H,14H,54H DB 0ACH,92H,0A2H DB 96H,0A2H,96H,82H DB 3CH,54H DB 36H,22H,14H,54H DB 0ACH,92H,0A2H DB 16H,12H,14H,22H,32H DB 2CH,02H,82H DB 16H,32H,56H,12H DB 0A6H,32H,56H,52H DB 66H,72H,0B6H,62H DB 62H,52H,58H,32H,22H DB 16H,12H,14H,32H,22H DB 16H,12H,14H,22H,32H DB 26H,92H,0A4H,12H,22H DB 1CH DB 00
TABLE30: ;第三首《看我七十二变》 DB 0d4H,84H,94H,82H,92H DB 12H,22H,82H,92H,02H,92H,82H,0d2H DB 82H,92H,14H,84H,02H,0d1H,0d1H DB 0c2H,0d2H,84H,0d2H,0d2H,82H,82H DB 84H,82H,82H,94H,82H,0d2H DB 82H,82H,82H,92H,02H,82H,82H,0d2H DB 0c4H,84H,0d4H,92H,0d2H DB 82H,0d2H,82H,92H,98H DB 04H,94H,88H DB 04H,94H,88H DB 04H,94H,88H DB 04H,94H,88H,04H DB 32H,32H,22H,12H,02H,92H,12H,92H
DB 32H,32H,22H,12H,02H,92H,12H,92H DB 32H,32H,22H,12H,02H,92H,12H,22H DB 54H,44H,34H,12H,22H DB 34H,22H,12H,02H,92H,12H,92H DB 32H,32H,22H,12H,02H,92H,12H,92H DB 32H,32H,22H,12H,02H,92H,12H,22H DB 54H,44H,32H,22H,12H,92H DB 00
TABLE40: ;第四首《同一首歌》
DB 88h,14h,24h,36H,42H,34H,14H,28H,14H,94H DB 1fH,88H,14H,24H,34H,32H,42H,54H,14H DB 46H,32H,54H,22H,32H,32H,22H,2CH,38H,54H,74H DB 76H,62H,68H,54H,52H,62H,74H,62H,52H,3fH DB 46H,42H,54H,64H,54H,42H,32H,28H,0a4H,0a2H DB 92H,84H,94H,1fH,0b8H,68H,46H,52H,68H DB 74H,72H,72H,74H,62H,52H,3fH,0b8H,68H DB 46H,52H,68H,64H,62H,62H,64H,42H,32H,2fH DB 58H,14H,24H,36H,42H,34H,12H,12H,26H,22H,24H,22H,12H DB 94H,9cH,0a8H,0a6H,92H,84H,64H,54H,22H,22H,46H,42H,44H,32H,22H,5fH DB 00
TABLE50: ;第五首《大海》
DB 82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24H DB 22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32H DB 22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,94H,1cH DB 82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24H DB 22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32H DB 22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,22H,12H,1cH,32H,52H DB 62H,64H,62H,64H,0b2H,62H,52H,54H,62H,54H,32H,22H DB
12H,14H,12H,14H,24H,3cH,32H,22H,12H,14H,12H,14H,0b2H,62H,52H,54H,62H,54H,32H,52H DB 66H,0b2H,0b4H,62H,52H,5cH,32H,52H,62H,64H,62H,64H,0b2H,62H,52H,54H DB
62H,54H,32H,22H,12H,14H,12H,14H,54H,3cH,32H,22H,12H,14H,12H,14H,22H,32H DB 52H,54H,32H,54H,32H,52H,6fH,04H,02H,92H,32H,24H,12H,1fH DB 00
TABLE60: ;第六首《两只蝴蝶》 DB
32H,22H,38H,02H,22H,32H,22H,18H,04H,92H,12H,24H,22H,32H,22H,12H,92H,92H,88H,04H,32H,22H DB
38H,02H,22H,32H,22H,18H,04H,92H,12H,24H,22H,32H,22H,21H,92H,12H,28H,04H,32H,22H
DB
38H,02H,22H,32H,22H,18H,04H,92H,12H,24H,22H,32H,22H,12H,92H,91H,11H,88H DB
04H,32H,52H,58H,02H,52H,62H,52H,38H,04H,22H,22H,24H,22H,32H,22H,12H,92H,92H DB 12H,12H,1cH,08H,02H,52H,52H,62H,0b2H,72H,72H,62H,32H,22H,22H,22H DB
38H,02H,32H,32H,52H,64H,64H,02H,92H,32H,22H,28H,04H,32H,52H,52H,32H,54H,02H,0b4H,72H DB 62H,72H,34H,02H,62H,62H,72H,62H,52H,32H,22H,02H,32H,22H,32H DB 58H,02H,52H,52H,62H,0b2H,72H,72H,62H,32H,22H,22H,22H DB
38H,02H,32H,32H,52H,64H,64H,02H,92H,32H,22H,28H,04H,32H,52H,52H,32H,54H,02H,0B4H,72H DB 62H,72H,34H,02H,62H,62H,72H,62H,52H,32H,22H,02H,84H,92H,1cH DB 00
TABLE70: ;第七首<<世上只有妈妈好>> DB
66H,52H,34H,54H,0B4H,62H,52H,68H,34H,52H,62H,54H,34H,12H,92H,52H,32H,28H DB 26H,32H,54H,52H,62H,34H,24H,18H,56H,32H,22H,12H,92H,12H,8FH DB
66H,52H,34H,54H,0B4H,62H,52H,68H,34H,52H,62H,54H,34H,12H,92H,52H,32H,28H DB 26H,32H,54H,52H,62H,34H,24H,18H,56H,32H,22H,12H,92H,12H,8FH DB
66H,52H,34H,54H,0B4H,62H,52H,68H,34H,52H,62H,54H,34H,12H,92H,52H,32H,28H DB 26H,32H,54H,52H,62H,34H,24H,18H,56H,32H,22H,12H,92H,12H,8FH DB 00
TABLE80: ;第八首歌《彩云追月》 DB
86H,92H,12H,22H,32H,52H,68H,63H,52H,34H,62H,0B2H,0B2H,62H,51H,61H,51H,31H,54H DB
62H,0B2H,0B2H,62H,52H,32H,52H,52H,51H,61H,51H,31H,34H,52H,62H,74H,32H,52H,52H,32H,21H,31H,21H,11H,24H DB
32H,52H,52H,32H,22H,12H,24H,32H,52H,52H,32H,62H,52H,61H,51H,31H,21H,21H,31H,21H,11H,1CH DB
21H,31H,22H,23H,31H,21H,18H,02H,0B2H,0BCH,0B4H,72H,61H,51H,72H,61H,71H,61H,51H,61H,71H,61H,6FH DB
86H,94H,12H,22H,32H,52H,64H,62H,51H,31H,52H,21H,31H,21H,33H,62H,0B2H,0B2H,62H,51H,61H,51H,31H,54H DB
62H,0B2H,72H,61H,51H,51H,61H,51H,31H,54H,61H,0B2H,72H,61H,51H,51H,61H,51H,31H,32H,21H,11H,32H,51H,61H,54H
DB
02H,32H,24H,32H,52H,52H,32H,22H,31H,21H,11H,24H,32H,52H,62H,0B2H,72H,61H,51H,61H,51H,31H,32H,52H,52H,32H,62H DB
51H,31H,31H,21H,11H,91H,23H,31H,21H,1CH,12H,24H,32H,62H,51H,31H,34H,0B4H,72H,61H,51H,63H,71H,64H DB
0B2H,54H,72H,62H,71H,61H,54H,61H,51H,31H,21H,34H,73H,61H,54H,22H,32H,52H,22H,36H,52H,62H,61H,31H,32H,21H,11H,21H,11H,91H,81H DB
94H,52H,62H,52H,42H,32H,22H,32H,52H,0B4H,74H,64H,52H,61H,51H,41H,5CH,02H,52H,0B4H,74H,63H,51H,61H,51H,31H,21H DB 00
TABLE90: ;第九首<<十年>> DB
02H,11H,21H,32H,32H,22H,32H,21H,11H,0A1H,91H,92H,0D1H,91H,83H,91H,0A2H,91H,81H,94H,11H,0A1H,91H,0A1H,98H,03H,81H,0A1H,0A1H,91H,0A1H DB
98H,04H,02H,11H,21H,32H,32H,22H,32H,21H,31H,51H,11H,13H,31H,22H,22H,21H,11H,0A1H,11H,13H,11H,11H,0A1H,91H,0A1H DB
11H,93H,94H,03H,81H,11H,0A1H,91H,81H,92H,0A1H,91H,94H,08H,03H,81H,32H,21H,11H,22H,31H,21H,21H,83H DB
01H,11H,91H,0A1H,11H,61H,51H,11H,34H,01H,31H,21H,31H,48H,23H,31H,32H,42H,38H,03H,11H,21H,52H,31H DB
33H,31H,31H,41H,51H,61H,23H,21H,21H,41H,31H,21H,13H,0D1H,0D1H,21H,11H,0A1H,11H,91H,92H,91H,11H,0A1H,91H DB
0A1H,31H,31H,22H,0A1H,11H,14H,01H,11H,21H,31H,63H,31H,42H,51H,31H,31H,22H,11H,21H,52H,31H,33H,31H,31H,41H DB
51H,61H,23H,21H,21H,41H,31H,21H,13H,0D1H,0D1H,21H,11H,0A1H,11H,91H,92H,91H,11H,0A1H,91H DB
0A2H,41H,31H,22H,31H,21H,12H,12H,11H,11H,21H,31H,63H,51H,32H,11H,21H,26H,11H,0A1H,18H DB 00
TABLE100: ;第十首<<你的爱给了谁>> DB
02H,91H,0A1H,16H,21H,11H,0A6H,81H,0A1H,9CH,02H,91H,0A1H,16H,21H,31H,24H,21H,0A1H,11H,0A1H
DB
9CH,02H,11H,21H,36H,32H,24H,21H,0A1H,11H,0A1H,9CH,02H,91H,0A1H,14H,11H,11H,21H,11H,0A4H,04H,04H,02H,0A1H,11H,0A1H,93H,92H DB
02H,61H,71H,0B4H,0B2H,0B1H,0B1H,76H,0B1H,71H,6CH,02H,61H,71H,0B6H,0B1H,0B1H,76H,0B1H,71H,6CH,02H,51H,61H,56H,61H,51H,54H,51H,0B1H,71H,0B1H DB 72H,62H,68H,02H,61H,51H,66H,62H,58H,0CH,02H,51H,41H,5FH DB
02H,91H,0A1H,16H,21H,11H,0A6H,81H,0A1H,9CH,02H,91H,0A1H,16H,21H,31H,24H,21H,0A1H,11H,0A1H DB
9CH,02H,11H,21H,36H,32H,24H,21H,0A1H,11H,0A1H,9CH,02H,91H,0A1H,14H,11H,11H,21H,11H,0A4H,04H,04H,02H,0A1H,11H,0A1H,93H,92H DB
02H,61H,71H,0B4H,0B2H,0B1H,0B1H,76H,0B1H,71H,6CH,02H,61H,71H,0B6H,0B1H,0B1H,76H,0B1H,71H,6CH,02H,51H,61H,56H,61H,51H,54H,51H,0B1H,71H,0B1H DB 66H,62H,54H,0B2H,71H,61H,6CH DB 00 END
八、仿真和调试
图9.1在Isis环境下进行图形编辑和元器件选择
上面设计的电路在Proteus软件内画图,打开成单片机软件开发系统keil,选择89c51单片机,在其中编写程序,运行生成一个后缀名为hex的文件,然后
将该文件下载到Proteus中的AT89C51单片机中进行仿真,观察实验现象。仿真能实现播放音乐,按键选择曲目、暂停、播放功能。 程序调试中出现的问题及解决的办法:
(1) 有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。
(2) 程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。当用JNZ指令时,跳转范围比较少,这时要用一个标号中转。
(3) 编程时要注意,在程序开始时,要写入各定时器中断的入口地址。 (4) 编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。
(5) 编程前要加流程图,这样会使思路清晰,例如数字音乐盒的设计思路完全可以按着MP3的工作方式列写流程图。
(6) LCD计时正常显示的解决办法:
a. 两个定时器同时工作,存在中断时序问题,刚开始时我们把定时器1设定在方式3,计250us,由于定时中断过于频繁,使CPU负载过大,导致音乐不能正常播放,时间不能正常显示。
解决办法:将定时器1设定在工作方式1,16位计数,计50ms,效果有很大改观。但还有问题。
b. 当音乐为全4拍起始时,此时音乐节奏与定时器T1中断频率错开,LCD显示和音乐播放都会好一些。
c. 另外,在歌曲中,当遇到一个音符发音为4拍,在编曲中为*CH,因时间较长,当定时器T1此时来中断时,就会对歌曲播放产生影响,若改为发音一拍,中断对歌曲播放影响减弱,但音乐效果变差。
九、元器件清单
名称 电阻 数码管 按钮 单片机 三极管 扬声器 电源 电容 晶振 数量(个) 型号 6 1 4 1 1 1 2 3 1 7SEG-DIGITAL AT89C51 2N2905 备注 排阻RX8(1个)1k(2个),5.5k(1个),10k(1个),15(1个) BUTTON SPEAKER 5V 30pf(2个),10uf(1个) CRYSTAL 十、电路总图
图10.1单片机八音盒的设计总电路图
十一、实验总结
信息革命的深入和计算机技术的飞速发展,单片机的应用越来越广泛,并逐渐发展成为一门关键的技术学科,单片机具有体积小、重量轻、耗电少、电源单一、功能强、价格低、运行速度快、抗干扰能力强、可用性高等优点。单片机是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
本次课程设计是为了培养我们的动手能力,同时也让我们对单片机有更为直观的了解,对其相关软件了解并熟悉使用,我了解了keil C51软件包含的窗口及其功能,且学会使用Proteus软件进行仿真。通过此次课程设计,明显的改善了,首先对于硬件电路的工作原理有了进一步的学习,同时有了一个提升;软件方面,在程序的设计,程序的调试方面都有了很大的进步。通过这次课程设计,
我体会到了成功的喜悦,听着自己设计的程序下载到单片机中播放出音乐,心理非常自豪。这次的课程设计在一定程度上改变了我学习单片机这门课程的态度,从最初的认为学它没有什么实际意义,到如今喜欢单片机学习,并希望能将理论运用到实践,设计出更好更完整的系统。我明白了一个人要想做好一件事,就必须具备自信心,耐心,还要有毅力,要胆大心细,要勇于尝试,要手脑并用,最后才能交出一份令人满意的答卷。
感谢林老师对我的指导,我学会单片机其相关绘图软件的使用,了解单片机的使用原理,增强动手能力,为今后的毕业设计打下良好的基础。
参考文献:
【1】 何立名,《单片机应用系统设计》,北京航空航天大学,1996 【2】李广第,《MCS-51单片机原理及应用》没背景机械工业出版社,2001
【3】为青,程国钢.单片机Keil Cx51应用开发技术[M]. 北京:人民邮电出版社,2007.02
【4】康化光,《电子技术基础》.北京:高等教育出版社,2001 【5】 邓元庆.数字电路与逻辑设计[M].北京:电子工业出版社,2001 【6】曹巧媛,《单片机原理及应用》,北京电子工业出版社 【7】INTEAL.MEMORY COMPONENTS HANDBOOK,1990 【8】百度中文网
因篇幅问题不能全部显示,请点此查看更多更全内容