本设计是基于单片机控制的数字音乐盒的设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机数字音乐盒。
假设该设计使用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比拟复杂,本钱也非常高。假设用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,则就降低了硬件电路的复杂性,而且其本钱也有所降低,所以在该设计中采用单片机利用AT89C51,它是低功耗、高性能的CMOS型8位单片机。片带有4KB的Flash存储器,且允许在系统改写或用编程器编程。另外, AT89C51的指令系统和引脚与8051完全兼容,片有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。
在该设计中利用单片机I/O口产生一定频率的方波,驱动蜂鸣器,发出各种不同的音调,从而演奏乐曲〔最少三首乐曲,每首不少于30秒〕,并能够由LCD显示信息。键盘在单片机应用系统中能实现向单片机输入数据,传送命令等功能,是人工干预单片机的主要手段。本设计采用4*4键盘,16*2 LCD,七段显示数码管LED。
在开机按钮按下时有英文欢送提示字符,播放时显示歌曲序号〔或名称〕。在演奏过程中可通过功能键选择乐曲,暂停,播放。
目录
1 概述错误!未定义书签。 2 系统总体方案及硬件设计2
2.1 系统构成2
2.1.1 AT89C51单片机简介2 2.1.2 LED显示器11 2.1.3 键盘11
2.1.4 系统复位电路的设计11 2.1.5 时钟电路模块11 2.2硬件电路端口分配11 3 软件设计11
3.1 主模块的设计11
3.2 外部中断源系统设计11 3.3 根本显示模块设计11 3.4 系统初始化程序11 4 Proteus软件仿真11 5课程设计体会11
-
参考文献11
附1:源程序代码11 附2:系统原理图21
1 概述
本设计是基于单片机的数字音乐盒设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子数字音乐盒。要求利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调并采用LCD显示信息,从而演奏乐曲〔最少三首乐曲,每首不少于30秒〕,开机时有英文欢送提示字符,播放时显示歌曲序号〔或名称〕,可通过功能键选择乐曲,暂停,播放。本设计采用4*4键盘,16*2 LCD,七段显示数码管LED。
课设准备中根据具体的要求,查找资料,然后按要求根据已学过的时钟程序编写定时闹钟的程序,依据程序利用proteus软件进展了仿真试验,对出现的问题进展分析和反复修改源程序,最终得到正确并符合要求的结果。
2 系统总体方案及硬件设计
2.1 系统构成
2.1.1 AT89C51单片机简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 〔1〕主要特性: ·与MCS-51 兼容 ·4K字节可编程闪烁存储器 ·寿命:1000写/擦循环 ·数据保存时间:10年 ·全静态工作:0Hz-24Hz ·三级程序存储器锁定
. z
-
·128*8位部RAM ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道
·低功耗的闲置和掉电模式 ·片振荡器和时钟电路
〔2〕管脚说明〔如图1〕: 图1 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 R*D〔串行输入口〕 P3.1 T*D〔串行输出口〕
. z
-
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只有在执行MOV*,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE制止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:/EA保持低电平时,在此期间外部程序存储器
〔0000H-FFFFH〕,不管是否有部程序存储器。注意加密方式1时,/EA将部锁定为RESET;当/EA端保持高电平时,此间部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源〔VPP〕。
*TAL1:反向振荡放大器的输入及部时钟工作电路的输入。 *TAL2:来自反向振荡器的输出。 〔3〕振荡器特性:
*TAL1和*TAL2分别为反向放大器的输入和输出。该反向放大器可以配置为
片振荡器。石晶振荡和瓷振荡均可采用。如采用外部时钟源驱动器件,*TAL2应不接。有余输入至部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的上下电平要求的宽度。
. z
-
〔4〕芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE
管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写\"1〞且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停顿工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的容并且冻结振荡器,制止所用其他芯片功能,直到下一个硬件复位为止。 LED显示器
LED〔Light Emitting Diode〕是发光二极管英文名称的缩写。LED显示器是由发光二极管构成的,所以在显示器前面冠以\"LED〞。LED显示器在单片机系统中的应用非常普遍。 (1)LED显示器的构造:
常用的LED显示器为8段。每一个段对应1个发光二极管,这种显示器有共阳极和共阴极两种:共阴极LED显示器的发光二极管的阴极连接在一起,通常此公共阴极接地。当*个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极LED显示器的发光二极管的阳极连接在一起,通常此公共阳极接正电压,当*个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。为了使LED显示器显示不同的符号或数字,就要把不同段的发光二极管点亮,这样就要为LED提供代码,因为这些代码可使LED相应的段发光,从而显示不同字型,因此该代码称为段码。
7段发光二极管,再加上1个小数点位,共计8位。因此提供应LED显示器的段码正好是1B。各段与字节中各位对应关系如下列图2:
8段LED构造及外形 代码位 D7 显示位 dp D6 g D5 f D4 E D3 d D2 c D1 b D0 a 图2 (2) LED显示器工作原理
由N个LED显示块可以拼接成N位的LED显示器。如图是
. z
-
LED显示器的构造原理图3。
N个LED显示器有N个位选线和8*N位 根段码线。 段码线控制显示字符的字型,而位选线为各个LED显示块中 各段的公共端,它控制该LED显示位的亮或暗。LED显示器 有静态显示和动态显示两种。 键盘
键盘在单片机应用系统中能实现向单片机输入数据,传送命 图3 令等功能,是人工干预单片机的主要手段。 〔1〕键盘输入的特点
键盘实质上是一级按键开关的集合。通常,键盘开关利用了机械触点的合、断作用。
〔2〕按键确实认
键的闭合与否,反映在行线输出电压上就呈现高电平或低电平,如果高电平表示键断开,低电平则表示键闭合,通过对行线电平上下状态的检测,便可确认按键按下与否。为了确保CPU对一次按键动作只确认一次按键有效,必须消除抖动的影响。
〔3〕如何消除按键的抖动
采用软件来消除按键抖动的根本思想是:在一次检测到有键按下时,该键所对应的行线为低电平,执行一段延时10MS的子程序后,确认该行线电平是不否仍为低电平,如果仍为低电平,则确认为该行确实有键按下。当按键松开时,行线的低电平变为高电平,执行一段延时10MS的子程序后,检测该行线为高电平,说明按键确实已经松开。 系统复位电路的设计
智能系统一般应有手动或上电复位电路。复位电路的实现通常有两种方式:RC复位电路和专用µP监控电路。前者实现简单,本钱低,但复位可靠性相对较低;后者本钱较高,但复位可靠性高,尤其是高可靠重复复位。对于复位要求高、并对电源电压进展监视的场合,大多采用这种方式。
本次课程设计采用了上电按钮电平复位电路,如图四 图4 时钟电路模块
时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的根
. z
-
底。在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。为到达振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个22P的独石电容,两晶振引脚分别连到*TAL1和*TAL2振荡脉冲输入引脚。具体连接图如图5所示:
图5 2.2硬件电路端口分配
(1)硬件电路中用P1.0-P1.7控制按键,其中P1.0-P1.3扫描行,P1.4-P1.7扫描列。
(2)用P0.0-P0.7,P2.0-P2.7控制LED,其中P0.0-P0.7控制七段a,b,c,d,e,f,g,用P2.0-P2.7为数码管位选信号。
(3)用,P2.0-P2.2作为LCD的RS,R/W,E的控制信号。用P0.0-P0.7作为LCD的D0-D7的控制信号。 (4) 用P3.7口控制蜂鸣器。
(5) 电路为12MHZ晶振频率工作,起振电路中C1,C2均为30pf。
3 软件设计
3.1 主模块的设计
主模块是系统软件的主框架。构造化程序设计一般有\"自上而下〞和\"自下而上〞两种方式,\"自上而下〞法的核心就是主框架的构建。它的合理与否关系到程序最终的功能的多少和性能的好坏。本系统的主模块的程序框图如下列图6所示:
6 主程序图开3.2 外部中断源系统设计 在本设计中中断源是采用外部中断0方式,其入口地址是0003H。其中断初始化变量及LCD接响应级别最高。 〔1〕定时器/计数器 初始化数字器T0,定时器工作方式存放器TMOD用于选择定时器/计数器的工作方式和工作模式。其格式如下表一: TMOD7 D6 LCDD5 显示英文欢送字D4 D3 D2 D1 D0 . z N -
D GATE M1 M0 GATE M1 M0 T1方式字段 表一 下面对TMOD各位进展说明: 门控位—GATE
工作方式选择位—M1、M0 M1 0 0 1 1 M0 0 1 0 1 T0方式字段 工作方式 方式0,为13位定时器/计数器 方式1,为16位定时器/计数器 方式2,8位的常数自动重新装载的定时器/计数器 方式3,仅适用于T0 表二
其中,在本设计中采用方式1的16位定时器/计数器。
—计数器模式和定时器模式选择位 =0,为定时器模式。 =1,为计数模式。
定时器/计数器控制存放器TCON,其格式如下: TCON D7 TF1 D6 TR1 D5 TF0 D4 TR0 D3 IE1 D2 IT1 D1 IE0 D0 ITO 表三 其各位的功能如下:
TF1、TF0—计数溢出标志位当计数器溢出时,该位置1。 TR1、TR0—计数运行控制位 3.3 根本显示模块设计
根本显示模块设计的重点是由显示代码取得相应的段码,显示段码数据的并行发送,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要
. z
-
经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进展时和分的校对,片选的灵活性好。
程序流程如图7所示。
将16进制时分秒数据转化为BCD显示代码 关显示以免显示抖动 通过串口将时分秒数据传入数码管 翻开显示 图 7 3.4 系统初始化程序
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
LJMP TT0 ORG 001BH LJMP T1INT ORG 1000H MAIN: 液晶初始化 MOV SP,*70H MOV P0,*01H ;清屏 CALL ENABLE
MOV P0,*38H ;8位,2行显示 LCALL ENABLE
4 Proteus软件仿真
本次课程设计所采用的程序调试软件为wave6000集成调试软件,所采用的仿真软件为protus 6 professional软件。 本次试验的效果图如下所示:
按键功能说明:1~A:十首歌曲C:上一首歌曲D:下一首歌曲 E:歌曲暂停F:开机画面
开机时有英文欢送提示字符,播放时显示歌曲序号〔或名称〕可通过功能键选择乐曲,暂停,播放。选作容:显示乐曲播放时间或剩余时间.构造化软件程序的调试一般可以将重点放在分模块调试上,统调是最后一环。软件调试可以采
. z
-
取离线调试和在线调试两种方式。前者不需要硬件仿真器,可借助于软件仿真器即可;后者一般需要仿真系统的支持。本次课设,采用wave6000集成调试软件来调试程序,通过各个模块程序的单步或跟踪调试,使程序逐渐趋于正确,最后统调程序。
仿真局部采用protus 6 professional软件,此软件功能强大且操作较为简单,可以很容易的实现各种系统的仿真。
首先翻开protus 6 professional软件,在元件库中找到要选用的所有元件,然后进展原理图的绘制;绘制好后再选择wave6000已经编译好的*.he*文件,选择运行,观察显示结果,根据显示的结果和课设的要求再修改程序,再运行查,直到满足要求。
5课程设计体会
单片机是一门应用性很强的学科,课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。虽然在做课程设计以前已经系统的把单片机课本认真的学习了一下,但是在刚拿到设计任务书时还是有点一头雾水,不知道该从哪里下手。令人欣慰的是经过一周的学习,虽然过程很艰辛,但是总算实现了定时闹钟的功能,所有的努力都很值得。这一周的大局部时间都在研究程序怎么处理,在这个过程中加深了我对汇编语言命令的应用,而且也更加了解到软硬件配套的重要性。
在设计的过程中不仅稳固了以前所学过的知识,加深了我对所学知识的理解,而且学到了很多在书本上所没有的知识。通过这次课程设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。
总之,通过这次课程设计不仅使我稳固了本课程所学的根本知识,还使我具有了撰写科研报告的初步训练能力,我相信这些能力在我以后的工作或者是再学习中一定会起到不小的作用,一切的辛苦和困难都是值得的。
参考文献
[2] 刚,周群.电子系统设计与实践.电子工业.2004:18-23 341-347 118-122 [3] 何立民.单片机高级教程〔应用与设计〕.:航空航天大学,2000年.53-98 [4] 涂时亮,友德.单片微机控制技术.清华大学.1994:86-87 146-147
[5] \"融会贯穿 Protel99电路设计\" 弘道工作室 人民交通出版设,2000. [6]\"单片机原理及接口技术实验\" 朱定华 北方交通大学2002.11
. z
-
附1:源程序代码
RS BIT P2.0;定义液晶显示端口标号
RW BIT P2.1 LCALL ENABLE 存初始化 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 LJMP TT0 ORG 001BH LJMP T1INT ORG 1000H MAIN: 液晶初始化 MOV SP,*70H MOV P0,*01H ;清屏 CALL ENABLE
MOV P0,*38H ;8位,2行显示 LCALL ENABLE
MOV P0,*0FH ;屏显ON,光标ON,闪烁ON LCALL ENABLE
MOV P0,*06H ;计数地址加1,显示幕ON
. zLCALL INITIL KEY1: LCALL KEY
LCALL MODD LJMP KEY1键盘扫描 KEY: NOP NOP LCALL KS JNZ K1
有按键转到K1
LCALL KAIJI LCALL SOP *N: 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
-
ACC.4,L1为1跳转,第一行无按键 MOV A,*00H LJMP LK L1: ACC.5,L2 MOV A,*04H DJNZ R3,MM1 POP ACC MOV R0,A RET NE*T1:
INC R4 ;列扫描 LJMP LK L2: ACC.6,L3 MOV A,*08H LJMP LK L3:
ACC.7,NE*T1 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
. z假设同时有其他 MOV A,R2 JNB ACC.3,N2 LJMP N1 N2: LJMP KEY N1: RL A MOV R2,A LJMP K3 KS:
MOV A,*0F0H 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:
;判断P1口
;
NOP NOP
DJNZ R6,DL3 DJNZ R5,DL2 CLR RS0
RET 30H-37H初值为零 INITIL: MOV R3,*08H MOV R0,*30H M1:
MOV R0,*00H INC R0
DJNZ R3,M1 RET MODD: MOV P0,*8EH
LCALL ENABLE MOV A,37H
MOV DPTR,*TABLE3 MOVC A,A+DPTR LCALL WRITE2 RET开机提示字 KAIJI: MOV A,37H CJNE A,*0FH,DFF
MOV P0,*80H ;设光标地址 LCALL ENABLE
MOV DPTR,*TABLE1;写数据 LCALL WRITE1 DFF:
RET按键值播放歌曲
. z-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
. z-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 ENABLE CALL WRITE2 MOV A,B ADD A,*30H
MOV P0,*0C9H ;显示小时个位 CALL ENABLE CALL WRITE2 MOV A,*3AH
-
MOV P0,*0DH ;显示冒号 CALL ENABLE CALL WRITE2 MOV A,MIN MOV P0,*0C0H ;设光标地址 CALL ENABLE
MOV DPTR,*TABLE2;写数据 CALL WRITE1 MOV B,*10 DIV AB ADD A,*30H
MOV P0,*0CBH CALL ENABLE CALL WRITE2 MOV A,B ADD A,*30H
MOV P0,*0CCH CALL ENABLE CALL WRITE2 MOV A,*3AH
MOV P0,*0CDH CALL ENABLE CALL WRITE2 MOV A,SEC MOV B,*10 DIV AB ADD A,*30H
MOV P0,*0CEH CALL ENABLE CALL WRITE2 MOV A,B ADD A,*30H
MOV P0,*0CFH CALL ENABLE CALL WRITE2
. z;显示分十位;显示分个位;显示冒号 ;显示秒十位 显示秒个位 RET写指令 ENABLE: CLR RS CLR RW CLR E LCALL DELAY 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'WEL 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
. zMOV 40H,*00H NE*T20: 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 NE*T20 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 NE*T20 TTM13:
CJNE A,*0CH,TTM14 MOV A,52H INC A MOV 52H,A
. z-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定时器中断子程序0 TT0: PUSH ACC PUSH PSW MOV TL0,20H MOV TH0,21H CPL P3.7 POP PSW POP ACC
RETI定时器中断子程序1 T1INT:
MOV TH1, *3cH
-
MOV TL1, *0b0H DJNZ L50MS,*4
MOV L50MS,*20每秒种时钟刷新秒显示一次 SECSET: MOV A,SEC MOV P0,*0CBH ;显示分十位 lCALL ENABLE lCALL WRITE2 MOV A,B ADD A,*30H
MOV P0,*0CCH ;显示分个位 MOV B,*10 DIV AB ADD A,*30H
MOV P0,*0CEH lCALL ENABLE lCALL WRITE2 MOV A,B ADD A,*30H
MOV P0,*0CFH lCALL ENABLE lCALL WRITE2 MOV A,SEC INC A MOV SEC,A *RL A,*60 *4: JNZ OUT MINSET:
MOV SEC,*00H MOV A,MIN INC A MOV MIN,A MOV B,*10 DIV AB ADD A,*30H
. z;显示秒十位 显示秒个位 lCALL ENABLE lCALL WRITE2 MOV A,MIN MOV B,*3 MUL AB MOV B,*100 DIV AB MOV R2,A MOV A,*10 *CH A,B DIV AB MOV A,MIN *RL A,*60 JNZ OUT HOUSET: MOV MIN,*00H MOV A,HOU MOV B,*10 DIV AB
ADD A,*30H 化为ASIIC码
MOV P0,*0C8H CALL ENABLE CALL WRITE2 MOV A,B
;将BCD吗转 ;显示小时十位
;
ADD A,*30H
MOV P0,*0C9H ;显示小时个位 CALL ENABLE CALL WRITE2 MOV A,HOU INC A MOV HOU,A *RL 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
. z-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
. z-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
34H,22H,12H,02H,92H,12H,92H 32H,32H,22H,12H,02H,92H,12H
32H,32H,22H,12H,02H,92H,12HDB 54H,44H,32H,22H,12H,92H
0123R2R3R4R5R6R7R1k1k1k1k1k1k1<<数字音乐盒>>456789AB
U119. z XTAL1DB 00
18END
,92H
,22H
CDEFXTAL2DB
DB
DB
9RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD73938373635343332+5V32H,32H,22H,12H,02H,92H,12H
32H,32H,22H,12H,02H,92H,12H
32H,32H,22H,12H,02H,92H,12H
293031PSENALEEAP2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A152122232425262728-
DB 54H,44H,34H,12H,22H
DB 04H,94H,88H,04H
12345678DB 04H,94H,88H
P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD1011121314151617附2:系统原理图
AT89C52,92H
,92H
,22H DB DB DB
因篇幅问题不能全部显示,请点此查看更多更全内容