音乐盒设计(单片机课程设计)1.doc

上传人:椰子壳 文档编号:5028189 上传时间:2020-01-29 格式:DOC 页数:35 大小:334.50KB
返回 下载 相关 举报
音乐盒设计(单片机课程设计)1.doc_第1页
第1页 / 共35页
音乐盒设计(单片机课程设计)1.doc_第2页
第2页 / 共35页
音乐盒设计(单片机课程设计)1.doc_第3页
第3页 / 共35页
音乐盒设计(单片机课程设计)1.doc_第4页
第4页 / 共35页
音乐盒设计(单片机课程设计)1.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《音乐盒设计(单片机课程设计)1.doc》由会员分享,可在线阅读,更多相关《音乐盒设计(单片机课程设计)1.doc(35页珍藏版)》请在三一文库上搜索。

1、数字音乐盒的设计各专业全套优秀毕业设计图纸目录摘 要I第一章 设计方案的对比1第二章 总体方案设计22.1 原理简介22.2 方案设计思想2第三章 方案实现33.1、音频脉冲的产生3 3.2音乐节拍的生成43.3.建立音乐的步骤4第四章 硬件设计54.1 硬件电路54.1.1、AT89C51的工作特性54.2 原理说明64.3 电路各模块说明64.3.1 键盘系统64.3.2 放大电路74.3.3 时钟电路84.3.4 复位电路85.3.5 显示电路9第五章 软件设计105.1 主模块的设计10第六章 仿真、安装和调试12总结13致谢14参考文献14附录15附录一:音乐程序15附录二:基于单片

2、机的数字音乐盒总电路图32摘 要本设计是基于单片机的数字音乐盒设计,由单片机AT89C51芯片和LCD显示器为核心,辅以必要的电路,构成的一个单片机电子数字音乐盒。要求利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调并采用LCD显示信息,从而演奏乐曲(最少三首乐曲,每首不少于30秒),开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称),可通过功能键选择乐曲,暂停,播放。本设计采用4*4键盘,用Protel99来画系统硬件图,采用汇编语言进行编程,编程后利用KEIL C51来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能得以正常实现。该音乐盒的设计可

3、以通过按键选择不同的曲目,播放和暂停,并通过LCD显示歌曲号及播放时间。本设计键盘采用动态扫描方式。每次扫描一行键盘,送此行低电平,读输入口的状态值,判断有没有键按下。若有键按下,根据读入口的值选择显示值并送至显示值寄存单元,判断键值,启动计数器T0,根据次值为偏移地址找到要选择的音乐的代码的首地址,根据代码产生一定频率的脉冲,驱动蜂鸣器,放出音。同时启动定时器T1,计算音乐的播放的时间。关键词:数字音乐盒 AT89C51 LCD显示器 Proteus软件 4*4键盘 动态扫描 KEIL C5 第一章 设计方案的对比方案一:本设计以89C51为核心,配合键盘系统,放大电路,时钟电路和数码管显示

4、电路实现音乐的演奏。音乐盒设计采用独立的键盘做为音符的输入以89C51为核心。本设计中用到了89C51单片机,4*4矩阵式键盘,蜂鸣器,14引脚的LCD,可以通过以下原理框图(图1.1)来实现该音乐盒的设计。放大电路P3.7P0.0|P0.7琴键电路显示电路单片机89C51复位电路时钟电路路图1.1 系统结构框图方案二:该方案以AT89S52单片机为核心,主要设计模块包括数码管显示部分,功能键盘部分,蜂鸣器发声部分,彩灯部分。数码管采用共阳极数码管,通过单片机P1口控制,实现歌曲序号的显示;功能键盘采用1*8键盘按键开关,通过单片机P3口控制,实现歌曲播放顺序的调换和暂停播放功能;蜂鸣器由单片

