资源描述
南阳师范学院2007届毕业生
毕业论文(设计)
题 目: 基于单片机的函数发射器
学 制: 2年
专 业: 通信工程
完成日期: 2013—05—14
目 录
摘要 (1)
引言 (2)
1单片机简介 (2)
1.1单片机概述 (2)
1.2信号发生器的分类 (2)
1.3研究内容 (3)
2方案的设计与选择 (3)
2.1方案的比较 (3)
2.2设计原理 (4)
2.3设计思想 (4)
2.4设计功能 (5)
3硬件设计 (5)
3.1硬件原理框图 (5)
3.2主控电路 (6)
3.3数/模转换电路 (7)
3.4按键接口电路 (7)
4软件设计 (8)
4.1程序流程图 (8)
4.2电路原理图及源程序 (15)
4.3四种波形的仿真波形图 (26)
4.4程序仿真结果 (28)
4.5实验小结 (29)
6总结 (29)
参考文献 (29)
基于单片机的函数信号发生器的设计与仿真
作 者:
指导老师:
摘要:本系统利用80C51设计一个函数信号发生器,详细说明了其实现过程。本系统使用汇编语言编写,用80C51单片机来实现各模块功能,使用PROTEUS进行仿真。本文描述使用汇编语言和PROTEUS仿真实现函数信号发生器的基本功能,实现了方波、三角波、正弦波、锯齿波,频率可调为10HZ、100HZ、500HZ、1000HZ。本文给出了源程序、各模块的连接图以及仿真图,并做出了详细的分析。
关键词:汇编语言,PROTEUS,函数信号发生器,80C51
Design and simulation of the function signal generator based on MCU
Electronics and Information Science and Technology
Candidate: Liu Pingan
Advisor: Cai Jianhua
Abstract: This system uses 80C51 designed a function signal generator, describes detailedly the implementation process. The system uses the Assembler language, realizing every function uses 80C51, applying PROTEUS to simulate in order to realize the function every modules. This article describes the use of Assembler language and PROTEUS simulation, to achieve the basic functions of the Function signal generator, realized square-wave, triangle wave, sine wave, saw-tooth wave , and the frequency adjustable for 10HZ,100HZ,500HZ,1000HZ . This article gives the original program and the simulating diagram and the combination of all of the modules, gives detail analysis of every simulating diagram as well.
Keywords: Assembler language, PROTEUS, Function signal generator, 80C51
1
引言
在科学研究、工程教育及生产实践中,如工业过程控制、教学实验、机械振动试验、动态分析、材料试验、生物医学等领域,常常需要用到低频信号发生器。函数发生器作为一种通用的电子仪器,在生产、科研、测控、通讯等领域都得到了广泛的应用。但市面上能看到的此类仪器在频率精度、带宽、波形种类及程控方面都已不能满足许多方面实际应用的需求。我们长期使用的信号发生器,大部分是由模拟电路构成的,这类仪器作为信号源,频率可达上百MHz,在高频范围内其频率稳定性高、可调性好。但用于低频信号输出时,它所需要的RC值很大,参数准确度难以保证。而且其体积大,损耗也大。前人研制了采用8031单片机及程序存储器构成的最小系统组成的数字式低频信号发生器,它在低频范围内性能好,但是体积较大,价格较贵。随着大规模集成电路技术的发展,集成度不断提高,使得微型机的速度和性能大为提高,可靠性增加,成本降低。MCS-51就是将具有存储程序、处理数据以及与外设交换信息的功能电路集成在一块芯片中,并符合一定系统结构而构成的单片机。
1单片机特点
1.1单片机概述
随着大规模集成电路技术的发展,中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、(I/O)接口、定时器/计数器和串行通信接口,以及其他一些计算机外围电路等均可集成在一块芯片上构成单片微型计算机,简称为单片机。单片机具有体积小、成本低,性能稳定、使用寿命长等特点。其最明显的优势就是可以嵌入到各种仪器、设备中,这是其他计算机和网络都无法做到的[1,2]。
1.2信号发生器的分类
信号发生器应用广泛,种类繁多,性能各异,分类也不尽一致。按照频率范围分类可以分为:超低频信号发生器、低频信号发生器、视频信号发生器、高频波形发生器、甚高频波形发生器和超高频信号发生器。按照输出波形分类可以分为:正弦信号发生器和非正弦信号发生器,非正弦信号发生器又包括:脉冲信号发生器,函数信号发生器、扫频信号发生器、数字序列波形发生器、图形信号发生器、噪声信号发生器等。按照信号发生器性能指标可以分为一般信号发生器和标准信号发生器。前者指对输出信号的频率、幅度的准确度和稳定度以及波形失真等要求不高的一类信号发生器。后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号发生器[1,2]。
1.3研究内容
本文是做基于单片机的信号发生器的设计,将采用编程的方法来实现三角波、锯齿波、矩形波、正弦波的发生。根据设计的要求,对各种波形的频率进行程序的编写,并将所写程序装入单片机的程序存储器中。在程序运行中,当接收到来自外界的命令,需要输出某种波形时再调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出。
2. 方案的设计与选择
2.1 方案的比较
方案一:采用单片函数发生器(如8038),8038可同时产生正弦波、方波等,而且方法简单易行,用D/A转换器的输出来改变调制电压,也可以实现数控调整频率,但产生信号的频率稳定度不高。
方案二:采用锁相式频率合成器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该方案性能良好,但难以达到输出频率覆盖系数的要求,且电路复杂。
方案三:采用单片机编程的方法来实现。该方法可以通过编程的方法来控制信号波形的频率和幅度,而且在硬件电路不变的情况下,通过改变程序来实现频率的变换。此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做的很高。
鉴于方案一的信号频率不够稳定和方案二的电路复杂,频率覆盖系数难以达标等缺点,所以决定采用方案三的设计方法。它不仅采用软硬件结合,软件控制硬件的方法来实现,使得信号频率的稳定性和精度的准确性得以保证,而且它使用的几种元器件都是常用的元器件,容易得到,且价格便宜,使得硬件的开销达到最省[3,4]。
2.2 设计原理
输出
数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。80C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将80C51再配置键盘及其接口、显示器及其接口、数模转换及波形输出、指示灯及其接口等四部分,即可构成所需的波形发生器,其信号发生器构成原理框图如图2.1所示。
滤波放大
D/A
转换器
接口
电路
89C51
单片机
图2.1 信号发生器原理框图
如图2.1所示80C51是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各样的信号,并从键盘接收数据,进行各种功能的转换。当数字信号经过接口电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。
2.3 设计思想
(1)利用单片机产生方波、正弦波、三角波和锯齿波等信号波形,信号的频率。
(2)将一个周期的信号分离成256个点(按X轴等分),每两点之间的时间间隔为,用单片机的定时器产生,其表示式为: 。
如果单片机的晶振为12MHz,采用定时器方式0,则定时器的初值为:
(2.1)
定时时间常数为:
(2.2)
(2.3)
MOD32表示除32取余数
(3)正弦波的模拟信号是D/A转换器的模拟量输出,其计算公式为:
其中 (2.4)
其中 (2.5)
那么对应着存放在计算机里的这一点的数据为:
(4)一个周期被分离成256个点,对应的四种波形的256个数据存放在以TAB1—TAB4为起始地址的存储器中。
2.4 设计功能
本方案利用8255A扩展8个独立式按键,6个LED显示器。其中“S0”号键代表方波输出,“S1”号键代表正弦波输出,“S2”号键代表三角波输出,“S3” 号键代表锯齿波输出。 “S4”号键为10Hz的频率信号,“S5”号键为100Hz的频率信号,“S6”号键为500Hz的频率信号,“S7”号键为1KHz的频率信号,6个LED显示器输出信号的频率值,选用共阳极LED。利用DAC0832实现频率可调的信号源。频率范围:10Hz,100Hz,500Hz,1000Hz。输出波形幅度为0~5V。
3. 硬件设计
3.1硬件原理框图
波形
输出
放大
电路
显示
电路
数/模转
换电路
键盘
电路
单
片
机
复位
电路
图3.1 硬件原理框图
如图3.1所示80C51单片机为硬件系统的核心,单片机对键盘扫描读入键值确定波形与频率,通过显示电路显示频率值,通过数模转换器放大电路输出波形,通过示波器可以观察波形与频率,复位电路用于系统复位重启。
3.2主控电路
图3.2 主控电路图
如图3.2所示,80C51从P0口接收来自键盘的信号,并通过P2口输出一些控制信号,将其输入到8255A的信号控制端,用于控制其信号的输入、输出。如果有键按下,则在读控制端会产生一个读信号,使单片机读入信号。如果有信号输出,则在写控制端产生一个写信号,并将所要输出的信号通过8255A的PB口输出,并在数码管上显示出来。
3.3 数/模转换电路
由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。
图3.3 数模转换电路
由图3.3可知,DAC0832的片选地址为7FFFH,当P25有效时,若P0口向其送的数据为00H, 则U1 的输出电压为0V。若P0口向其送的数据为0FFH时, 则U1的输出电压为-5V. 故当U1 输出电压为0V时,Vout = - 5V.当输出电压为- 5V时,可得:Vout = +5V,所以输出波形的电压变化范围为- 5V~+ 5V. 故可推得当P0所送数据为80H时,Vout为0V[6]。
公式如右所示:
3.4 按键接口电路
图3.4 按键接口电路
图3.4为键盘接口电路的原理图,图中键盘和8255A的PA口相连,80C51的P0口和8255A的D0口相连,80C51不断的扫描键盘,看是否有键按下,如有,则根据相应按键作出反应。其中“S0”号键代表方波输出,“S1”号键代表正弦波输出,“S2”号键代表三角波输出。 “S3”号键代表锯齿波输出,“S4”号键为10Hz的频率信号,“S5”号键为100Hz的频率信号,“S6”号键为500Hz的频率信号,“S7”号键为1KHz的频率信号[7]
8051单片机有两个引脚(XTAL1,XTAL2)用于外接石英晶体和微调电容,从而构成时钟电路,其电路图如图3.5所示。
图3.5 时钟电路
如图3.5所示电容C1、C2对振荡频率有稳定作用,其容量的选择为30pf,振荡器选择频率为12MHz的石英晶体。由于频率较大时,三角波、正弦波、锯齿波中每一点的延时时间为几微秒,故延时时间还要加上指令时间才能获得较大的频率波形[9]。
图3.6 LED显示电路
如图3.6所示显示电路是用来显示波形信号的频率,使得整个系统更加合理,从经济的角度出发,所以显示器件采用LED数码管显示器。而且LED数码管是采用共阳极接法,当主控端口输出一个低电平后,与其相对应的数码管即变亮,显示所需数据[10]。
4. 软件设计
4.1 程序流程图
本文中子程序的调用是通过按键的选择来实现,在取得按键相应的键值后,启动计时器和相应的中断服务程序,再直接查询程序中预先设置的数据值,通过转换输出相应的电压,从而形成所需的各种波形。按下复位键后系统对8255A初始化,再通过键盘按钮确认频率与波形选择。
首先判断信号频率值,如符合所需的频率,则重置时间常数,并通过显示器显示出来,不符则返回。在中断结束后,还要来判断波形是否符合,如符合,则显示其频率,不符则返回,重新判断。
主程序的流程图:
图4.1 主程序流程图
如图4.1所示,在程序开始运行之后,首先是对8255A进行初始化,之后判断信号频率值,如符合所需的频率,则重置时间常数,并通过显示器显示出来,不符则返回。在中断结束后,还要来判断波形是否符合,如符合,则显示其频率,不符则返回,重新判断。
下面说明主程序流程图的程序实现:
1.开始:
ORG 0000H 程序开始执行,首先觉得跳转到主程序
AJM MAIN
ORG 000BH 定时器0中断入口地址,跳转到中断服务程序
LJMP TC0
ORG 0030H
2.8255A初始化:
MOV DPTR,#7F00H 指向8255A命令字端口地址
MOV A,#06H 设置A口为输入,B口、C口为输出
MOVX @DPTR,A 命令字(8255A初始化)
3.判断信号频率:
MOV DPTR,#7F01H 指向A口地址
MOVX A,@DPTR 读入A口的开关数据
JNB ACC.4,K10H 判断是否“4键”,是则转输出10Hz信号
JNB ACC.5,K100H 判断是否“5键”,是则转输100Hz信号
JNB ACC.6,K500H 判断是否“6键”,是则转输出500Hz信号
JNB ACC.7,K1K 判断是否“7键”,是则转输出1KHz信号
AJMP MAIN 无键按下则返回等待
4.根据频率值置新的时间常数,以显示10HZ 为例,其他原理相同不做论述:
K10H:MOV 30H,#00H 显示10Hz
MOV 31H,#00H 初始化显示缓冲段
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#01H
MOV 35H,#00H
LCALL LED1 调显示子程序
MOV TMOD,#00H 写定时器工作方式
MOV TL0,#15H 置新的时间常数
MOV TH0,#9EH
AJMP PD
5.显示频率值,下面以显示10HZ 为例,其他原理相同不做论述:
K10H:MOV 30H,#00H 显示10Hz
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#01H
MOV 35H,#00H
LCALL LED1 调用显示子程序
6.显示子程序:
LED1: MOV R3,#06H 设置6个LED显示
MOV R2,#01H 选通第一位LED数据
MOV R1,#30H 送显示缓冲区首址
GN1:MOV DPTR,#7F03H 指向C口地址
MOV A,R2 位选通数据送A
MOVX @DPTR,A 位选通数据送C口
RL A 通下一位
MOV R2,A 位选通数据送R2中保存
MOV A, @R1 取键值
MOV DPTR,#TAB 送LED显示软件译码表首址
MOVC A,@A+DPTR 查表求出键值显示的段码
MOV DPTR,#7F02H 指向B口地址
MOV @DPTR,A 段码送显示
LCALL LOOP1 调延时子程序
INC R1 指向下一位显示缓冲区地址
DJNZ R3,GN1 循环显示6个LED
RET
7.中断设置开中断:
GN: SETB TR0 启动定时器
SETB ET0 开定时器0中断
SETB EA 开总中断
8.判断波形:
PD:JNB ACC.0,KE0 “0”号键按下,若是则转方波输出
JNB ACC.1,KE1 “1”号键按下,若是则转正弦方波输出
JNB ACC.2,KE2 “2”号键按下,若是则转三角波输出
JNB ACC.3,KE3 “3”号键按下,若是则转锯齿波输出
LJMP PD 无键按下则返回等待
波形子程序的流程图:
Y
图4.2 子程序流程图
如图4.2所示,在中断服务子程序开始后,通过判断来确定各种波形的输出,当判断选择的不是方波后,则转向对正弦波的判断,如此反复。
下面说明子程序流程图的程序实现:
1.中断服务程序开始:
LJMP TC0 绝对跳转到中断服务程序
2.判断是否是方波及处理方法:
TC0:CJNE R7,#00H,TC1 判断是否是方波,不是则跳转
MOV DPTR,#TAB1 送方波数据表首址
MOV A,R6 发送数据寄存器
MOVC A,@A+DPTR
MOV DPTR,#0AFFFH 指向DAC0832(2)
MOVX @DPTR,A DAC0832(2)输出
MOV A,R6
INC A
MOV R6,A
CJNE A,#32,QL1
MOV R6,#00H
AJMP QL1
3.判断是否是正弦波及处理方法:
TC1:CJNE R7,#01H,TC2 判断是否是正弦波,不是则跳转
MOV DPTR,#TAB2 送正弦波数据表首址
MOV A,R6
MOVC A, @A+DPTR
MOV DPTR,#0AFFFH 指向DAC0832(2)
MOVX @DPTR,A DAC0832(2)输出
MOV A,R6
INC A
MOV R6,A
CJNE A,#32,QL1
MOV R6,#00H
AJMP QL1
4.判断是否是三角波及处理方法:
TC2:CJNE R7,#02H,QL1 判断是否是三角波,不是则跳转
MOV DPTR,#TAB3 送三角波数据表首址
MOV A,R6
MOVC A,@A+DPTR
MOV DPTR,#0AFFFH 指向DAC0832(2)
MOVX @DPTR,A DAC0832(2)输出
MOV A,R6
INC A
MOV R6,A
CJNE A,#32,QL1
MOV R6,#00H
AJMP QL1
5.判断是否是锯齿波及处理方法:
TC3::CJNE R7,#03H,QL1 判断是否是锯齿波,不是则跳转
MOV DPTR,#TAB4 送锯齿波数据表首址
MOV A,R6
MOVC A, @A+DPTR
MOV DPTR,#0AFFFH 指向DAC0832(2)
MOVX @DPTR,A DAC0832(2)输出
MOV A,R6
INC A
MOV R6,A
CJNE A,#32,QL1
MOV R6,#00H
4.2. 电路原理图及源程序
源程序:
ORG 0000H
AJM MAIN
ORG 000BH
LJMP TC0
ORG 0030H
MAIN:MOV DPTR,#9FFFH 指向DAC0832(1)
MOV A,70H
MOVX @DPTR,A DAC0832(1)输出
MOV DPTR,#7F00H 指向8255A命令字端口地址
MOV A,#06H 设置A口为输入,B口、C口为输出
MOVX @DPTR,A 命令字
MOV DPTR,#7F01H 指向A口地址
MOVX A,@DPTR 读入A口的开关数据
JNB ACC.4,K10H 判断是否“4”,是则转输出10Hz信号
JNB ACC.5,K100H 判断是否“5”,是则转输100Hz信号
JNB ACC.6,K500H 判断是否“6”,是则转输出500Hz信号
JNB ACC.7,K1K 判断是否“7”,是则转输出1KHz信号
AJMP MAIN
LED1: MOV R3,#06H 设置6个LED显示
MOV R2,#01H 选通第一位LED数据
MOV R1,#30H 送显示缓冲区首址
GN1:MOV DPTR,#7F03H 指向C口地址
MOV A,R2 位选通数据送A
MOVX @DPTR,A 位选通数据送C口
RL A 选通下一位
MOV R2,A 位选通数据送R2中保存
MOV A, @R1 取键值
MOV DPTR,#TAB 送LED显示软件译码表首址
MOVC A,@A+DPTR 查表求出键值显示的段码
MOV DPTR,#7F02H 指向B口地址
MOV @DPTR,A 段码送显示
LCALL LOOP1 调延时子程序
INC R1 指向下一位显示缓冲区地址
DJNZ R3,GN1 循环显示6个LED
RET
LOOP1:MOV R4,#08H 延时子程序
LOOP:MOV R5,#0A0H
DJNZ R5,$
DJNZ R4,LOOP
RET
K10H:MOV 30H,#00H 显示10Hz
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#01H
MOV 35H,#00H
LCALL LED1 调显示子程序
MOV TMOD,#00H
MOV TL0,#15H
MOV TH0,#9EH
AJMP PD
K100H:MOV 30H,#00H 显示100Hz
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#01H
MOV 34H,#00H
MOV 32H,#01H
MOV 33H,#00H
MOV 34H,#00H
MOV 35H,#00H
LCALL LED1 调显示子程序
MOV TMOD,#00H
MOV TL0,#01H
MOV TH0,#0FFH
PD:JNB ACC.0,KE0 判断是否“0”号键按下,若是则转方波输出
JNB ACC.1,KE1 判断是否“1”号键按下,若是则转正弦方波输出
JNB ACC.2,KE2 判断是否“2”号键按下,若是则转三角波输出
JNB ACC.3,KE3 判断是否“3”号键按下,若是则转锯齿波输出
LJMP PD
KE0:MOV R7,#00H
LCALL LED1 调显示子程序
MOV R6,#00H
AJMP GN
KE1:MOV R7,#02H
LCALL LED1 调显示子程序
MOV R6,#00H
AJMP GN
KE2:MOV R7,#02H
LCALL LED1 调显示子程序
MOV R6,#00H
AJMP GN
KE3:MOV R7,#02H
LCALL LED1 调显示子程序
MOV R6,#00H
GN: SETB TR0
SETB ET0
SETB EA
LOP1:JNB ACC.4,K10H 判断是否“4”号键,若是则转输出10Hz信号
JNB ACC.5,K100H 判断是否“5”号键,若是则转输出100Hz信号
JNB ACC.6,K500H 判断是否“6”号键,若是则转输出500Hz信号
JNB ACC.7,K1K 判断是否“7”号键,若是则转输出1KHz信号
AJMP LOP1
TC0:CJNE R7,#00H,TC1 发送方波程序
MOV DPTR,#TAB1 送方波数据表首址
MOV A,R6 发送数据寄存器
MOVC A,@A+DPTR
MOV DPTR,#0AFFFH 指向DAC0832(2)
MOVX @DPTR,A DAC0832(2)输出
MOV A,R6
INC A
MOV R6,A
CJNE A,#32,QL1
MOV R6,#00H
AJMP QL1
TC1:CJNE R7,#01H,TC2 发送正弦波程序
MOV DPTR,#TAB2 送正弦波数据表首址
MOV A,R6
MOVC A, @A+DPTR
MOV DPTR,#0AFFFH 指向DAC0832(2)
MOVX @DPTR,A DAC0832(2)输出
MOV A,R6
INC A
MOV R6,A
CJNE A,#32,QL1
MOV R6,#00H
AJMP QL1
TC2:CJNE R7,#02H,QL1 发送三角波程序
MOV DPTR,#TAB3 送三角波数据表首址
MOV A,R6
MOVC A,@A+DPTR
MOV DPTR,#0AFFFH 指向DAC0832(2)
MOVX @DPTR,A DAC0832(2)输出
MOV A,R6
INC A
MOV R6,A
CJNE A,#32,QL1
MOV R6,#00H
AJMP QL1
TC3::CJNE R7,#03H,QL1 发送锯齿波程序
MOV DPTR,#TAB4 送锯齿波数据表首址
MOV A,R6
MOVC A, @A+DPTR
MOV DPTR,#0AFFFH 指向DAC0832(2)
MOVX @DPTR,A DAC0832(2)输出
MOV A,R6
INC A
MOV R6,A
CJNE A,#32,QL1
MOV R6,#00H
QL1: RETI
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,82H,0F8H,80H
TAB1: DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH, 0FFH
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H,
展开阅读全文