第一篇:比赛计时器单片机课程设计
单片微型计算机原理与接口技术课程设计报告
班级:电0802-2班
姓名:
学号:
指导老师:
日期:2010/6/27~2010/7/2
一、课程设计要求............................................................................3
二、硬件原理图................................................................................4 1.通用板原理图...........................................................................4 2.本实验所用到的原件原理图...................................................4
三、实物图........................................................................................5
四、硬件系统设计说明....................................................................5
五、软件流程图................................................................................6 1.主程序流程图...........................................................................6 2.串行口中断流程图...................................................................7
六、程序代码....................................................................................7
七、软件清单..................................................................................10
八、个人感想体会..........................................................................10
九、参考文献..................................................................................12
一、课程设计要求
比赛计时器
4个数码管,其中2个用于记录A、B队的分数,每队1个数码管,记分范围0~9分,另外2个数码管用来记录赛程时间,单位为秒。
采用倒计时方式。即比赛前将时间设置好,比赛开始时启动计时,直至计时到零为止。计时范围为0~99秒,倒计时时间由按键设置。
要求:
1.有设置时间、启动、暂停、交换场地等功能。2.能记录整个赛程的比赛时间,并能修改比赛时间
3.能随时刷新甲、乙两队在整个过程中的比分
4.中场交换比赛场地时,能交换甲、乙两队比分的位置
5.比赛结束时,能发出报警声
本机地址为04H,当接到上位机发的04H时,则回发04H 当接到上位机发的AAH时,则将比分发出
二、硬件原理图
1.通用板原理图
2.本实验所用到的原件原理图
三、实物图
四、硬件系统设计说明
P1口用作数据输出口,P3.2用作起、停按键的输入口,P2.1用作中场交换场地按键的输入口,P2.2和P2.3用作更改时间和分数按键的输入口,P2.2和P2.3是分时复用的,没开始时用于改时间,开始后用于改分数,P1.6、P1.7、P2.5、P2.6分别用于四个数码管的片选,P3.6用于蜂鸣器的选通位。
五、软件流程图
1.主程序流程图 2.串行口中断流程图
六、程序代码
ST EQU P2.4
JH EQU P2.3
AS EQU P2.2
BG EQU P2.1
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP IN0
ORG 000BH
AJMP TIME0
ORG 0013H
AJMP IN1
ORG 001BH
AJMP TIME1
ORG 0023H
ORG 0050H MAIN:
;初始化
MOV SP,#60H
SETB P3;关蜂鸣器
CLR PSW.3
CLR PSW.4
CLR TR0
MOV TMOD,#21H;T1方式2,T0方式1
MOV R5,#3;时间初值
MOV TH0,#3CH
MOV TL0,#0B0H
MOV TL1,#0F3H
MOV TH1,#0F3H
CLR 00H
MOV R6,#0;A的分
MOV R7,#0;B的分
MOV SCON,#0D8H;方式3
MOV PCON,#00H
MOV R3,#0
SETB ET0
SETB ET1
SETB EX0
SETB IT0
SETB TR1
SETB ES
SETB EA
LP:
CJNE R5,#0,CONT
CLR TR0
CLR ET0
CLR P3.6 CONT:
JB 00H,ST0
JNB AS,JIA
JNB BG,JIAN
JNB JH,JH0
AJMP LP ST0:
JNB JH,JH0
AJMP LPAB JH0:
MOV A,R6
XCH A,R7
MOV R6,A
JNB JH,$
AJMP LP
LPAB:
JNB AS,AJ;改分
JNB BG,BJ
AJMP LP AJ:
INC R6
JNB AS,$
AJMP LPAB
BJ:
INC R7
JNB BG,$
AJMP LPAB
;改时间
CJNE R5,#99,LL
LJMP LP LL:
INC R5
JNB AS,$
SJMP LP JIAN:
CJNE R5,#0,LL1
LJMP LP
LL1:
DEC R5
JNB BG,$
SJMP LP
;改时间
XIANSHI:MOV P0,30H
SETB P2.6
ACALL DELY
CLR P2.6
MOV P0,31H
SETB P2.5
ACALL DELY
CLR P2.5
MOV P0,32H
SETB P1.6
ACALL DELY
CLR P1.6
MOV P0,33H
SETB P1.7
ACALL DELY
CLR P1.7
RET
CONVE:
MOV 30H,#00;转换成十进制
MOV 31H,#00
MOV 32H,#00
MOV 33H,#00
MOV A,R5
MOV B,#10
DIV AB
MOV 31H,A
MOV 30H,B
MOV A,R6
MOV B,#10
DIV AB
MOV 32H,B
MOV A,R7
MOV B,#10
DIV AB
MOV 33H,B
RET
XING: MOV R2,#4
MOV R1,#30H LP2:
MOV A,@R1
MOV DPTR,#LAMPMAP
MOVC A,@A+DPTR
MOV @R1,A
INC R1
DJNZ R2,LP2
RET
DELY:
SETB PSW.4
MOV R7,#255 GY:
MOV R6,#50
DJNZ R6, $
DEC R7
CJNE R7,#1,GY
DJNZ R7,$
DJNZ R5,$
CLR PSW.4
RET
DELY2: SETB PSW.3
MOV R2,#100
MOV R4,#100
D1: MOV R3,#100
DJNZ R3,$
DJNZ R2,D1
CLR PSW.3
RET
TIME0: MOV TH0,#3CH;定时50MS
MOV TL0,#0B0H
INC R3
CJNE R3,#20,L3
DEC R5
MOV R3,#00H
L3:
RETI
TIME1: PUSH ACC
PUSH PSW
ACALL CONVE
ACALL XING
ACALL XIANSHI
POP PSW
RETI
IN0: JNB 00H,KAI
CLR 00H;GUAN
CLR TR0
;CLR P3.6
RETI
KAI:
SETB 00H;KAI
SETB TR0
RETI
IN1:MOV A,#04H
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#14H
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,#02H
MOV SBUF,A
JNB TI,$
CLR TI
RETI
TX:
JNB RI,FS JB 01H,WAIT1;通讯
MOV A,SBUF
CJNE A,#04H,QQ
MOV A,#04H;是04H
MOV SBUF,A
JNB TI,$
CLR TI
SETB 01H
CLR RI
QQ:
RETI
WAIT1: CLR 01H
MOV A,SBUF
CJNE A,#0AAH,RET1
MOV A,R7;是AAH
ANL A,#0FH
MOV R7,A
MOV A,R6
ANL A,#0FH
SWAP A
ADD A,R7
MOV SBUF,A
JNB TI,$
CLR TI
CLR RI RET1:
RETI
FS:
CLR TI
RETI
LAMPMAP:DB 7EH 48H 3DH 6DH DB 4BH 67H 77H 4CH 7FH 6FH
END
七、软件清单
1.WAVE6000 2.PROTEL 3.PROTUS 4.STC-ISP-V483
八、个人感想体会
通过一周的单片机课程设计,是我对51单片机有了更深的认识,将课上所学习的理论知识应用于实践,是自己得到了很大的提高。
在编程阶段,明显感觉到程序比平时的实验复杂得多,虽然在编程过程中遇到了好多困难,比如:按键的去抖动问题,显示的实时性,按键的数量不够用等等,不过还好平时有些基础,在经过自己的认真思考和团队合作,最后把这些问题都克服了。思路没有问题,然后是proteus绘制原理图。由于以前没用过proteus开始找器件的时候有点费劲,我们组在proteus仿真中刚开始并没有成功,在经过反复修改后,终于仿真成功了,后来我们就直接把程序输入到片子中,又发现了一些在仿真中没有出现的问题:可能是由于电路的连接错误,字型码和书上介绍的不一致,于是我们又自己编的字型码,这使我深刻的认识到实践与理论之间的巨大差距。
由于所使用的板子只有5个按键,而实现的功能需要开始1个、暂停1个、加分2个、加时间2个、交换场地1个,总共要7个按键,后来把开始暂停合用1个,加时间和加分分时复用2个,交换场地1个,合起来总共4个按键就足够了。
由于程序比较长,用到的寄存器比较多,我们就切换了寄存器组,然而在开始并没有抬高堆栈,导致显示出现错误,后来把堆栈抬高到60H,解决了这个问题。
另一个问题就是显示的实时性,刚开始时我们把显示程序放在了主程序,可是在进入完定时器中断后,主程序就不知道已经执行到哪里了,导致时间显示时快时慢;后来我们把显示程序放在了定时器中断中,解决了实时性问题。
短暂的5天小学期单片机课程设计,锻炼了自己的动手和思考,以及团队的合作能力,也查缺了自己在知识学习中所存在的漏洞。激发了学习的热情。最后要十分感谢邓老师的辛勤指导!
九、参考文献
1.高峰,《单片微型计算机原理及接口技术》,科学出版社
2.李学理,《基于proteus的8051单片机实例教程》,电子工业出版社
第二篇:单片机课程设计
单片机课程设计
课题: 简易电子琴设计
学
院:
电气与信息工程学院 专
业:
电子信息工程 姓
名:
李琳琳 学
号:
093411106
指导老师:
田巍
河南城建学院
2014年
01 月
01 日
第三篇:单片机课程设计
课 程 设 计
设计题目: 基于单片机的8*8点阵显示数字设计
学生姓名: 指导教师: 二级学院: 专
业: 班
级: 学
号:
目 录
摘要„„„„„„„„„„„„„„„„„„„„„„„„„„Ⅱ 1 方案选择及总体设计„„„„„„„„„„„„„„„„„„„1 1.1方案确定„„„„„„„„„„„„„„„„„„„„„1 1.1.1功能要求„„„„„„„„„„„„„„„„„„„„1 1.1.2方案确定„„„„„„„„„„„„„„„„„„„„1 1.2器件选择„„„„„„„„„„„„„„„„„„„„„1 2 控制系统设计„„„„„„„„„„„„„„„„„„„„„„2 2.1 控制系统硬件设计„„„„„„„„„„„„„„„„„2 2.1.1整体模块设计„„„„„„„„„„„„„„„„„„2 2.1.2单片机AT89C51„„„„„„„„„„„„„„„„„2 2.1.3单片机最小系统设计„„„„„„„„„„„„„„„5 2.1.3.1晶振电路设计„„„„„„„„„„„„„„„„„5 2.1.3.2复位电路设计„„„„„„„„„„„„„„„„„5 2.1.4驱动电路设计„„„„„„„„„„„„„„„„„„6 2.1.5LED点阵显示设计„„„„„„„„„„„„„„„„9 2.2控制系统软件设计„„„„„„„„„„„„„„„„„11 2.2.1软件设计思想„„„„„„„„„„„„„„„„„„11 2.2.2主程序流程图„„„„„„„„„„„„„„„„„„11 2.2.3子程序流程图„„„„„„„„„„„„„„„„„„13 3 系统仿真及调试„„„„„„„„„„„„„„„„„„„„14 3.1系统调试„„„„„„„„„„„„„„„„„„„„„14 3.2系统仿真„„„„„„„„„„„„„„„„„„„„„14 3.2.1protrus软件仿真„„„„„„„„„„„„„„„„14 3.2.2程序„„„„„„„„„„„„„„„„„„„„„„14 总结„„„„„„„„„„„„„„„„„„„„„„„„„^„17 参考文献„„„„„„„„„„„„„„„„„„„„„„„„18
I
摘 要
现在市场上各类基于LED的显示屏较多,但大部分产品为单一模式的LED显示屏,其在显示内容的更换及显示屏的重组等方面都存在不便之处。但随着信息化社会的迅速发展,LED显示屏正在向显示内容丰富、信息更改方便等方面发展。因此制作一款多功能的LED广告显示屏是非常有意义地。
LED驱动显示采用动态扫描方法,动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。以8×8点阵为例,把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第1行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定的时间,然后熄灭;再送出第2行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;第8行之后,又重新燃亮第1行,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。
本次课程设计的题目为8×8点阵数字显示,设计的任务为使用单片机控制8×8的点阵显示0到9的数字,不仅显示清晰,并且每经过一定时间,显示的数字加一,从0 到 9 循环。以AT89C51单片机为核心,采用串行传输、动态扫描技术,制作一款模块化LED多功能显示屏。
在资料收集方面,主要是参考了《51单片机原理及应用—基于Keil C与Proteus》一书,结合了一些网络资料,以及一些集成块的使用说明书。
在整个工作过程中,根据收集来的资料绘制出大概的原理图,然后通过Proteus仿真,与此同时运用Keil 编程,用Keil 与Proteus进行联调,调试成功后确定了原理图和控制程序。
II
第一章 方案选择及总体设计
1.1 方案确定
1.1.1 功能要求
1、采用STC-51单片机作为微处理器。
2、设计一个8×8点阵LED数码字符显示器。
3、在目测条件下LED显示屏各点亮度均匀、充足、稳定、清晰无串扰。
4、动态显示“0——9”几个字符。
1.1.2 方案确定
采用ST89C51单片机作为微处理器,将共阳极二极管用共阴型接法连接成8×8点阵LED数码字符阵列,通过程序控制,采用动态显示,建立字符库“0——9”。
1.2 器件选择
微处理器采用ST89C51系列单片机,ST89C51单片机是这几年在我国非常流行的单片机,是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)高性能单片机,可擦除只读存储器可以反复擦除100次,具有低功耗、高性能的特点。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
第二章 控制系统设计
2.1控制系统硬件设计
2.1.1整体模块设计
本设计行、列驱动电路,显示器电路,运用单片机的智能化,系统的将每个功能电路模块连接在一起,总体结构设计如图2-1所示。
点阵显示器行驱动电路PC上位机单片机8×8点阵LED显示器电路点阵显示器列驱动电路
图2-1 硬件系统框图
此次需要实现的功能是利用一个ST89C51,一个8×8LED点阵,动态显示“0——9”10个字,采用PC上位机驱动显示电路。
2.1.2 单片机AT89C51 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产, 兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机能提供许多高性价比的应用场合,可灵活应用于各种控制领域。
AT89C51单片机引脚图如图2-2所示。
图2-2 AT89C51引脚图
AT89C51管脚说明: VCC:供电电压。GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写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口管脚
备选功能: 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:
来自反向振荡器的输出。
2.1.3 单片机最小系统设计
单片机的最小系统是能够让单片机工作的最小硬件电路。除了单片机外,最小系统还包括复位电路和时钟电路。
复位电路:单片机的复位电路接在复位信号RST上,复位电路用于将单片机内部电路的状态恢复到初始值。需要复位时按下按钮即可。
时钟电路:时钟电路为单片机工作提供基本时钟。时钟电路中包含一个晶体振荡器,简称晶振,频率范围是1.2~12MHz。晶体振荡频率越高,系统的时钟频率也越高,单片机的运行速度也就越快
ST89C51单片机最小系统电路由复位电路、晶振电路两部分组成。2.1.3.1 晶振电路设计
ST89C52单片机芯片内部设有一个由反向放大器构成的振荡器,XTAL1和XTAL2分别为振荡电路的的输入端和输出端,时钟可有内部或外部生成,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就会产生自激振荡。系统采用的定时元件为石英晶体和电容组成的并联谐振回路。晶振频率采用12MHZ,C1、C2的电容值取30pF,电容的大小起频率微调的作用。晶振电路图如图2-3所示。
C1XTAL130pFC2XTAL230pF图2-3 晶振电路图
X112MHZ
2.1.3.2 复位电路设计
ST89C51单片机在启动运行时或者出现死机时需要复位,使CPU以及其他功能部件处于一个确定的初始状态,并从这个状态开始工作。单片机有多种复位方式,常用的复位操作有上电复位和手动复位方式。本设计采用最简单的上电复位方式,电路如图2-4所示。上电复位是通过外部复位电路的电容充电来实现的,复位电路产生的复位信号(高电平有效)由RST引脚送入到内部的复位电路,对ST89C51单片机进行复位,复位信号要持续两个机器周期(24个时钟周期)以上,才能使ST89C51单片机可靠复位。当上电时,C1相当于短路,有时碰到干扰时会造成错误复位,可在复位端加个去耦电容,可以取得很好的效果。
ST89C51单片机复位电路如下图所示:
VCCAT89C51VCCC510MF/25VRSTR94.7KVSSR24.7KVSSRSTR1C10MF/25VS5 RSTVCCAT89C51VCC
图2-4 上电复位电路图
图2-5 按键电平复位电路图
复位电路工作原理:
上电瞬间RST引脚的电位与VCC等电位,RST引脚为高电平,随着电容C5充电电流的减少,RST引脚的电位不断下降,可以保持RST引脚在为高电平的时间内完成复位操作。
当单片机已在运行当中时,按下复位键S5后再松开,也能使RST引脚为一段时间的高电平,从而实现ST89C51单片机复位。
2.1.4 驱动电路设计
驱动电路图如图2-6所示。
图2-6 驱动电路图
74LS245引脚图如图2-7所示。
图2-7 74LS245引脚图
引出端符号: A A总线端
B B总线端
/G 三态允许端(低电平有效)DIR 方向控制端
74LS245是用来驱动LED或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。
如果用89C51的P0口输出到数码管,那就要考虑到数码管的亮度以及P0口带负载的能力,当89C51单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。选用74LS245提高驱动能力。P0口的输出经过74LS245提高驱动后,输出到数码管显示电路。
工作原理:
当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)DIR=“1”,信号由A向B传输;(发送)当CE为高电平时,A、B均为高阻态。
正向点亮一颗LED,至少也要10~20mA,若电流不够大,则LED不够大。而不管是ST89C51的I/O口,还是TTL、CMOS的输出端,其高态输出电流都不是很高,不过1~2mA而已。因此很难直接高态驱动LED,这时候就需要额外的驱动电路,通常有共阳型与共阴型LED阵列驱动电路,本设计才用共阴型高态扫描信号驱动电路。
共阴型LED阵列驱动电路采用高态扫描,也就是任何时间只有一个高态信号,其它则为低态。一行扫描完成后,再把高态信号转化到近邻的其他行,扫描信号接用一个反向驱动器,ST89C51本身内置一个反向驱动器,本设计将ST89C51作为点矩阵显示控制系统的控制核心,通过点矩阵实时显示并移动字符。
单片机的串口与行驱动器相连,用来发送显示数据信息。P3口与LED阵列的行引脚相连,送出数据、地址以及系统控制信号。输出低态时,最大可吸取0.5A,即500mA,若每个LED取30mA,7个LED同时点亮,需要210mA,完全满足LED点亮的基本条件。
所要显示的信号送入74LS245芯片,然后连接到LED阵列的列阵脚。对于高态的显示信号,将可提供其所连接LED的驱动电流,而这个驱动电流经过LED到输出端,形成正向回路,即可点亮该LED。其中每个晶体管任何时间只需负
责驱动一个LED,所以选择30mA射极电流的晶体管。驱动电路如图2-6所示。
2.1.5 LED点阵显示设计
本设计采用ATMEL公司的AT89C51作矩阵显示控制系统控制核心,12MHZ晶振,88点阵共阳LED显示器。其中,P0口作为字符数据输出口,P3口为字符显示扫描输出口,第31脚(EA)接电源,改变电阻(270×8)的大小可改变显示字符的亮度,驱动用74LS245芯片。
本设计LED矩阵显示器电路选用8×8点阵模块,系统由单片机控制。LED显示屏是将发光二极管按行按列布置的,在扫描驱动方式下可以按行扫描按列控制,也可以按列扫描按行控制。本文就是使用1块8×8点阵,采用按列扫描按行控制控制方式,扫描顺序自左向右,以满足数字显示的要求。8×8点阵LED结构如图2-8所示。
8×8点阵LEDabcdefgh12345678
图2-8 LED数码显示管
8×8 点阵LED的工作原理:LED点阵的显示方式是按显示编码的顺序,一行一行地显示。对于共阳型的点阵来说,当某一点所在的行对应高电平“1”并且其所在的列对应低电平“0”的时候,这一点就会被点亮。将每一行的显示时间进行一定的延时,由于人的视觉暂留现象,就会感觉到8行LED是在同时显示的。若显示的时间太短,则亮度不够,若显示的时间太长,将会感觉到闪烁。图2-9为8×8点阵LED外观及引脚图,其等效电路如图2-10所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴。一个8×8点阵是由64个发光二极管按规律组成的,如图2-10所示。图中,行接高电平,列接低电平,发光二极管导通发光。
图2-9 8×8点阵LED外观及引脚图
图2-10 8×8点阵LED等效电路
8×8点阵数字显示的编码原理: 8×8点阵数字显示主要应用行扫描动态显示的方法实现,如图2-11所示,将行线依次置零,一次对列线编码,有红色填充部分为1,无填充部分为0。
图2-11 8×8点阵数字显示的编码原理
如此可得到“0”的编码为{0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00},同理可得到:
{0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00}
//1 {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}
//2 {0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00}
//3 {0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00}
//4 {0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00}
//5 {0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00}
//6 {0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00}
//7 {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}
//8 {0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00}
//9 2.2控制系统软件设计
2.2.1 软件设计思想
主程序先进行设置中断,并启动,再进行键盘扫描载入“0——9”字型,然后判断一组字型是否扫描完,按不同情况进行循环调用子程序。进入子程序后,首先设置相应的程序,反复调用显示子程序,并在显示过程中反复调用键盘扫描子程序进行延时,判断是否退出相应的方式显示子程序。设计过程中,能很好得提高按键响应速度。
2.2.2 主程序流程图
主程序首先设置并启动T0中断,然后调用初始化程序,为后面程序要用到的数据调入,并清零一些用到的数据单元,然后载入“0——9”字型,进行扫描。图2-12为主程序流程图。
图2-12 主程序流程图
2.2.3 子程序流程图(定时中断服务程序)
图11 子程序流程图(定时中断服务程序)
第三章 系统仿真及调试
3.1系统调试
根据硬件电路图核对了元器件的型号、极性,安装是否正确,检查硬件电路连线是否与电路原理图一致,检查电路元器件是否都已经连接好。
通电后,用示波器检测单片机的复位和晶振电路是否有复位信号和振荡信号。
3.2 系统仿真
3.2.1 proteus软件仿真
使用proteus原理及仿真如图3-1所示。
如图3-1 proteus原理及仿真图
3.2.2 程序
#include
{ 0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, 0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,//0 //1 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,//2 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,//3 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,//4 0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, 0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, 0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00
};uchar i=0,t=0,Num_Index;//主程序 void main(){ P3=0x80;
Num_Index=0;
//从0开始显示
TMOD=0x00;
//T0方式0 TH0=(8192-2000)/32;//2ms定时
TL0=(8192-2000)%32;IE=0x82;
//允许T0中断
TR0=1;
//启动T0 while(1);}
//T0中断函数
void LED_Screen_Display()interrupt 1 { TH0=(8192-2000)/32;
//恢复初值
TL0=(8192-2000)%32;P0=0xff;
//输出位码和段码
P0=~Table_of_Digits[Num_Index*8+i];P3=_crol_(P3,1);
//P3循环向左一位 //5 //6 //7
//8 //9
}
if(++i==8)i=0;if(++t==250){
} t=0;
//每屏一个数字由8个字节构成 //每个数字刷新显示一段时间
if(++Num_Index==10)Num_Index=0;//显示下一个数字
总结
经过单片机的课程设计,我有了很大的收获。
首先,就是让我加深了对单片机的掌握和理解与应用,知道单片机到底是怎样控制点阵,怎样应用在生活中的。并且让我懂得了要善于思考,追求严谨,认真解决问题,才会有更多的收获。
然后,提高了通过查阅资料解决问题的能力。通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,了解了LED的现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点,明确了研究目标。并且通过对单片机资料的查阅和应用,更进一步增加了对单片机知识的理解和运用能力。并证实了自己的思路:“查资料→思考总结→运用→找出差错,再查资料和向别人询问→再次运用”的正确性。
最后,本系统能够完成设计任务,能够显示数字0-9,并且显示也较为稳定清晰。本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。在本次课程设计中,主要使用了Proteus和Keil等软件进行硬件电路和控制程序的设计,加深了对这些软件的了解。感到Proteus对电子专业的同学来说是一个很有用的软件。总体来说这次的课程设计很成功,达到了预想的目的:学到了知识,提高了能力,完成了任务。
参考文献
[1] 张靖武,周灵彬 《单片机系统的PROTEUS设计与仿真》北京 电子工业出版社 [2] 吴金戌,沈庆阳,郭庭吉 《8051单片机实践与应用》北京 清华大学出版社 [3] 李群芳,肖看 《单片机原理、接口及应用》北京 清华大学出版社
[4] 张毅刚,彭喜元等 《新编MCS-51单片机应用设计 》黑龙江 哈尔滨工业大学出版社 [5] 李朝青,刘艳玲编著 《单片机原理及接口技术》北京 航空航天大学出版社
第四篇:单片机课程设计
基于单片机的火灾智能报警控制系统的设计
前言
在各种灾害中,火灾是最经常、最普通地威胁公众安全和社会发展的灾害之一。人类能够对火进行利用和控制,是文明进步的一个重要标志。火,给人类带文明进步、光明和温暖。但是,失去控制的火,就给人类造成灾害。据统计,我国 70 年代火灾年平均损失不到 2.5 亿元,80 年代火灾年平均损失不到
3.2 亿元。进入 90 年代,特别是 1993 年以来,火灾造成的直接财产损失上升到年均十几亿元,年均死亡 2000 多人。2010年上海静安区高层住宅着火,导致58人死亡,70余人受伤。2014年1月云南香格里拉大火,烧毁房屋100多栋,直接经济损失1亿多元人民币。火灾事件经常发生,防止火灾事故关系到人民群众的生命财产安全和社会和谐稳定。现在各种电子产品的普及,再加上人们防火意识的不强,这些都给火灾的发生带来了巨大的安全隐患。
对于火灾最关键的问题在于预防,目前防火报警系统趋于智能化、自动化,灵敏程度也越来越高。在这种背景下,基于单片机的火灾智能报警控制系统能突显出其巨大的优越性。目前,国内大多数偏重于商场、宾馆、高级写字楼、大型仓库等大型火灾报警系统的研发和设计。本系统侧重于小型火灾智能报警系统的设计,可在火灾发生初期检测到并且报警,还能够实时显示温度和烟雾浓度。
第五篇:单片机课程设计
《单片机技术》课程设计说明书
音乐盒
院、部:电气与信息工程学院 学生姓名:刘亮 指导教师:凌云职称讲师 专业:电子信息工程 班级:电子1302班 学
号:1330340220 完成时间: 2016年1月11日
摘要
音乐盒起始于中世纪欧洲,当时为使教会的钟塔报时,而将大小的钟表上装置机械设备,被称为可发出声音的组钟。
本次的课题主要分为数码管显示模块、供电模块、按键模块、发声模块、复位电路和AT89S52单片机。数码管显示模块采用共阳极数码管,通过P0口控制,实现歌曲序号的显示;供电模块采用+5V供电;按键通过P3口控制,实现歌曲播放顺序的调换和暂停播放功能;扬声器由P3.1口控制,实现歌曲播放。
主要的工作过程是通过按键控制下一首和上一首播放以及暂停和播放,同时有数码管显示当前正在播放的歌曲序号,扬声器播放出音乐。
此次设计主要用到PROTEUS、KEIL编程和AD作图软件。用PROTEUS画出原理图,用KEIL编写程序,将程序导入原理图中进行仿真。最后用AD画出PCB图,打印图纸进行腐蚀焊接。将程序下载到单片机中,利用I/O口产生方波,驱动扬声器,发出音调,从而演奏乐曲。
关键词:扬声器;AT89S52单片机;I/0口
目 录
背景意义、任务要求及设计原理、框图··························1 1.1 背景意义···············································1 1.2 任务要求···············································1 1.3 设计原理···············································1 1.4 设计框图···············································1 2 硬件系统····················································3 2.1 数码管模块··············································3 2.2 键盘模块················································3 2.3 复位电路················································3 2.4 蜂鸣器模块··············································4 3 软件系统·····················································5 3.1 主程序介绍及流程图······································5 3.2 各个模块及功能介绍······································6 3.2.1 定时器模块········································6 3.2.2 延时模块··········································6 3.2.3 中断模块··········································7 3.2.4 数码管显示模块 ···································9 4 电路仿真和程序检测··········································10 5 实物制作及调试··············································11 结束语 ····························································12 参考文献 ··························································13 致 谢· ···························································14 附 录· ···························································15 背景意义、任务要求及设计原理、框图
1.1 背景意义
音乐盒的起源是中世纪欧洲的教会用来钟塔报时,后来,随着工业的发展,逐渐的体积变小,功能变多,不过多数以机械音乐盒为主,这样的音乐盒大部分体积较大音调单一,容易受到外界的影响,而且,代价昂贵。
此次设计的音乐盒,是基于单片机设计制作的电子音乐盒。与传统的相比更加小巧,音质更优美而且可以演奏和弦音乐。单片机音乐盒的动力是+5V的电源,制作简单,可以批量生产,控制功能强大,可以随时的加减歌曲,使用更加的方便而且不易受到外界的影响而音质变坏,另外,可以根据需要,添加流水彩灯等外设更改外观,使音乐盒的功能更加丰富。
1.2 任务要求
此次的设计要求为:设计一个具有特定功能的音乐盒,要求包含软件和硬件两大模块,能够通过按键来选择曲目,切换曲目,显示器来显示曲目编号,能够准确的播放曲目。
1.3 设计原理
本次的设计最主要的在于蜂鸣器的设计,想要蜂鸣器发出不同的音调,通过单片机的定时器产生一定长度的方波,方波脉冲驱动蜂鸣器发声。要产生音频脉冲,只需要算出某一音频的周期,然后取半周期的时间定时。利用定时器计时这半个周期时间,每当计时到之后,就将输出脉冲的I/O反向,然后在重复计时此周期时间再对I/O口反相,就可在I/O口得到此频率的脉冲。如中音DO,频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时1912/2=926。在每计数956次时将I/O口反相,就可以得到中音。
每当有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出曲目。数码管采用共阳极数码管,通过单片机P0口控制,实现曲目序号的显示。功能键盘采用按键开关,通过P3口控制,实现曲目播放顺序的调换和暂停播放功能,蜂鸣器由P3.1口控制,实现音乐播放。
1.4 设计框图
单片机接+5V电源供电,晶振电路负责产生单片机所需要的时钟信号,通过功能键产生外部中断,控制音乐盒的上一曲和下一曲。在由I/O口输出控制蜂鸣器发声。另外可以用复位电路对程序初始化,在程序出错时,重启单片机。具体 的设计框图如图1所示。
图1 总体设计框图
编程设置好定时时间,通过编程器写入AT89S52单片机系统中。由AT89S52单片机的定时器每秒通过P1口控制LED数码管显示,复位信号由按键输入,没按一次,系统恢复原始状态。电源,晶振电路,单片机,功能键,和扬声器部分具体介绍在后面有介绍。硬件系统
2.1 数码管模块
歌曲显示部分用数码管来显示,LED显示器件是通过发光二极管显示字段的器件,该设计采用的是7段数码管,原理是由P0口控制数码管中的7端LED发光二极管,通过单片机给予P0口不同的数值来显示不同的数字。数码管分为共阳极和共阴极两种,共阳极的数码管,当管脚是低电平有效,而阴极的数码管,是管脚高电平有效。这样,单片机给予P0口的数值将会发生差异,也就是说,不同种类的数码管,对应的ASCII码就会不同。本次选用的是共阳极数码管,其引脚如图2所示。
图2 数码管引脚
2.2 键盘模块
本次的键盘模块采用按键开关这样操作简单,辨别容易的开关。用到4个按键开关,分别是复位按键,下一首按键,上一首按键,和暂停按键。上一首按键和下一首按键接单片机的外部中断0,外部中断1。暂停按键接定时器1,复位按键在复位电路中,接单片机RES。
2.3 复位电路
复位电路主要用于初始化程序,当单片机音乐盒发生死机时,用复位电路初始化程序来重启单片机。两个电容,两个电阻和一个复位按键组成,当单片机死机时,按下按键,即可重启,其电路原理图如图3所示。
图3 复位电路原理图
2.4 扬声器模块
扬声器模块最为重要,当单片机输出脉冲经过扬声器时,会是扬声器发声,不过因为设计中用到的元件较多,不能保证通过扬声器的电流足够大,所以要用三极管放大电路来放大电流,这样才能让扬声器正常工作,具体的原理图如图4所示。
图4 扬声器原理图 软件系统
3.1 主程序介绍及流程图
一个系统的正常运行不仅需要硬件的运行,还需要软件系统的支持。同时软件要根据硬件的连接来设计,来配合硬件的工作,例如,本次的设计用到的是P 0口和P3口。所以,设计的时候就要注意,只能用到P0和P3。本次用到的软件设计选用课堂学到的汇编语言。另外用KEIL软件来编写程序,用课堂上学到的中断和循环等来编写程序。
主程序要开始定义音频输出端口,歌曲总数以及每首歌的入口地址;然后对定时器初始化,确定工作方式,赋初值,开放中断启动定时器工作;对音频输出端口初始化;设置音节起始位置和节拍间距,把音节和节拍的入口地址信息存放在固定存储单元中,查询音乐的节拍表;当6首歌曲的节拍查询结束后,音乐播放完毕,程序结束。主程序的清单在附录中,其流程图如图5所示。
图5 主程序流程图
3.2 各个模块及功能介绍 3.2.1 定时器模块
单片机中有两个16位的可编程计数器/定时器,他们具有定时和计数的功能,可用于定时控制,延时,对外部的事件检测和计数。
定时器的核心部件是加一计数器,通过TMOD寄存器可以使定时器工作在定时或者计数,还可以选择工作方式,工作方式关系到后面音调和节拍的调用,因此,要选择合适的工作方式。定时器模块的程序清单见附录。图6为定时程序流程图。
图6 定时器模块流程图
3.2.2 延时模块
此处的延时模块并不是固定的延时程序,而是将节拍表中的接拍数存放在固定的单元中,再将固定单元中的内容送给延时程序中,这样空拍就可以将节拍分开,这样,图7为延时程序流程图。
图7 延时流程图
3.2.3 中断模块
中断模块主要用来进行上一首,下一首和暂停的控制,本次的中断主要用到INT0,INT1和T1三个I/O口。不同的中断有不同的程序。因为单片机中只有两个外部中断,因此,我决定选用定时器1来改变成中断,即应定时器1的F0判断,当F0为1时,为中断。在此仅具体介绍上一曲的功能。下面为流程图介绍。
图8 中断程序流程图
3.2.4 数码管显示模块
本次设计采用的是共阳极的数码管,因此要采用相应的数值来控制数码管的亮灭。另外还要求通过按键在改变曲目顺序的时候改变数码管显示数字。下面为数码管显示模块的流程图。
图9 数码管显示模块流程图 电路仿真和程序检测
仿真图作图用到的是PROTEUS软件,对于这个软件,我们已经相当的熟悉,所以用起来比较顺利,首先将各个元件搜索出来,必须要有单片机最小系统,显示模块,按键模块,发声模块。根据要求,可以画出仿真图。如图10所示。
图10 设计仿真图
将KEIL中写好的程序导入到单片机中,开始检测,首先检测是否能够清晰的播放出音乐,其次通过控制三个按键来检测上一首,下一首和暂停的功能是否实现,观察数码管的数字是否随着按键的变化,通过以上检测,发现程序和仿真完全符合标准,表示仿真和程序检测通过,可以制作实物。
5实物调试
将程序编译好产生.hex文件,通过无需驱动程序将编译好的.hex文件导入到三合一的实验板中,在外边接入三个按键开关来控制上一首,下一首和暂停,调试过程与仿真图的调试过程相同,可以通过按键来控制歌曲的调换和暂停,而且也可以控制数码管按曲目的调换来显示序号。实验成功,实验成品如图11所示。
图11 实物图 11
结束语
首先要感谢凌老师平时的耐心教导,才能让我对单片机这门课程产生兴趣,在平时的课堂上都会跟着老师的思路走,下课后,努力的完成老师布置的作业是凌老师让我学到了很多关于单片机的知识。
其次对这次制作课程设计的感想。本次的课题是音乐盒,最主要的就是程序设计,经过比较分,决定采用51编程语言,因为平时上课接触最多的就是汇编语言,对于C语言,了解比较少,并不是非常熟练。运用课堂上学到的定时,中断,循环,以及数码管显示和按键程序,可以比较完整的制作出这次的课题。不仅可以复习近平时学到的知识,还会有新的能力学到,比如AD绘图的使用和熟悉。
最后,了解了单片机的方便性,和强大性。这是我们走向岗位的通行证,必须学会单片机,才会在大四毕业的时候找到适合自己的好工作。
参考文献
[1]李广弟.单片机基础[M].第3版.北京:北京航空航天大学出版社,2003.06.[2]李全利.单片机原理及应用(C51编程)[M].北京:高等教育出版社,2012.12.[3]楼然苗.51系列单片机设计实例[M].北京:北京航空航天大学出版社,1999.06.[4]李叶紫.单片机应用教程[M].北京:清华大学出版社,2002.01.[5]李光飞.单片机课程设计实例指导[M].北京:北京航空航天大学出版社,2004.09.致
谢
这次的设计可以说是给了我很多,不仅仅是学习上的,更多的是精神上和生活中的
首先要感谢老师的教育,让我学到了这么多的知识,在这段制作单片机课设的时候更是有感触,当听到设计的音乐盒发出声音的时候,第一感觉是好舒畅,因为第一次可以看到自己制作出这样的东西,在这些自豪中,更能感觉到老师对我们的栽培是那么的重要。
还要感谢同学们的帮助,有的时候,自己真的是不懂了,就去问同学,这不仅仅是问问而已,更能加深同学之间的友情,而且还会收获更多的知识,在这样的学习氛围中,收益的是我们大家。所以我要感谢在这次课设里帮助过我的所有同学。
这次的设计给我最大的启发就是,在学习中马虎不得。当你马虎的对待学习,学业也会马虎的对待你,这样吃亏的还是自己,学业本来就是自己的,自己不努力,难道就会白白得来吗?所以以后的学习中不能有一丝的马虎大意,就算是为了自己也要学下去。
附
录
附录A 电路原理图
附录B 电路实物图
附录C 元器件清单
名
称
型
号
个
数
芯片
AT89S52 1 数码管八段2
电容
22µF
电容
33pF
三极管1
电阻
470Ω
电阻
300Ω
电阻
200Ω
电阻
1KΩ LED灯8
下载口
晶振
12MHZ1
按键
排阻8位4
排阻
2位1
短路帽
插针
若干
附录D 程序清单
OUT BIT p3.1
N EQU 6 OUT_NUM EQU P0 ORG 0000H AJMP MAIN ORG 0003H AJMP LAST_SONG ORG 000BH LJMP F_T0 ORG 0013H AJMP NEXT_SONG ORG 001BH AJMP START_PAUSE ORG 0030H MAIN: MOV SP ,#60H MOV DPTR,#TABLE MOV R0 ,#30H MOV R5 ,#00H MOV R6 ,#1 SET_TAB: MOV A,R5 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A ,R5 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A ,R5 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A,R5 MOVC A,@A+DPTR MOV @R0 ,A INC R0 INC R5 INC R6 CJNE R6,#N+1,SET_TAB MOV TMOD ,#61H MOV TH1,#0FFH MOV TL1,#0FFH SETB ET1 SETB ET0 CLR PT0 SETB PT1 SETB IT0 SETB PX0 SETB IT1 SETB PX1 SETB EX1 SETB EX0 SETB EA SETB TR1 SETB OUT CLR F0 MOV 22H ,#01H MOV DPTR,#OUT_TAB MOV A,22H MOVC A,@A+DPTR MOV OUT_NUM,A MOV R7,#00H
START0: MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H,A NEXT:MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR JZ END0 MOV R1,A ANL A,#0FH MOV R2,A MOV A,R1 SWAP A ANL A,#0FH JNZ SING CLR TR0 SJMP SING1 SING:DEC A MOV R3,A RL A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOVC A,@A+DPTR MOV 21H,A MOV TH0,A MOV A,R3 RL A INC A MOVC A,@A+DPTR MOV 20H,A MOV TL0,A SETB TR0 SING1: LCALL DELAY JB F0,FOR AJMP NEXT FOR:CLR TR0 JB F0,$ AJMP NEXT END0: CLR TR0 MOV A,22H CJNE A,#N,WW MOV 22H,#01H MOV R7,#00H MOV OUT_NUM,#11111001B AJMP WWW WW:MOV A,R7 ADD A,#4 MOV R7,A INC 22H CLR EA PUSH DPH PUSH DPL MOV A,22H MOV DPTR,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A POP DPL POP DPH WWW:SETB EA AJMP START0 F_T0:MOV TH0,21H MOV TL0,20H CPL OUT RETI NEXT_SONG: PUSH ACC PUSH DPH PUSH DPL CLR EA MOV A,22H CJNE A,#N,Q MOV R7,#00H MOV 22H,#01H AJMP BACK Q: INC 22H MOV A,R7 ADD A,#4 MOV R7,A BACK: MOV R4,#00H MOV A,22H MOV DPTR,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A MOV B ,R0 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H,A DEC R4 MOV R0,B POP DPL POP DPH POP ACC SETB EA RETI LAST_SONG: PUSH ACC PUSH DPH PUSH DPL CLR EA MOV A,22H CJNE A,#1,QQ MOV 22H,#N MOV B,#4 MOV A,#N-1 MUL AB MOV R7,A AJMP BACK2 QQ: DEC 22H MOV A,R7 SUBB A,#4 MOV R7,A BACK2: MOV R4,#00H MOV A,22H MOV DPTR ,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A MOV B,R0 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0 ,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H ,A DEC R4 MOV R0,B POP DPL POP DPH POP ACC SETB EA
RETI START_PAUSE: CPL F0 JB F0,RETURN SETB TR0 RETURN: RETI DELAY: MOV 27H,26H D2: D3:
MOV 28H,#125 MOV 29H,#248 DJNZ 29H,$ DJNZ 28H,D3 DJNZ 27H,D2 DJNZ R2,DELAY RET OUT_TAB: DB 0CH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH TABLE: DW SONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3,SONG4,TABLE4,SONG5,TABLE5,SONG6,TABLE6 TABLE1: DW 64580,64684,64777,64820,64898,64968,65030 DW 63628,63835,64021,64103,64260,64400,64524 SONG1: DB 04H DB 32H,54H,52H,32H,54H,52H,32H,12H,12H,32H,32H,54H,52H,32H,52H,52H,32H,32H,21H,31H,4H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H DB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32 26
H,52H,54H,32H,34H,31H,21H,12H,24H,34H DB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H DB 22H,0D1H,11H,0E2H,0D2H,0C2H,0C4H,0C4H,32H,52H,52H,32H,62H,05H,61H,54H,31H,52H,31H,12H,31H,32H,54H,52H,32H,52H,52H,32H DB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52H,32H,62H,51H,61H,54H,31H,12H,32H,12H,32H,12H,32H,32H,54H,52H
DB DB DB 32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H 32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,34H,31H,21H,12H,24H,24H DB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H TABLE2: DW 63835,64021,64103,64260,64400,64524,64580,64684,64777 DW 64820,64898,64968,65030,65058,65110,65157,65178 SONG2: DB 02H DB 04H,94H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02H
02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H DB 04H,0C2H,0C2H,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H, 27
DB 0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8H DB 0C8H,0C8H,08H,08H,78H,28H,38H,34H,24H DB 24H,64H,64H,24H,64H,72H,72H,78H,58H,54H,44H,38H,34H,14H,34H,84H,74H,74H,62H,0D8H,78H,28H,38H,34H,24H
DB DB DB
58H,58H,58H,58H,0A8H,0A8H,0A4H,0B4H,0A4H,84H,0A4H, 24H,64H,64H,24H,64H,72H,72H,72H,94H,92H,94H,0A4H,58H,58H,54H,44H 94H,98H,98H,08H 84H,82H,82H,82H,82H,94H,0A2H,94H,92H,82H,74H,72H,74H,72H,72H,72H,72H,92H,91H,91H,94H,54H,74H,94H 02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H 02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H
DB 0A4H,0A2H,0B2H,0B3H,0C4H,0E8H,0D8H DB 0C8H,0C8H,0C8H,08H DB 00H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,TABLE3: DW 64898,64968,65030,65086,65135,65158,65199,64260,64400,64524,64580,64684,64777,64862 SONG3: DB 03H DB 28
04H,04H,0C2H,14H,12H,12H,12H,11H,11H,0C2H,0D1H,0E1H,14H,14H,02H,32H,12H,21H,31H,52H,51H,51H,54H DB 32H,31H,31H,12H,11H,31H,52H,51H,31H,24H,24H,24H,64H,54H,24H,34H,52H,34H,52H,32H,21H,31H,12H,11H,21H,34H,04H DB 52H,51H,0D1H,12H,12H,32H,31H,31H,52H,51H,51H,22H,22H,22H,0D2H,0D1H,0D1H,24H,22H,0C2H,14H,12H,12H,34H,32H,32H,54H,54H,54H,54H DB 12H,11H,31H,52H,51H,51H,64H,54H,32H,31H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H DB 0A2H,0A1H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H,0C4H,14H,0C4H,14H,14H,04H DB 04H,04H,04H,04H DB 00H TABLE4: DW 64260,64400,64524,64580 ,64684,64777,64280,64898,64968,65030,65058,65110,65157,65178,65217 SONG4: DB 04H
DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H 29
DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 0C4H,0B4H,04H DB 00H DB 82H,01H,81H,94H,84H TABLE5: DW 64021,64103,64260,64400 ,64524,64580,64684,64777,64820,64898,64968,65030,64934 SONG5:
DB 05H DB 42H,82H,82H,82H,84H,02H,72H DB 62H,72H,62H,52H,48H DB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2H DB 12H,0A2H,0D2H,92H,88H DB 82H,0B2H,0B2H,0A2H,84H,02H,72H DB 62H,72H,62H,52H,44H,02H,12H DB 12H,62H,62H,52H,44H,02H,82H DB 72H,62H,52H,32H,48H DB 00H TABLE6: 64021,6103,64260,64400,64524,64580,64624,64777,64820,64898,64958,65030,65058,65110,65157 SONG6: DB 06H
DB 0A2H,0B2H,0D2H,0B2H,0A4H,0B2H,0D2H DB 0B2H,0A2H,82H,72H,88H DB 72H,82H,0A2H,82H,72H,62H,42H,62H DB 0A4H,02H,0B2H,0A4H,84H DB 72H,82H,72H,62H,72H,84H,72H DB 64H,62H,12H,34H,02H,42H DB 38H,38H DW DB 38H,38H 30
DB 44H,02H,32H,44H,64H DB 72H,74H,82H,0A4H,02H,062H DB 0A8H,0A8H DB 0B2H,0B4H,0A2H,84H,82H,72H DB 62H,72H,82H,0A2H,88H DB 72H,74H,62H,42H,32H,32H,62H DB 78H,78H DB 82H,84H,72H,82H,0A2H,84H DB 72H,82H,72H,62H,48H DB 32H,0A2H,82H,0F2H,0A2H,0B2H,82H,72H DB 68H,68H DB 0B2H,0B2H,0B2H,0A2H,82H,84H,02H DB 72H,74H,62H,42H,32H,42H,62H DB 78H,78H DB 0A2H,0B2H,0A2H,72H,82H,84H,82H DB 72H,74H,62H,44H,64H DB 0A8H,0A4H,02H,0A2H DB 0A2H,0B1H,0A1H,82H,0A2H,0B4H,0B2H,0C2H DB 0A2H,0B2H,0A2H,82H,78H DB 84H,72H,62H,44H,02H,62H DB 72H,81H,71H,62H,72H,84H,02H,0A2H DB 0B4H,02H,82H,74H,82H,72H DB 68H,68H DB 00H END DB 72H,82H,72H,62H,72H,84H,0A2H 31