5、机的P2口控制,实现歌曲播放;彩灯是由普通发光二极管代替,能实现单色长亮和闪烁效。综上所述:由于方案一的琴键输入是通过独立式键盘来完成的,这样便于控制且直观。且本方案是采用我们所熟知的单片机类型和显示电路,便于我们理解。而方案二中其他电路部分与方案一相差不大,但系统实现比较困难。且主控芯片采用的是我们少用的AT89S51,所以我们选择方案一。第二章 总体方案设计 2.1 原理简介当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号。2.2 方案设计思想(1)要产生音频脉冲,只要算出某一音频的周期(

6、1/音频),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲(2)利用8951的内部定时器使其工作在计数器模式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):起记数

7、值的求法如下:T65536N65536Fi2Fr例如:设K65536,F1000000Fi1MHZ,求低音D0(523HZ),高音的D0(1046HZ)的记数值。T65536N65536Fi2Fr6553610000002Fr65536500000Fr低音D0的T6553650000026263627中音D0的T6553650000052364580低音D0的T65536500000104765059 第三章 方案实现3.1、音频脉冲的产生 对于音乐盒而言发出悦耳的音乐是其最主要的功能,那么对于使用单片机来制作出来的音乐盒怎么实现音符的发声呢?通过查看资料我们知道音符的发音主要靠不同的音频脉冲

8、。利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制引脚的输出音乐(本实验采用P1.0做为输出引脚)。只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。具体做法如下所示(以中音DO为例):例如:中音1(DO)的音频= 523HZ,周期T=1/523s=1912定时器/计数器0的定时时间为:T/2=1912/2=956定时器956的计数值=定时时间/机器周期=956/1=956(时钟频率=12MHZ)装入T0计数

9、器初值为65536-956=64580将64580装入T0寄存器中,启动T0工作后,每计数956次时将产生溢出中断,进入中断服务时,每次对P1.0引脚的输出值进行取反,就可得到中音DO(523HZ)的音符音频。将51单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。下表3-1是C调各音符频率与计数初值T的对照表: 表3-1 C调各音符频率与计数初值T的对照表音符频率(Hz)/初值()音符频率(Hz)/初值()低1DO262/63627中1DO 523/64580高1DO 1042/65056低2RE 294/63835中2RE589/64687 高2RE 124

10、5/65134低3M 330/64021中3M 661/64780高3M 1318/65157低4FA 350/64107中4FA700/64822高4FA 1397/65178低5SO 393/64264中5SO 786/64900高5SO 1568/65217 低6LA 441/64402中6LA882/64969高6LA1760/65252低7SI495/64526 中7SI990/65031高7SI1967/652823.2音乐节拍的生成 要唱出一首歌,只产生出音频脉冲还不够,还要考虑节拍。 定义:每个音符占用一个字节,字节的高4位代表音符的高低,低4位表示该音符的节拍,如果一拍为0.

11、4秒,则1/4拍是0.1秒,只要设定延迟时间就可获得节拍的时间。我们也可以设1/4拍为1个DELAY,则1拍应该是4个DELAY,只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数。(见表3-2)表3-2节拍数1/4节拍2/4节拍3/4节拍1拍1又1/4拍节拍码12345节拍数1又1/2拍2拍2又1/2拍3拍3又3/4拍节拍码68ACF3.3.建立音乐的步骤先把谱的音符找出,然后由上表建立时间常数初值T的顺序表,标号为TABLE1。建立音符和节拍表,标号为TABLE,将构成发音符的计数值放在其中。TABLE表的结构为:简谱码(代表音符)为高4位,节拍码(表示节拍数)为低4位,在唱歌程序中

12、对每一个有节拍的音符能通过设计共同生成音符节拍码,本程序的音符节拍码表见表3-2。第四章 硬件设计4.1 硬件电路 本设计中用到了89C51单片机,其引脚图如右图4-1-1所示,矩阵式键盘模块,蜂鸣器,16*2 LCD,扬声器、LED数码管显示器等。( 数字音乐盒总硬件图如附录一所示) 图4-1-1 89C51引脚图4.1.1、AT89C51的工作特性内含4KB的FLASH存储器檫写次数1000次; 内含128字节的RAM;具有32根可编程I/O线;具有2个16位编程定时器 具有6个中断源,5个中断矢量,2级优先权的中 断结构;具有1个全双工的可编程串行通信接口;具有1个数据指针DPTR;具有

