单片机课程设计docWord下载.docx
- 文档编号:14583485
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:31
- 大小:24.72KB
单片机课程设计docWord下载.docx
《单片机课程设计docWord下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计docWord下载.docx(31页珍藏版)》请在冰豆网上搜索。
PUSHACC
MOVTH0,40H①
MOVTL0,41H②
CPLP1.0
POPACC
POPPSW
由于定时器0工作在方式一时不能自动装入初值,所以每次中断发生后需要装入初值,由于方式1是16位定时,所以初值需要两个存储单元,初值放在40H和41H存储单元中,这两个单元中的不同内容对应不同频率,初值对应频率表如下,高位在前,低位在后
123
DB0F8H,94h,0F9H,5CH,0FAH,15H,
4567
DB0FAH,68H,0FBH,05H,0FBH,90H,0FCH,0CH
1234
DB0FCH,4AH,0FCH,0AEH,0FDH,0AH,0FDH,34H,
567
DB0FDH,82H,0FDH,0C8H,0FEH,06H
122232
DB0FEH,25H,0FEH,57H,0FEH,85H
该表由标准音标频率计算而得.至于在40H和41H中该装入什么初值,在下一个模块中介绍.
(2)发音时长模块:
发音时长有定时器T1决定,本次实验中播放单曲时单位时长为0.25s,既歌曲谱中每个音调只响0.25s.定时器T1工作在方式2,模块程序如下:
TINT1:
DJNZR1,REBACK①
MOVR1,#40
DJNZR2,REBACK
MOVR2,#25②
LCALLDISP1③
MOVA,#00H④
CLRC
MOVA,43H
ADDA,#1
MOV43H,A
MOVA,#00H
ADDCA,42H
MOV42H,A
MOVDPH,42H
MOVDPL,43H
MOVCA,@A+DPTR
MOV44H,A⑤
MOVR0,A⑩
LCALLDISP⑪
CJNEA,#00H,STOP⑥
CLRTR0
AJMPREBACK
CJNEA,#0FFH,GOON
MOV42H,#1FH
MOV43H,#0FFH
AJMPREBACK⑦
GOON:
SETBTR0
MOVA,44H⑧
RLA
MOVR7,A
MOVDPTR,#PITCH
MOV40H,A
INCR7
MOVA,R7
MOV41H,A⑨
REBACK:
POPACC
RETI
程序中第①行到第②行,保证了执行完这几行程序中,某个音调已经响了0.25s,因为定时器T1每次中断为250us.第三行为点阵显示音调高低子程序,44H存放音调,作为点阵的显示依据.后续将做介绍.第④行到第⑤行为读取乐谱中下一个音调部分,42H和43H为音调指针,两者合看作一个16位寄存器,存储待装入DPTR的数据,这里定义为"
DPTR"
在上一个音调响完一个单位时间后,"
加1,指向下一个音调,并将"
中地址装入DPTR,并在表#SCORE(起始为2000H)中读出下一个音调,并存入44H中.第⑥行到第⑦行作用是,原歌曲中需要停顿的部分,在#score表中均为0,通过看A中内容是否为0,来判断是否需要停顿,如果为0,就停止定时器0,喇叭将不发声.#0FFH是歌曲结束标志,当A中内容为#0FFH时,将"
赋值1FFFH,待下一次中断来临时,"
加一后可以回到乐谱#SCORE初始位置2000H,以便实现循环播放.第⑧行到第⑨行是将从#SCORE中读出的真实音调转换成定时器T0所需要的各音调对应的定时器初值.因为在音调-初值表#PITCH中,每个音调占两个字节,所以将A中包含的音调乘了2,发送到R7,R7在这里作为#PITCH表指针,#PITCH表中每个音调的初值高位在前,地位在后,在读取完高位并发送到40H后,R7加1,读取地位,然后将读取的数据发送到41H.在下一个单位时间内鸣响.⑩⑪行为点阵显示作用,后续将做介绍.
(3)单曲循环初始化模块:
本次课设定为按下P1.1口对应的按键K3时,单片机从主菜单进入单曲循环模式,按键为低电平有效,并且对定时器,外部中断等进行初始化设定,程序如下:
SINGCYCLE:
NOP①
JNBP1.1,NEXT
LJMPMAIN②
NEXT:
LCALLDISPNONE③
CLR20H④
SETB21H⑤
SETBEX1⑧
SETBET0
SETBET1⑩
MOVP0,#0F9H⑪
MOVTMOD,#21H⑫
MOVR1,#40
MOVR2,#25
MOVTH1,#00H
MOVTL1,#06H
MOVTH0,#0FDH
MOVTL0,#0AH
MOV40H,#20H
MOV41H,#00H
CLRP1.0⑬
SINGCYCLE1:
JB21H,RETURN1⑥
LJMPMAIN
RETURN1:
AJMPSINGCYCLE1⑦
其中第①行到第②行为判断K3键是否按下,按下后则继续执行,未按下则返回主菜单.
第③行为让点阵不显示程序,因为在主菜单中加入了欢迎界面,所以在这里停止LED的欢迎界面.第④行第⑤行为标志位,20H为暂停/播放标志位,用于外部中断1子程序检验和控制,当20H=0时,表示当前单片机正在暂停状态,此时如果外部中断1发生,则会启动定时器T0,定时器T1,如果20H=1的时候,中断1发生,则会停止定时器T0,T1,实现暂停播放功能.第⑤行为置位单曲循环模式标志位,主要是实现返回主菜单功能,在⑥⑦行间循环等待定时器中断时,会检验21H,若21H=0,则会跳出循环,返回主菜单,21H会由外部中断0清零.第⑧-⑩行为开启中断,EX1为暂停/播放中断允许位.⑪行是让共阳极数码管显示1,表示单曲循环模式.第⑫-⑬行依次为设置播放单位时长的定时器初值,设置音调初值,设置乐谱指针初值并启动定时器.执行完成后进入⑥-⑦行循环等待中断.
(4)按键发音初始化模块:
按键发音的主要原理是:
利用开发板的16键矩阵键盘,赋予每个按键一个键值,利用反转法来计算按下的键的键值,既行输出4个1,列输出4个0,且行为高四位,列为低四位,然后读取行,有键按下则行中有1位为0,然后在让行输出0,列输出1,读取列,有间按下时,列中有一位为0,然后这8位二进制数就与16个键一一对应了.然后根据这8位二进制数编码一个对应的音调,就可以实现按键发音了.按键发音模式初始化程序如下:
SINGPRESS:
NOP
JNBP1.3,NEXTA①
LJMPMAIN
NEXTA:
SETB22H
MOVTMOD,#21H
MOVP0,#0A4H
SINGPRESS1:
LCALLDISPNONE②
MOVP1,#0F0H③
NOP
MOVA,P2
ANLA,#0F0H
MOV30H,A
MOVP2,#0FH
NOP
ANLA,#0FH
ORLA,30H
MOV20H,A
CJNEA,#0FFH,CALCULATE④
JB22H,RETURN2
CALCULATE:
LCALLKEYVALUE⑤
RETURN2:
AJMPSINGPRESS1
程序第①-②行与单曲循环初始化类似,只是标志位改成了22H,然后让共阳极数码管显示2,并且按键发音只用到1个定时器,所以只允许T0中断.第③-④,⑤行既反转法检测被按下的按键部分,然后将被按下按键对应的8位二进制数存放入20H单元,因为20H可以位寻址,便于计算键值,好转换成相应的音调,具体程序将在下一模块展示.
(5)按键发音KEYVALUE子程序:
该子程序主要功能是:
计算出被按下按键的键值,寻找键值对应的音调,让后让喇叭播放一定时间该音调,并且在点阵上显示该音调的相对高低.具体程序如下:
KEYVALUE:
PUSHPSW
MOVR7,#00H①
JB00H,PLUS4
ADDA,#0
MOVR7,A
PLUS4:
JB01H,PLUS8
MOVA,R7
ADDA,#4
PLUS8:
JB02H,PLUS12
ADDA,#8
PLUS12:
JB03H,PLUS41
ADDA,#12
PLUS41:
JB04H,PLUS3
PLUS3:
JB05H,PLUS2
ADDA,#3
PLUS2:
JB06H,PLUS1
ADDA,#2
PLUS1:
JB07H,NEXTA
ADDA,#1
MOVR7,A②
MOVR0,A⑥
RLA③
MOVDPTR,#PITCH
MOVCA,@A+DPTR
MOV40H,A
MOVTH0,A
INCR7
MOV41H,A
MOVTL0,A
LCALLDISP
MOVR7,#00H
SETBTR0④
LCALLDELAY_100MS⑤
POP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 doc