数字音乐盒
单片机课程设计
数字音乐盒
摘要
本设计是基于51系列的单片机进行的数字音乐盒的设计,可以完成演奏音乐,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间,也可在LED显示歌曲号。
音乐盒的设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机, 输入采用4×4矩阵键盘,显示采用七段显示数码管LED。软件方面从
音乐盒功能、流程图设计,再到程序的编写进行系统设计。
设计的结果能够完成演奏乐曲(最少三首乐曲,每首不少于30秒),开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称),可通过功能键选择乐曲,暂停,播放。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写等,没有一定的基础就不可能很好的实现。
具体实现功能:
1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而
演奏乐曲(最少三首乐曲,每首不少于30秒)。
2(采用LCD显示信息。
3(开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)。
4(可通过功能键选择乐曲,暂停,播放。
5(显示乐曲播放时间或剩余时间。
目录
1概述 ....................................................................................................................... 3
1.1单片机总体功能简介................................................................................... 4
1.2输入键盘功能综述 ...................................................................................... 4
1.3 输出LED显示功能综述 ............................................................................ 4 2系统总体
及硬件设计 .................................................................................... 7
2.1系统设计要求 .............................................................................................. 7
2.2总体设计方案 .............................................................................................. 7
2.3系统硬件设计 .............................................................................................. 7 3 软件设计 .............................................................................................................. 9
3.1矩阵键盘设计 .............................................................................................. 9
3.2音乐盒模块设计 ........................................................................................ 10 4 Proteus软件仿真 ................................................................................................. 11
4.1Proteus ISIS简介 ......................................................................................... 11
4.2Proteus运行流程 ......................................................................................... 11
4.3Proteus功能仿真 ........................................................................................ 12 5课程设计体会 ...................................................................................................... 13 参考文献 ................................................................................................................ 14 附1 源程序代码 .................................................................................................... 15 附2 系统原理图 .................................................................................................... 32
1
1概述
单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
1.1单片机总体功能简介
单片机是在工业测控需要背景下而产生的,在一个应用系统中。按照测控系统的特点和要求,单片机的应用可分为单机应用和多机应用两大类。我们这次要完成的单片机课程设计就是它的单机应用,下面在介绍一下单片机在单机应用领域内的主要内容。
(1)智能产品
单片机与传统机械产品相结合,使传统机械产品结构简化,控制智能化,购成新一代机电一体化产品。目前,利用单片机构成的智能产品已广泛应用于家用电器、办公设备、数控机床、纺织机械、工业设备等行业。
(2)智能仪表
目前,各种传感器、变送器、控制仪表已普遍采用单片机应用系统。它集测量、处理、控制功能于一体,具有各种智能化功能,如存储、数据处理、查找、判断、联网和语音等功能。
2
单片机构成的智能仪表,能使仪表具有数字化、智能化、多功能化、综合化、柔性化等优点,赋予测量仪表以崭新的面貌,使传统的仪器、仪表发生根本性的变革,它代表了仪器仪表的发展趋势。
(3)测控技术
用单片机构成的各种工业控制系统中的数据采集系统具有工作稳定可靠、抗干扰能力强的优点,如炉温恒温控制系统、电镀生产自动控制系统等。
(4)智能接口
在计算机系统,特别是较大型的工业测控系统中,除通用外部设备外,还由许多外部通信、采集、多路分配管理、驱动控制等接口。这些外部设备与接口如果完全由主机进行管理,势必会造成主机负担过重,运行速度降低,接口的管理水平也不可能提高。如果用单片机进行接口的控制与管理,单片机与主机可并行加工处理,可以大量降低接口的通信密度,极大的提高了接口控制管理水平。在一些通用计算机外部设备上,已实现了单片机的键盘管理、打印机控制、绘图仪控制、硬盘驱动控制等。
1.2输入键盘功能综述
由于16个按键比较多,所以采用4×4矩阵编码键盘,在键盘设计总需要进行程序消抖,因为当按键按下时会有3,4MS的抖动时间,程序扫描速度非常快,如果没有消除抖动程序的,程序会检测到多次按键按下。
1.3 输出LED显示功能综述
在单片机应用系统中常用的显示器有发光二极管数码显示器LED和液晶显示器LCD。LED显示器具有耗电少、成本低廉、配置简单灵活,抗干扰性强等优点,但显示内容有限,且不能显示图形,因而其灵活性受到限制;LCD显示器除了具有LED特点外还能显示图形,但其驱动比较复杂。
本系统设计的计算器输出部分采用LED,因为音乐盒是8位显示,所以用8位7段LED动态显示,利用软件节省硬件外部资源。
1.4 AT89C51 单片机的主要特性
AT89C51单片机的主要工作特性是:内含4KB的可编程闪烁存储器,擦写次数1000次;内含128字节的RAM, 具有32根可编程I/O线,具有2个16位可编程定时器,具有6个中断源、5个中断矢量、2级优先权的中断结构,具有1个全双工的可编程串行通信接口,具有1个数据指针DPTR,两种低功耗工作模式,即空闲模式和掉电模式,具有可编的3级程序锁定位,
1.5 单片机引脚及功能
3
U11939XTAL1P0.0/AD0 38P0.1/AD137P0.2/AD21836XTAL2P0.3/AD3 35P0.4/AD434P0.5/AD533 P0.6/AD6932RSTP0.7/AD7
21P2.0/A822P2.1/A923 P2.2/A102924PSENP2.3/A113025ALEP2.4/A12 3126EAP2.5/A1327P2.6/A1428 P2.7/A15
110P1.0P3.0/RXD 211P1.1P3.1/TXD312P1.2P3.2/INT0413P1.3P3.3/INT1 514P1.4P3.4/T0615P1.5P3.5/T1716 P1.6P3.6/WRAT89C51817P1.7P3.7/RD
图1-1单片机引脚
-
AT89C51 单片机采用40引脚的双列直插封装(DIP)形式,其引脚图 如图所示 Vcc:电源电压输入引脚
GND:电源地
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一写“1”时,被定义为高阻输入口。P0口能够用于外部程序数据存储器,它可以被定义为数据/地址的低8位。
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口也可作为AT89C51的一些特殊功能口,如下表所示:
4
表1-2
管脚 备选功能 备注
P3.0 RXD 串行输入口 P3.1 TXD 串行输出口 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只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。
5
2系统总体方案及硬件设计
2.1系统设计要求
音乐盒设计要求: 数字
1.利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)
2(采用LCD显示信息
3(开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)
4(可通过功能键选择乐曲,暂停,播放。
5(选作内容:显示乐曲播放时间或剩余时间
6. 编写程序,用Proteus软件进行仿真。
2.2总体设计方案
根据计算器的输入功能需求,采用4×4矩阵键盘,采用矩阵键盘也是利用软件节省硬件,利用内部ROM,进行循环查询。扬声器可以用一个准I,O口。
6
2.3系统硬件设计
图2-1系统总体硬件图
7
+
图2-2 LED数码显示电路
原理说明:当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。也可在LED显示歌曲号。
(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。
8
3 软件设计 3.1矩阵键盘设计
键盘有两类,一类是编码键盘,即键盘上闭合键的识别由专门硬件来完成;
另一类是非编码键盘,键盘上键入即闭合键的识别由软件来实现。本系统的设计
采用非编码键盘,程序采用扫描方式。
开 始
P3端口初始化
读取P3端口状
态
是否有键按下
延迟10MS
是否有键按下
根据键值执行
图3-1扫描流程图
表3-1键盘示意图
0 1 2 3
4 5 6 7
8 9 A B
C D E F
9
3.2音乐盒模块设计
图3-2控制流程图
附:
按键功能说明:1~A:十首歌曲;C:上一首歌曲;D:下一首歌曲;E:歌曲暂停;F:开机画面
10
4 Proteus软件仿真
4.1Proteus ISIS简介
Proteus ISIS是英国Labcenter它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。
该软件的特点是:
1)全部满足我们提出的单片机软件仿真系统的
,并在同类产品中具(
有明显的优势。
(2)具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统
2的仿真、RS,232动态仿真、I C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(3)目前支持的单片机类型有:ARM7系列、68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
(4)支持大量的存储器和外围芯片。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大 ,可仿真ARM、51、AVR、PIC。
4.2Proteus运行流程
Proteus ISIS的工作界面是一种标准的Windows界面,如图所示。
包括:标
栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。
运行Proteus程序后,进入软件的主界面。通过左侧工具栏中的P(从库中选择元件命令)命令,在Pick Devices 左侧窗口中选择所需元件的关键字,然后放置元件并调整方向和位置以及参数设置,最后进行连线。
4.3Proteus功能仿真
Proteus仿真效果
最后载入hex文件后可以进行模拟仿真,可以全速运行也可以单步调试运行。
11
图4-1系统仿真图
12
5课程设计体会
这次课程设计根据课题要求,复习了这学期所学的单片机内容,通过查询相关的资料,比较全面地了解了51系列单片机的相关知识。根据课程设计的要求和自己通过参考有关资料拟的方案,写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序,达到能够实现所要求的功能的目的。 在写程序时,在每条指令后都写好注释,以便在程序出错的检查过程中可以更容易查找得到。
这次的单片机课程设计重点是理论与实际的相结合,不单单只是书上的一条条分离的指令。通过这次设计让我更系统的了解了个个指令以及单片机的扩展内容,为以后在实际工作中进行相关项目的设计积累了一定地经验。
通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步。
13
参考文献
【1】马忠梅,刘宾,戚军,马岩. 单片机C语言WINDOWS环境编程宝典. 北京:
北京航空航天大学出版社,2003
【2】马忠梅,籍顺心,张凯,马岩.单片机的C语言应用程序设计(第4版)
北京航空航天大学出版社,2007 北京:
【3】何立民. 单片机高级教程( 第1版(北京:北京航空航天大学出版社,2001 【4】赵晓安. MCS-51单片机原理及应用. 天津:天津大学出版社,2001.3 【5】李广第( 单片机基础( 第1版(北京:北京航空航天大学出版社,1999 【6】徐惠民、安德宁( 单片微型计算机原理接口与应用( 第1版( 北京: 北京邮电大学出版社,1996
【7】何立民(单片机与嵌入式系统应用,2002年,第5期:P5~8 【8】夏继强. 单片机实验与实践教程. 北京:北京航空航天大学出版,,2001 【9】陈志强 胡辉. 单片机应用系统设计实践指南. 机械工业出版社,2005 【10】肖洪兵. 单片机应用技术.电子工业出版社,2001
14
附录1 源程序代码
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
MOV P0,#0FH ;屏显on,光标on,闪烁on lCALL ENABLE
MOV P0,#06H ;计数地址加1,显示幕on lCALL ENABLE
;-------------------------------内存初始化 lcall initil ;-------------------------------
key1:
lcall key
lcall modd ljmp key1
;---------------------键盘扫描
15
key:
nop
nop
lcall ks
jnz k1 ;有按键转到K1
lcall kaiji lcall SOP xn:
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
JB ACC.4,L1 ;为1跳转,第一行无按键
mov a,#00h ljmp lk
L1:
jb acc.5,L2 mov a,#04h ljmp lk
L2:
jb acc.6,L3 mov a,#08h ljmp lk
L3:
jb acc.7,next1
mov a,#0ch ;-------------------------------------------------------
lk:
16
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
djnz r3,mm1 pop acc
mov @r0,a RET
;------------------------------------------------------
next1:
inc R4 ;------列扫描 mov a,R2
JNB acc.3,n2 ljmp n1
n2:
ljmp key
n1:
rl a
mov R2,a
ljmp k3
;----------------------------------------------
ks:
mov a,#0f0h ;判断P1口 mov P1,a
nop
nop
17
mov a,P1
cpl a
anl a,#0f0h
RET
;--------------------------------------------------
DELAY1:
SETB RS0
dl:
mov R5,#0ah
dl2:
mov R6,#63
dl3:
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
18
lCALL WRITE2 RET
;--------------------------------------------------
;开机提示字
;-------------------------------------------------
kaiji:
mov a,37h
cjne a,#0fh,DFF
MOV P0,#80H ;设光标地址
lCALL ENABLE
MOV DPTR,#TABLE1;写数据
lCALL WRITE1 DFF:
RET
;----------------------------------------------
;按键值播放歌曲
;----------------------------------------------
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
19
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
20
LCALL MODD
MOV 52H,#HIGH TABLE90 MOV 53H,#LOW TABLE90 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
21
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
MOV P0,#0C0H ;设光标地址 CALL ENABLE
MOV DPTR,#TABLE2;写数据 CALL WRITE1
RET
;*********************************************写指令
ENABLE:
CLR RS
CLR RW
CLR E
LCALL DELAY
22
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'WELCOM HERE',0FEH TABLE2:DB'DFF WB ',0FEH TABLE4:DB 'CAU',0FEH
TABLE3:DB 30H,31H,32H,33h
23
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 MOV 40H,#00H
;---------------------------------------------------------
NEXT20:
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
24
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 NEXT20
;-----------------------------------------------------------
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 NEXT20
TTM13:
CJNE A,#0CH,TTM14
25
MOV A,52H INC A
MOV 52H,A 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
26
;***************************************************
T1INT:
MOV TH1, #3cH MOV TL1, #0b0H DJNZ L50MS,X4 MOV L50MS,#20 ;****************---每秒种时钟刷新秒显示一次
SECSET:
MOV A,SEC
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
XRL A,#60
X4:
JNZ OUT
MINSET:
MOV SEC,#00H ;*************************************每分钟刷新分显示一次
MOV A,MIN
INC A
MOV MIN,A
MOV B,#10
DIV AB
ADD A,#30H
MOV P0,#0CBH ;显示分十位 lCALL ENABLE lCALL WRITE2
27
MOV A,B
ADD A,#30H
MOV P0,#0CCH ;显示分个位 lCALL ENABLE lCALL WRITE2 MOV A,MIN
MOV B,#3
MUL AB
MOV B,#100
DIV AB
MOV R2,A
MOV A,#10
XCH A,B
DIV AB
MOV A,MIN
XRL A,#60
JNZ OUT
HOUSET:
MOV MIN,#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,HOU
INC A
MOV HOU,A
XRL A,#10
JNZ OUT
SJMP OVERFLOW
28
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
;-------------------------------------------------------------------- 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
29
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
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
;-------------------------------------------------------------------
;第三首《看我七十二变》
;-------------------------------------------------------------------
30
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
DB 04H,94H,88H
DB 04H,94H,88H,04H
DB 32H,32H,22H,12H,02H,92H,12H,92H DB 32H,32H,22H,12H,02H,92H,12H,92H DB 32H,32H,22H,12H,02H,92H,12H,22H DB 54H,44H,34H,12H,22H
DB 34H,22H,12H,02H,92H,12H,92H DB 32H,32H,22H,12H,02H,92H,12H,92H DB 32H,32H,22H,12H,02H,92H,12H,22H DB 54H,44H,32H,22H,12H,92H
DB 00
END
31
附录2 系统原理图
32