13、可编程3级程序锁定位;AT89C51的工作电源为5(10.2)V且典型值为5V;AT89C51最高工作频率为24MHZ;AT89C51的编程频率为324MHZ,编程启动电流和启动电压 分别为1mA、5或12V。 4.2 原理说明当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。同时启动定时器T1,显示歌曲号。(1)硬件电路中用、分别接S1、S2作为上、下一曲的功能键(2)用P1.0-P1.6控制七段码a,b,c,d,e,f。(3)用P2.0口控制喇叭。(4)电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。4.3 电路各模块说明4.3.1 键盘

14、系统键盘模块采用4*4按键模式(S1-S16),接在单片机的P1口上。键盘系统的链接电路图如图4-3-1所示:当用手按下一个键时,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。这就是抖动。抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。很容易想到,抖动问题不解决就会引起对闭合键的识别。用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,在读入键盘码。具体编码如下所示:MAI: CLR TR0 ;关闭上一次定时,进入下一次按键判断MOV TMOD, #01HMOV IE, #82HMOV A,

15、P1MOV 30H, A ;保存键盘状态值 LCALL D10MS ;延迟10ms消除抖动MOV A , P1 ;再读键盘状态CJNE A, 30H, MAI ;两次结果不同,是抖动引起,转MAI图4-3-1 键盘模块电路图 4.3.2 放大电路 放大电路的分析如下所示,其电路图如图4-3-2所示:此部分的放大电路简单容易实现。可以采用一个小功率PNP型硅管2905,利用“分压 偏置式工作点稳定直流通路”,达到了对静态工作点的稳定。分压电阻分别选择1K和5.5K。蜂鸣器一端接+5V电压,一端接晶体管的发射极。由P1.0输出预定的方波,加到晶体管进行放大,再输出到嗡宁器,很好的实现了频率、声音的

16、转换。图4-3-2 放大电路模块电路图4.3.3 时钟电路此系统的时钟电路设计是采用内部方式,即是利用芯片内部的振荡电路。MCS-51内部有一个用于构成振荡器的高增益反相放大器。以此系统电路采用12MHz的晶振,起振电路中C1,C2均为30pf。时钟电路模块电路图如图4-3-3所示。 图4-3-3 晶振电路模块电路图 4.3.4 复位电路51单片机的RST引脚是复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡脉冲周期(即二个机器周期)以上。一般有两种复位方式:上电复位和手动复位。复位电路图如图4-3-4所示。图4-3-4 复位电路模块电路图上电复位上电时,利用电容C1的充电延

17、时特性,一开始,+5V电压全部降落在电阻R6上,高电平输入RST脚,单片机复位操作,当电容C1充电接近结束时,电阻R6电压趋于0,RST脚输入低电平,结束复位操作。手动复位在系统出现操作错误或程序运行出错时使用。在单片机系统运行过程中,按下复位键K0,高电平输入RST脚,单片机被强制执行复位操作,系统可退出错误运行状态,恢复正常工作。5.3.5 显示电路 显示电路采用LCD模块,LCD显示模块采用14引脚的LCD LM032L,它有八个数据端口,三个控制口。当控制口R/W为低电平时,单片机向LCD写入指令,当其为高电平时,单片机读取LCD的信息。单片机的P2.0P2.2作为LCD的RS,R/W

