单片机课程设计实验报告(带歌曲的电子钟)_第1页
单片机课程设计实验报告(带歌曲的电子钟)_第2页
单片机课程设计实验报告(带歌曲的电子钟)_第3页
单片机课程设计实验报告(带歌曲的电子钟)_第4页
单片机课程设计实验报告(带歌曲的电子钟)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE1一、目的任务本课程设计是主干实践课。课程的任务在于提高学生综合运用所学知识理论、分析解决问题的能力。二、内容(1)题目带歌曲演奏的电子表(参考硬件25,P78)(2)要求a.利用8051单片机设计出具有时、分、秒显示的电子表。b.在设定的时间到时,可以演奏一首歌曲。c.可以定闹,闹钟是另一首歌曲。(3)设计说明对于这个题目我选择的是汇编语言编程加韦福单片机仿真系统合作完成。主要由两大模块组成,电子钟模块和歌曲模块,设计思想如下:电子钟模块:利用仿真器的六个LED显示当前时间,通过软件编程完成十分秒的计时,并在LED上同步的显示出来。其中设置两个按键的功能,当A键按下时,从电子钟模块转换到手动键盘输入的界面,此时手动输入时间,当B键按下时,返回电子钟的界面继续计时并且显示。歌曲模块:当手动键盘输入时间和当前时间相同时,调取歌曲的子程序,利用仿真器的扬声器放一首歌,本设计中是祝你平安,当歌曲播放完毕,继续回到电子钟的界面,继续计时并且显示。(4)硬件设计(完整电路图),文字说明硬件的连接比较简单,只有两根线,即片选端CSO连接LED输入端,P3.6口连接扬声器的输入端,完整的电路图如下所示:(5)软件设计(程序框图,源程序(带注释)),文字说明程序框图:开始开始置定时器模式及常数置定时器模式及常数设置初始常数设置初始常数启动定时器启动定时器读取小时值读取小时值转换成显示数据转换成显示数据显示数据送缓冲显示数据送缓冲读取分钟值读取分钟值转换成显示数据转换成显示数据显示数据送缓冲显示数据送缓冲读取秒值读取秒值转换成显示数据转换成显示数据显示数据送缓冲显示数据送缓冲调用显示子程序调用显示子程序主程序框图中断入口中断入口保护现场保护现场10000次计数值减110000次计数值减1否计数值为0否计数值为0是是设置下次10000次计数值设置下次10000次计数值秒值加1秒值加1否否秒值清0,分钟加1秒值清0,分钟加1到60分钟到60分钟否到60秒否到60秒是是分值清0,小时加1分值清0,小时加1否否到24小时到24小时小时值清0小时值清0恢复现场恢复现场中断返回中断返回100us定时中断服务程序

