MCS51单片机课程设计报告文档格式.docx
《MCS51单片机课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《MCS51单片机课程设计报告文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
0BFH
86H
FBH
0CFH
0E6H
0EDH
0FDH
87H
0FFH
0EFH
三、软件原理及框图阐述
音乐播放原理:
单片机产生不同频率脉冲信号的原理:
要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。
(可根据下图理解)
例如,中音1频率为523Hz,其周期为1/523S=1912uS,因此只要每1912us就将I/O反接,就可到中音DO(532Hz)。
在程序中则为1912/4=478≈30H。
高音频率为中音频率的2倍则高音1为18H。
对应音符表
音符名
频率(Hz)
对应数值
低音1
261.6256
60H
低音2
293.6648
56H
低音3
329.6276
4CH
低音4
349.2282
48H
低音5
391.9954
40H
低音6
440
39H
低音7
493.8833
34H
中音1
523.2511
30H
中音2
587.3295
2BH
中音3
659.2551
26H
中音4
698.4565
24H
中音5
783.9909
20H
中音6
880
1CH
中音7
987.7666
1AH
高音1
1046.502
18H
高音2
1174.659
15H
高音3
1318.51
13H
高音4
1396.913
12H
高音5
1567.982
10H
高音6
1760
0EH
高音7
1975.533
0DH
休止符
计时器T0控制播放时长,且规定:
一拍40H半拍20H1/4拍10H。
数码管动态扫描原理:
视觉停留:
当一个画面1秒内连续闪烁24次以上则人眼认为该画面为静止。
1打开相应数码管负极引脚,
2输出信号存到A寄存器,
3A寄存器带进位右移,则最后一位存到C,
4把C中的信号传给P1.1口,
5P3.4口给74LS164一个上升沿触发信号,74LS164内数值右移,P1.1口信号存到Q0,
6循环②—⑤7次,使Q0—Q7为对应数值
7延时使每一个数字显示一段时间,并保证能使数字1秒内连续闪烁24次以上
8循环重复①—⑧
数码管动态扫描PROTEUS仿真:
程序框图:
程序:
ORG0000H
LJMPSTRAT;
主程序
ORG000BH;
音乐用中断入口
LJMPTEE0
ORG001BH;
计时用中断入口
LJMPTEE1
ORG0100H
STRAT:
MOVSP,#0DFH
;
*****************************模式选择模块*************************************
MOVDPTR,#SMG0;
数码管显示无小数点数字
MOVP1,#01011111B;
初始化P1口并打数码管2显示1
MOVA,#1
MOVCA,@A+DPTR;
LCALLPRINT
MOVP1,#11011111B;
初始化P1口并打数码管3显示0
MOVA,#0
MOVP1,#00111111B;
初始化P1口并打数码管4显示R
MOVA,#77H
MOVP1,#10111111B;
初始化P1口并打数码管5显示2
MOVA,#2
JNBP1.4,MUSIC;
按下S1进入音乐模式
JNBP1.3,CHANGE0;
按下S2进入计时模式
SJMPSTRAT;
保持显示1OR2
;
*********************************音乐模块************************************
MUSIC:
音乐播放
LCALLDELKEY;
延时避免开关多次读取
PPEQUP3.7;
定义音乐输出口
MOVP1,#0FFH;
清除读数
MOVTH0,#0D8H;
定义计时器0初值定时10ms
MOVTL0,#0EFH
MOVTMOD,#01H;
计时器0为1模式
MOVIE,#82H;
打开中断总开关与计时器1中断开关
MUSIC0:
JNBP1.4,SONG1;
第一次扫描到按下S1跳转到SONG1
JNBP1.3,SONG3;
第一次扫描到按下S2跳转到SONG3
JNBP1.2,END1;
第一次扫描到按下S3跳转到END1
LJMPMUSIC0;
未按下开关则不断循环等待
END1:
JNBP1.2,STRAT;
第二次扫描到按下S3(即长按S3)跳转到初始程序
未按下S3(即短按S3)跳转到音乐初始模式
SONG1:
JNBP1.4,SONG2;
第二次扫描到按下S1(即长按S1)跳转到SONG2
MOVDPTR,#MOUSE;
播放老鼠爱大米
初始化P1口并打数码管5显示1
MOVA,#6
LCALLPRINT;
调用输出语句
LJMPMUSIC1
SONG2:
MOVDPTR,#LIKE;
播放甩葱歌
MOVA,#5BH
SONG3:
JNBP1.3,SONG4;
第二次扫描到按下S2(即长按S2)跳转到SONG4
MOVDPTR,#SKY;
播放天空之城
初始化P1口并打数码管5显现3
MOVA,#4FH
SONG4:
MOVDPTR,#ANGEL;
播放残酷天使纲领
初始化P1口并打数码管5显示4
MOVA,#66H
CHANGE0:
LJMPJISHU;
连接计时返回跳转
CHANGE3:
LJMPSTRAT;
连接初始程序返回跳转
MUSIC1:
JNBP1.2,MUSIC;
按下S3返回音乐模式
MOV20H,#00H;
中断计数器清0
NOP
CLRA;
A清零
MOVCA,@A+DPTR;
查表取代码
JZEND0;
是00H,则结束
CJNEA,#0FFH,MUSIC4;
如果是休止符,往下执行
LJMPMUSIC3
END0:
LJMPMUSIC;
是结束符则跳转到音乐初始程序
MUSIC4:
MOVR6,A;
读取音符的频率
INCDPTR;
DPTR加一
MOVA,#0;
清除A
取节拍代码送R7
MOVR7,A;
读取音符发音的时间
SETBTR0;
启动计数
MUSIC2:
CPLPP;
音乐输出口控制
MOVA,R6
MOVR3,A;
频率转存R3
LCALLDEL;
调用音乐延时
MOVA,R7
CJNEA,20H,MUSIC2;
中断计数器(20H)=R7否?
(即控制时长)
不等,则继续循环
等于,则清零
取下一代码
MUSIC3:
MOVR2,20H
CJNER2,#10,MUSIC3
读取下一个音符
DEL:
延时2*频率(根据具体效果调整)
DEL1:
MOVR4,#0cH
DEL2:
DJNZR4,DEL2
DJNZR3,DEL1
RET
*********************************计时模块*******************************;
JISHU:
MOVTH1,#03CH;
定义计时器1初值定时50ms
MOVTL1,#0B0H
MOVTMOD,#10H;
计时器1模式1
MOVIE,#88H
MOVR0,#0;
清零计时
MOVR1,#0
MOVR2,#0
MOVR3,#0
MOVR4,#0
MOVR5,#0
MOVR6,#20;
重装中断计数器1
开关延迟
STRAT0:
LCALLSMGPRINT;
调用数码管动态显示
JNBP1.2,CHANGE3;
按下S3返回初始模式选择
JNBP1.4,STRAT1;
按下S1开始计时
SJMPSTRAT0;
未按下则循环扫描按键
STRAT1:
SETBTR1;
开始计时
STRAT2:
调用数码管动态显示
JNBP1.3,STOP;
按下S2则停止计时
SJMPSTRAT2;
未按下S2则一直计时
STOP:
CLRTR1;
停止计时
保持显示
按下S1则继续计时
JNBP1.2,JISHU;
按下S3则返回计时初始程序
SJMPSTOP;
未按下S3则循环等待
TEE1:
重装计时初值
DJNZR6,CHANGE2;
直到延迟20次(即1秒)
INCR5;
计时加1
CJNER5,#10,CHANGE2;
第6数码管满10进1
INCR4
CJNER4,#6,CHANGE2;
第5数码管满6进1
INCR3
CJNER3,#10,CHANGE2;
第4数码管满10进1
INCR2
CJNER2,#6,CHANGE2;
第3数码管满6进1
INCR1
CJNER1,#10,CHANGE2;
第2数码管满10进1
INCR0
CJNER0,#10,CHANGE2;
记满100小时清零
MOVR0,#0
CHANGE2:
RETI
TEE0:
音乐模式用中断
INC20H;
中断服务,中断计数器0加1
MOVTH0,#0D8H
MOVTL0,#0EFH;
12M晶振,形成10毫秒中断
****************************调用库*************************
SMGPRINT:
MOVDPTR,#SMG0
MOVP1,#00011111B;
初始化P1口并打数码管0
MOVA,R0
MOVCA,@A+DPTR
初始化P1口并打数码管2
MOVA,R2
初始化P1口并打数码管4
MOVA,R4
初始化P1口并打数码管5
MOVA,R5
MOVDPTR,#SMG1
MOVP1,#10011111B;
初始化P1口并打数码管1
MOVA,R1
初始化P1口并打数码管3
MOVA,R3
PRINT:
数码管显示
MOV24H,#08H
LOOP:
RRCA;
A带进位位右移
MOVP1.1,C;
将进位位输出到74LS164
CPLP3.4;
给予74LS164上升沿触发信号
CPLP3.4
DJNZ24H,LOOP;
A右移并输出7次
DELSMG:
MOV25H,02H;
延时(显示一段时间)
LOOP1:
MOV26H,80H
LOOP2:
DJNZ26H,LOOP2
DJNZ25H,LOOP1
SMG0:
不带小数点0-9代码
DB3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH;
不带小数点0-9
SMG1:
带小数点0-9代码
DB0BfH,86H,0dbH,0cfH,0e6H,0edH,0fdH,87H,0ffH,0efH;
带小数点0-9
DELKEY:
按键延迟避免多次读取
MOV21H,#10H
DEL3:
MOV22H,#00H
DEL4:
MOV23H,#00H
DEL5:
DJNZ23H,DEL5
DJNZ22H,DEL4
DJNZ21H,DEL3
**************************************音乐代码************************************************
MOUSE:
老鼠爱大米
DB30H,20H,2BH,10H,26H,10H
DB26H,20H,26H,20H,2BH,20H,30H,10H,2BH,10H,2BH,60H,30H,10H,2BH,10H
DB26H,20H,26H,20H,2BH,20H,30H,20H,30H,60H,40H,10H,39H,10H
DB40H,40H,40H,10H,40H,10H,39H,10H,30H,10H,30H,60H,30H,20H
DB30H,20H,30H,20H,30H,10H,2BH,10H,2BH,40H,30H,20H,2BH,10H,26H,10H
DB26H,20H,26H,20H,20H,20H,1CH,10H,2BH,10H,2BH,40H,26H,20H,2BH,10H,30H,10H
DB30H,20H,30H,20H,2BH,20H,26H,10H,20H,10H,20H,60H,40H,10H,40H,10H
DB39H,20H,30H,10H,30H,10H,30H,10H,26H,30H,2BH,20H,30H,20H,30H,20H,2BH,10H,30H,10H
DB30H,0C0H,26H,20H,26H,10H,20H,10H
DB20H,20H,20H,10H,20H,10H,20H,20H,20H,10H,1CH,10H,1CH,40H,26H,20H,2BH,20H
DB30H,20H,30H,20H,30H,20H,2BH,10H,26H,10H,26H,60H,26H,10H,20H,10H
DB20H,20H,20H,20H,20H,20H,1CH,10H,18H,10H,18H,20H,1CH,20H,20H,20H,26H,20H
DB2BH,20H,30H,20H,30H,20H,39H,10H,2BH,10H,2BH,60H,26H,10H,20H,10H
DB20H,20H,20H,20H,20H,10H,1CH,20H,20H,10H,1CH,40H,26H,20H,2BH,20H
DB20H,20H,20H,20H,20H,20H,1CH,10H,18H,10H,18H,20H,1CH,20H,20H,20H,26H,10H,2BH,10H
DB2BH,20H,2BH,20H,2BH,80H,30H,10H,26H,20H,24H,10H
DB26H,20H,2BH,20H,2BH,80H,26H,20H,2BH,10H,30H,10H
DB30H,40H,26H,20H,2BH,10H,30H,10H,30H,40H,26H,20H,2BH,20H
DB26H,20H,30H,20H,26H,20H,1CH,10H,20H,10H,20H,60H,26H,10H,20H,10H
DB1CH,20H,1CH,10H,20H,10H,20H,20H,1CH,10H,20H,10H,20H,40H,26H,10H,2BH,10H,30H,20H
DB2BH,20H,2BH,10H,26H,10H,2BH,20H,30H,10H,2BH,10H,2BH,40H,26H,20H,2BH,10H,30H,10H
DB26H,20H,30H,20H,26H,10H,1CH,20H,20H,10H,20H,60H,26H,10H,20H,10H
DB1CH,20H,1CH,20H,18H,20H,20H,10H,1CH,10H,20H,30H,20H,10H,26H,10H,2BH,10H,30H,20H
DB2BH,40H,2BH,10H,30H,10H,2BH,10H,26H,10H,2BH,40H,26H,20H,26H,20H,2BH,60H,30H,20H,30H,0C0H
DB00H
SKY:
天空之城
DB39H,20H,34H,20H
DB18H,60H,1AH,20H,18H,40H,13H,40H
DB1AH,0C0H,26H,10H,26H,10H
DB1CH,60H,20H,20H,1CH,40H,18H,40H
DB20H,80H,0FFH,26H,10H,26H,10H
DB24H,60H,26H,20H,26H,20H,18H,60H
DB26H,80,0FFH,18H,20H,18H,20H,18H,20H
DB1AH,60H,24H,20H,24H,40H,1AH,40H
DB1AH,80H,0FFH,1CH,20H,1AH,20H
DB18H,60H,1AH,20H,18H,40H,13H,40H,
DB1AH,80H,26H,10H,26H,10H
DB1CH,60H,20H,20H,1CH,40H,18H
DB20H,80H,20H,40H,0FFH,26H,20H,
DB24H,40H,18H,20H,1AH,20H,1AH,40H,18H,40H,
DB15H,20H,15H,20H,13H,20H,18H,40H,0FFH
DB18H,40H,1AH,20H,1CH,20H,1CH,20H,1AH,40H,20H,40H
DB1CH,80H,0FFH,18H,20H,15H,20H
DB13H,60H,15H,20H,13H,40H,10H,40H
DB15H,80H,0FFH,26H,20H,26H,20H
DB18H,20H,1AH,20H,18H,40H,13H,40H
DB13H,80H,0FFH,0FFH,0FFH,0FFH
DB1CH,20H,1AH,20H,18H,40H,1AH,40H,15H,20H,15H,20H
DB18H,60H,20H,20H,20H,40H,0FFH
DB12H,40H,13H,40H,15H,40H,18H,40H
DB13H,80H,13H,80H,
DB13H,80H,0FFH,13H,40H
DB0EH,80H,10H,40H,10H,40H,
DB13H,20H,15H,20H,18H,40H,0FFH,18H,20H,
DB15H,40H,18H,20H,15H,20H,15H,20H,10H,40H
DB0EH,80H,10H,80H
DB13H,20H,15H,20H,18H,80H,0FFH,18H,20H
DB15H,40H,18H,20H,15H,20H,15H,20H,1AH,40H
DB1CH,80H,0FFH,1CH,20H,1AH,20
DB1CH,80H,1CH,80H
ANGEL:
残酷天使纲领
DB39H,40H,30H,40H,2BH,30H,30H,10H,30H,20H,2BH,20H
DB2BH,20H,2BH,20H,20H,20H,24H,20H,26H,10H,2BH,20H,26H,10H,26H,40H
DB26H,40H,20H,40H,1CH,30H,2BH,10H,2BH,20H,30H,20H
DB