18、,E的控制信号。用P0.0P0.7作为LCD的D0D7的控制信号。用LCD来显示播放歌曲时间和歌曲号。当按下开机键时,会在LCD上显示英文欢迎字符,按其他键可显示歌曲号和播放时间。LCD显示模块电路图分别如图4-3-5所示。图4-3-5 LCD显示模块电路图第五章 软件设计5.1 主模块的设计 主模块是系统软件的主框架。结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。它的合理与否关系到程序最终的功能的多少和性能的好坏。本程序可以实现课程设计的基本要求,并可以通过按键播放多首歌曲,主程序流程图如下所示(图5-1-1),其中显示子程序的流程图如图5-1

19、-2所示。图5-1-1 数字音乐盒主程序流程图图5-1-2 显示子程序流程图 第六章 仿真、安装和调试按照上面设计的电路在proteus软件内画图, 打开单片机软件开发系统Keil,选择89c51单片机,在其中编写程序,运行生成一个后缀名为hex的文件,然后将该文件下载到proteus中的AT89c51单片机中进行仿真,观察实验现象。仿真能实现播放音乐,按键选择曲目,暂停,播放功能。仿真成功后,安装好实验板,然后将音乐程序下载到电路板内 ,观察结果。能实现播放音乐,按键换曲等功能。(其中仿真截图如图6-1-1所示)程序调试中出现的问题及解决的办法:(1) 有时会出现程序一点错误也没有,但就是不

20、能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。(2) 程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正常运行的现象。当用JNZ指令时,跳转范围比较少,这时要用一个标号中转。(3) 编程时要注意,在程序开始时,要写入各定时器中断的入口地址。(4) 编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。(5) 编程前要加流程图,这样会使思路清晰,例如数字音乐盒的设计思路完全可以按着MP3的工作方式列写流程图。(6) LCD计时正常显示

21、的解决办法:a. 两个定时器同时工作,存在中断时序问题,刚开始时我们把定时器1设定在方式3,计250us,由于定时中断过于频繁,使CPU负载过大,导致音乐不能正常播放,时间不能正常显示。解决办法:将定时器1设定在工作方式1,16位计数,计50ms,效果有很大改观。但还有问题。b. 当音乐为全4拍起始时,此时音乐节奏与定时器T1中断频率错开,LCD显示和音乐播放都会好一些。c. 另外,在歌曲中,当遇到一个音符发音为4拍,在编曲中为*CH,因时间较长,当定时器T1此时来中断时,就会对歌曲播放产生影响,若改为发音一拍,中断对歌曲播放影响减弱,但音乐效果变差。改进方案:若采用可以定时时间更长的单片机,

22、可以避免所有问题。图6-1-1 Proteus仿真图 总结这学期我们已接触了单片机的课,有了一定的基础知识,这次的单片机课程设计使我有了实践和提高能力的机会,让我受益良多。在此次单片机的课程设计中,我不但对单片机的基础知识掌握的更牢固,而且对其硬件和软件方面有了更深一层的认识。在做数字音乐盒的课程设计时,我掌握了AT89C51单片机的内部振荡方式及振荡频率和单片机的复位电路形式。此次设计的软件编程采用的是我们所学的汇编语言,通过对数字音乐盒的编程,我更熟悉了键盘扫描和动态显示的编程以及定时计数器和中断的编程。巩固了对AT89C51的内部结构和接口扩展的知识。本次设计中,我用到了protel99

23、画图软件,keil C51编程软件和proteus仿真软件。以前虽然对protel99有一定的认识,能运用其画图,不缺不熟练,这次设计是我对其的熟练程度提高了不少。在大三上学期我自学过一点keil C51软件,但并不会用proteus,更不知道怎样将其结合起来使用。在做数字音乐盒的仿真时,通过向同学青椒和查找资料,我能够运用它来画图,并和keil C51结合起来进行仿真,更有幸的是,仿真实现了。这次课程设计,让我收获到了成功的喜悦,学会了做事严谨的态度。希望下次还有这样学习的机会,并且希望下次能做的更好。 致谢 这次基于单片机的数字音乐盒设计得以完成,首先要感谢不畏辛辞地知道我们的王南兰老师,