开始开始A键是否按下A键是否按下 是进入手动输入状态进入手动输入状态六个数值输入结束六个数值输入结束B键是否按下B键是否按下 是返回 返回A键和B键的功能框图源程序:OUTBITequ08002h;位控制口OUTSEGequ08004h;段控制口INequ08001h;键盘读入口LEDBufequ60h;显示缓冲LEDBuf1equ50h;显示缓冲Hourequ40hMinuteequ41hSecondequ42hC100usequ43hSPKequP3.6;扬声器接P3.6口Tickequ10000T100usequ256-50Numequ70hljmpStart;跳入主程序org000bh;定时器中断0入口地址jmpT0Intorg001bh;定时器中断1入口地址ljmpPPT0Int:pushPSWpushACCmova,C100us+1jnzGoondecC100usGoon:decC100us+1mova,C100usorla,C100us+1jnzExitmovC100us,#high(Tick)movC100us+1,#low(Tick)incSecondmova,Secondcjnea,#60,ExitmovSecond,#0incMinutemova,Minutecjnea,#60,ExitmovMinute,#0incHourmova,Hourcjnea,#24,ExitmovHour,#0Exit:popACCpopPSWretiDelay:;延时子程序movr7,#0DelayLoop:djnzr7,DelayLoopdjnzr6,DelayLoopretLEDMAP:;八段管显示码db3fh,06h,5bh,4fh,66h,6dh,7dh,07hdb7fh,6fh,77h,7ch,39h,5eh,79h,71hDisplayLED:;显示程序movr0,#LEDBufmovr1,#6;共6个八段管movr2,#00100000b;从左边开始显示Loop:movdptr,#OUTBITmova,#0movx@dptr,a;关所有八段管mova,@r0movdptr,#OUTSEGmovx@dptr,amovdptr,#OUTBITmova,r2movx@dptr,a;显示一位八段管movr6,#1callDelaymova,r2;显示下一位rramovr2,aincr0djnzr1,LoopretisplayLED1:movr0,#LEDBuf1movr1,#6;共6个八段管movr2,#00100000b;从左边开始显示DisplayLED1:movr0,#LEDBuf1movr1,#6;共6个八段管movr2,#00100000b;从左边开始显示Loop1:movdptr,#OUTBITmova,#0movx@dptr,a;关所有八段管mova,@r0movdptr,#OUTSEGmovx@dptr,amovdptr,#OUTBITmova,r2movx@dptr,a;显示一位八段管movr6,#1callDelaymova,r2;显示下一位rramovr2,aincr0djnzr1,Loop1retTestKey:movdptr,#OUTBITmova,#0movx@dptr,a;输出线置为0movdptr,#INmovxa,@dptr;读入键状态cplaanla,#0fh;高四位不用retKeyTable:;键码定义db16h,15h,14h,0ffhdb13h,12h,11h,10hdb0dh,0ch,0bh,0ahdb0eh,03h,06h,09hdb0fh,02h,05h,08hdb00h,01h,04h,07hGetKey:movdptr,#OUTBITmovP2,dphmovr0,#Low(IN)movr1,#00100000bmovr2,#6KLoop:mova,r1;找出键所在列cplamovx@dptr,acplarramovr1,a;下一列movxa,@r0cplaanla,#0fhjnzGoon1;该列有键入djnzr2,KLoopmovr2,#0ffh;没有键按下,返回0ffhsjmpExit1Goon1:movr1,a;键值=列X4+行mova,r2decarlarlamovr2,a;r2=(r2-1)*4mova,r1;r1中为读入的行值movr1,#4loopz:rrca;移位找出所在行jcExit1incr2;r2=r2+行值djnzr1,LoopzExit1:mova,r2;取出键码movdptr,#KeyTablemovca,@a+dptrmovr2,aWaitRelease:movdptr,#OUTBIT;等键释放clramovx@dptr,amovr6,#10callDelaycallTestKeyjnzWaitReleasemova,r2retToLED:movdptr,#LEDMapmovca,@a+dptrretStart:MOVSP,#50Hmovr4,#0movTMOD,#12h;模式2,定时器movTH0,#T100usmovTL0,#T100usmovIE,#10001010b;EA=1,IT0=1MOVTH1,#0D8HMOVTL1,#0EFH;MOVTMOD,#10HmovHour,#09movMinute,#0movSecond,#0movC100us,#high(Tick)movC100us+1,#low(Tick)setbTR0;启动定时器0MLoop:mova,Hourmovb,#10divabcallToLEDmovLEDBuf,a;将小时分开两位来显示mova,bcallToLEDmovLEDBuf+1,amova,Minutemovb,#10divabcallToLED;将分钟分开两位来显示movLEDBuf+2,amova,bcallToLEDmovLEDBuf+3,amova,Secondmovb,#10divabcallToLED;将秒钟分开两位来显示movLEDBuf+4,amova,bcallToLEDmovLEDBuf+5,acallDisplayLED;调用显示程序cjner4,#0,zzljmpxxloopzzloop:mova,60h;对当前输入的时间和计时时间进行比较cjnea,50h,rrrmova,61hcjnea,51h,rrrmova,62hcjnea,52h,rrrmova,63hcjnea,53h,rrrmova,64hcjnea,54h,rrrmova,65hcjnea,55h,rrrcallMUSIC0;相等即调用音乐程序movr4,#0rrr:ljmpxxloop;不相等调用显示程序xxloop:callDisplayLED;显示callTestKey;有键入?jzMLoop;无键入,继续显示callGetKey;读入键码anla,#0fh;显示键码movdptr,#LEDMapmovca,@a+dptrmovLEDBuf+5,acjnea,#77h,xxloop判断A键是否被按下jjloop:movLEDBuf+0,#0;显示8.8.8.8.movLEDBuf+1,#0movLEDBuf+2,#0movLEDBuf+3,#0movLEDBuf+4,#0movLEDBuf+5,#0t1P:callDisplayLED1;显示callTestKe;有键入?jzt1p;无键入,继续显示callGetKey;读入键码anla,#0fh;显示键码movdptr,#LEDMapmovca,@a+dptrmov50h,at2P:callDisplayLED;显示callTestKey;有键入?jzt2P;无键入,继续显示callGetKey;读入键码anla,#0fh;显示键码movdptr,#LEDMapmovca,@a+dptrmov51h,at3P:callDisplayLED;显示callTestKey;有键入?jzt3P;无键入,继续显示callGetKey;读入键码anla,#0fh;显示键码movdptr,#LEDMapmovca,@a+dptrmov52h,at4P:callDisplayLED;显示callTestKey;有键入?jzt4P;无键入,继续显示callGetKey;读入键码anla,#0fh;显示键码movdptr,#LEDMapmovca,@a+dptrmov53h,at5P:callDisplayLED1;显示callTestKey;有键入?jzt5P;无键入,继续显示callGetKey;读入键码anla,#0fh;显示键码movdptr,#LEDMapmovca,@a+dptrmov54h,at6P:callDisplayLED1;显示callTestKey;有键入?jzt6P;无键入,继续显示callGetKey;读入键码anla,#0fh;显示键码movdptr,#LEDMapmovca,@a+dptrmov55h,ayyLoop:callDisplayLED1;显示callTestKey;有键入?jzyyLoop;无键入,继续显示callGetKey;读入键码anla,#0fh;显示键码movdptr,#LEDMapmovca,@a+dptrmovLEDBuf+5,acjnea,#7ch,yyloop;判断B键是否被按下movr4,#1ljmpmloopPP:INC20H;歌曲的子程序MOVTH1,#0D8HMOVTL1,#0EFHRETIMUSIC0:NOPMOVDPTR,#DATMOV20H,#00HMUSIC1:NOP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论