24、通过王老师的指导,是我增涨了单片机的知识,也使这次课程设计得以顺利完成。其次,还要感谢我的同学,在这次课程设计中,遇到了许多的困难,是通过询问他们才解决的,所以要感谢他们的赐教。 参考文献1 许珉.单片机原理及应用M.北京:中国电力出版社,2007.08 2 三恒星科技.MCS-51单片机原理与应用实例M. 北京:电子工业出版社,2008.013 王为青,程国钢.单片机Keil Cx51应用开发技术M. 北京:人民邮电出版社,2007.02 4 John Markus.电子电路大全M.北京:计量出版社,19955 阎石.数字电子技术基础M.北京:高等教育出版社,1998.12,第4版6 邓元庆

25、.数字电路与逻辑设计M.北京:电子工业出版社,2001 7 高锋,单片微型计算机原理与接口技术.科学出版社,2003年. 8 李传军,单片机原理及应用(第一版).河南科学技术出版社,2006年.9 杨志忠.数字电子技术.高等教育出版社(第二版)M.2003年.10 张友德.单片微型机原理应用与实验.上海复旦大学出版社,2000 11 融会贯通 Protel99电路设计 弘道工作室 北京 人民交通出版设,2000. 12 单片机原理及接口技术实验 朱定华 北京 北方交通大学出版社2002.11附录附录一:音乐程序RS BIT P2.0 RW BIT P2.1 E BIT P2.2;*L50MS

26、EQU 60HL1MS EQU 61HL250MS EQU 62HSEC EQU 65HMIN EQU 64HHOU EQU 63H;*ORG 0000HLJMP MAINORG 000BHLJMP TT0ORG 001BHLJMP T1INTORG 1000HMAIN: 液晶初始化MOV SP,#70H MOV P0,#01H ;清屏CALL ENABLEMOV P0,#38H ;8位,2行显示LCALL ENABLEMOV P0,#0FH ;屏显ON,光标ON,闪烁ONLCALL ENABLEMOV P0,#06H ;计数地址加1,显示幕ONLCALL ENABLE 内存初始化LCALL

27、INITIL KEY1:LCALL KEYLCALL MODD LJMP KEY1键盘扫描KEY:NOPNOPLCALL KSJNZ K1 有按键转到K1LCALL KAIJILCALL SOPXN:LJMP KEYK1:LCALL MODDLCALL MODDLCALL KSJNZ K2LJMP KEYK2:MOV R2,#0FEH ;读键盘MOV R4,#00HK3:MOV A,R2MOV P1,AMOV A,P1JB ACC.4,L1为1跳转,第一行无按键MOV A,#00HLJMP LKL1:JB ACC.5,L2MOV A,#04HLJMP LKL2:JB ACC.6,L3MOV A

28、,#08HLJMP LKL3:JB ACC.7,NEXT1MOV A,#0CHLK:ADD A,R4PUSH ACCK4:LCALL DELAY1 ;若同时有其他按键,则等待LCALL KSJNZ K4MOV R3,#07H CLR AMOV R0,#30HMOV R1,#31HMM1:MOV A,R1MOV R0,AINC R0INC R1DJNZ R3,MM1POP ACCMOV R0,A RETNEXT1:INC R4 ;列扫描MOV A,R2JNB ACC.3,N2LJMP N1N2:LJMP KEYN1:RL AMOV R2,ALJMP K3KS:MOV A,#0F0H ;判断P1口

29、MOV P1,ANOPNOPMOV A,P1CPL AANL A,#0F0HRETDELAY1:SETB RS0DL:MOV R5,#0AHDL2:MOV R6,#63DL3:NOP NOPDJNZ R6,DL3DJNZ R5,DL2 CLR RS0 RET 30H-37H初值为零INITIL: MOV R3,#08HMOV R0,#30HM1:MOV R0,#00HINC R0DJNZ R3,M1 RETMODD: MOV P0,#8EHLCALL ENABLE MOV A,37HMOV DPTR,#TABLE3 MOVC A,A+DPTRLCALL WRITE2 RET开机提示字KAIJI

30、:MOV A,37HCJNE A,#0FH,DFFMOV P0,#80H ;设光标地址 LCALL ENABLEMOV DPTR,#TABLE1;写数据LCALL WRITE1 DFF:RET按键值播放歌曲SOP:MOV A,37HCJNE A,#01H,A11LCALL MODDMOV 52H,#HIGH TABLE10MOV 53H,#LOW TABLE10LCALL INITILE2LCALL MAIN0A11:CJNE A,#02H,A22LCALL MODDMOV 52H,#HIGH TABLE20MOV 53H,#LOW TABLE20 LCALL INITILE2 LCALL M

31、AIN0A22:CJNE A,#03H,A33LCALL MODDMOV 52H,#HIGH TABLE30MOV 53H,#LOW TABLE30 LCALL INITILE2 LCALL MAIN0 A33:CJNE A,#04H,A44LCALL MODDLCALL INITILE2 LCALL MAIN0A44:CJNE A,#05H,A55LCALL MODD LCALL INITILE2 LCALL MAIN0A55:CJNE A,#06H,A66LCALL MODDLCALL INITILE2 LCALL MAIN0 A66:CJNE A,#07H,A77LCALL MODD L

32、CALL INITILE2 LCALL MAIN0 A77:CJNE A,#08H,A88LCALL MODD LCALL INITILE2 LCALL MAIN0A88:90CJNE A,#09H,A99LCALL MODDLCALL INITILE2 LCALL MAIN0 A99:CJNE A,#0AH,AAALCALL MODDLCALL INITILE2 LCALL MAIN0 AAA:RET INITILE2:MOV L50MS,#20MOV L1MS,#00HMOV L250MS,#00HMOV SEC,#00HMOV MIN,#00HMOV HOU,#00HMOV A,HOUM

33、OV B,#10DIV ABADD A,#30H ;将BCD吗转化为ASIIC码MOV P0,#0C8H ;显示小时十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0C9H ;显示小时个位CALL ENABLECALL WRITE2MOV A,#3AHMOV P0,#0DH ;显示冒号CALL ENABLECALL WRITE2MOV A,MINMOV B,#10DIV ABADD A,#30HMOV P0,#0CBH ;显示分十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0CCH ;显示分个

34、位CALL ENABLECALL WRITE2MOV A,#3AHMOV P0,#0CDH ;显示冒号CALL ENABLECALL WRITE2MOV A,SECMOV B,#10DIV ABADD A,#30H MOV P0,#0CEH ;显示秒十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0CFH ;显示秒个位CALL ENABLECALL WRITE2MOV P0,#0C0H ;设光标地址 CALL ENABLEMOV DPTR,#TABLE2;写数据CALL WRITE1 RET写指令ENABLE: CLR RSCLR RWCLR

35、ELCALL DELAYSETB ERET写数据WRITE1:MOV R1,#00HA1:MOV A,R1MOVC A,A+DPTRCALL WRITE2INC R1CJNE A,#0FEH,A1 ;未到字符串末尾继续RETWRITE2:MOV P0,ASETB RSCLR RWCLR ECALL DELAYSETB ERETDELAY:MOV R4,#05D1:MOV R5,#0FFHDJNZ R5,$DJNZ R4,D1RET TAB:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0a1h,86h,8ehTAB

36、1:db 89h,86h,0c7h,0c7h,0c0hTAB2:db 0c6h,88h,0c0hTABLE1:DBWELCOM HERE,0FEHTABLE2:DBDFF WB ,0FEHTABLE4:DB CAU,0FEHTABLE3:DB 30H,31H,32H,33h DB 34H,35H,36H,37HDB 38h,39H,41H,42HDB 43H,44H,45H,46H播放歌曲程序MAIN0:MOV TMOD,#11HMOV IE,#8aH MOV TH1,#3cHMOV TL1,#0b0H lcall ksjnz TTM12 MOV 40H,#00HNEXT20:MOV A,40

37、HMOV DPH,52HMOV DPL,53HMOVC A,A+DPTRMOV R2,AJZ STOPANL A,#0FHMOV R1,AMOV A,R2SWAP AANL A,#0FHJNZ SINGCLR TR0JMP W1SING:DEC AMOV 22H,ARL AMOV DPTR,#TABLE00MOVC A,A+DPTRMOV TH0,AMOV 21H,AMOV A,22HRL AINC AMOVC A,A+DPTRMOV TL0,AMOV 20H,ASETB TR0SETB TR1W1:LCALL DELAY30INC 40HLCALL KS ;有键跳出JNZ STOPLJMP

38、NEXT20STOP:CLR TR0CLR TR1LJMP MAIN0 TTM12:LCALL K2MOV A,37HCJNE A,#0EH,TTM13CLR TR1LCALL DELAY1TTM120:LCALL KSLCALL DELAY1JZ TTM120LCALL K2MOV A,37HCJNE A,#0EH,TTM120SETB TR1LJMP NEXT20TTM13:CJNE A,#0CH,TTM14MOV A,52HINC AMOV 52H,AMOV A,53HINC AMOV 53H,AMOV A,36HINC AMOV 37H,ALJMP TTM2TTM14:CJNE A,#

39、0DH,TTM2MOV A,52HDEC AMOV 52H,AMOV A,53HDEC AMOV 53H,AMOV A,36HDEC AMOV 37H,A TTM2:RET定时器中断子程序0TT0:PUSH ACCPUSH PSWMOV TL0,20HMOV TH0,21HCPL P3.7POP PSWPOP ACCRETI定时器中断子程序1T1INT: MOV TH1, #3cHMOV TL1, #0b0HDJNZ L50MS,X4MOV L50MS,#20每秒种时钟刷新秒显示一次SECSET:MOV A,SECMOV B,#10DIV ABADD A,#30H MOV P0,#0CEH ;

40、显示秒十位lCALL ENABLElCALL WRITE2MOV A,BADD A,#30HMOV P0,#0CFH ;显示秒个位lCALL ENABLElCALL WRITE2MOV A,SECINC AMOV SEC,AXRL A,#60X4:JNZ OUTMINSET:MOV SEC,#00H MOV A,MININC AMOV MIN,A MOV B,#10DIV ABADD A,#30HMOV P0,#0CBH ;显示分十位lCALL ENABLElCALL WRITE2MOV A,BADD A,#30HMOV P0,#0CCH ;显示分个位lCALL ENABLElCALL WRI

41、TE2MOV A,MIN MOV B,#3MUL ABMOV B,#100DIV ABMOV R2,AMOV A,#10XCH A,BDIV ABMOV A,MINXRL A,#60JNZ OUTHOUSET:MOV MIN,#00H MOV A,HOUMOV B,#10DIV ABADD A,#30H ;将BCD吗转化为ASIIC码MOV P0,#0C8H ;显示小时十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0C9H ;显示小时个位CALL ENABLECALL WRITE2MOV A,HOUINC AMOV HOU,AXRL A,#1

42、0JNZ OUTSJMP OVERFLOWOUT:RETIOVERFLOW:MOV L50MS,#20MOV L1MS,#00HMOV L250MS,#00HMOV SEC,#00HMOV MIN,#00HMOV HOU,#00HRETIDELAY30: MOV R7,#2W2:MOV R4,#125W3:MOV R3,#248DJNZ R3,$DJNZ R4,W3DJNZ R7,W2DJNZ R1,DELAY30RETTABLE00:DW 64580,64684,64777,64820DW 64898,64968,65030,64260DW 64400,64524,65058,63835,64021第一首精忠报国TABLE10: DB 66H,52H,36H,22H,12H,12H,22H,32H,98H,84H

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1