资源描述
基于单片机的信号发生器设计
代劲
(吉首大学 物理科学与信息工程学院,湖南 吉首 416000)
摘 要
本文介绍一种用AT89C51单片机构成的波形发生器,可产生方波、三角波、正弦波、锯齿波等多种波形,波形的周期可用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑、性能优越等特点。文章给出了源代码,通过仿真测试,其性能指标达到了设计要求。
关键词:单片机;DAC;信号发生器
Design of Signal Generator Based on MCU
Dai Jing
(College of Physics Science and Information Engineering,Jishou University,Jishou,Hunan 416000)
Abstract
This paper introduces a signal generator with MCU AT89C51,which is used to generate electro-wave-forms such as squares、triangles、sines and teeth-saw. The periods of these signals can be changed by programs of MCU AT89C51 and their outputs can be selected to be monopolar or bipolar. This paper provides the original code. And the technical parameter of the signal generator meets the request of the design after the simulation test.
Key words:MCU;DAC;signal generator
Ⅰ
基于单片机的信号发生器 硬件设计
硬件设计
硬件原理框图
硬件原理方框图如图4.1所示。
波形
输出
放大
电路
复位
电路
显示
电路
数/模转
换电路
键盘
电路
单
片
机
图4.1 硬件原理框图
主控电路
AT89C51单处机内部设置两个16位可编程的定时器/计数器T0和T1,它们具有计数器方式和定时器方式两种工作方式及4种工作模式。在波形发生器中,将其作定时器使用,用它来精确地确定波形的两个采样点输出之间的延迟时间。模式1采用的是16位计数器,当T0或T1被允许计数后,从初值开始加计数,最高位产生溢出时向CPU请求中断。
中断系统是使处理器具有对外界异步事件的处理能力而设置的。当中央处理器CPU正在处理某件事的时候外界发生了紧急事件,要求CPU暂停当前的工作,转而去处理这个紧急事件。在波形发生器中,只用到片内定时器/计数器溢出时产生的中断请求,即是在AT89C51输出一个波形采样点信号后,接着启动定时器,在定时器未产生中断之前,AT89C51等待,直到定时器计时结束,产生中断请求,AT89C51响应中断,接着输出下一个采样点信号,如此循环产生所需要的信号波形[6]。
如图4.2所示,AT89C51从P0口接收来自键盘的信号,并通过P2口输出一些控制信号,将其输入到8155的信号控制端,用于控制其信号的输入、输出。如果有键按下,则在读控制端会产生一个读信号,使单片机读入信号。如果有信号输出,则在写控制端产生一个写信号,并将所要输出的信号通过8155的PB口输出,并在数码管上显示出来。
11
图4.2 主控电路图
数/模转换电路
由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。
由图4.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[4]。
图4.3 数模转换电路
12
按键接口电路
图4.4为键盘接口电路的原理图,图中键盘和8155的PA口相连,AT89C51的P0口和8155的D0口相连,AT89C51不断的扫描键盘,看是否有键按下,如有,则根据相应按键作出反应。其中“S0”号键代表方波输出,“S1”号键代表正弦波输出,“S2”号键代表三角波输出。 “S3”号键代表锯齿波输出,“S4”号键为10Hz的频率信号,“S5”号键为100Hz的频率信号,“S6”号键为500Hz的频率信号,“S7”号键为1KHz的频率信号[3]。
时钟电路
8051单片机有两个引脚(XTAL1,XTAL2)用于外接石英晶体和微调电容,从而构成时钟电路,其电路图如图4.5所示。
电容C1、C2对振荡频率有稳定作用,其容量的选择为30pf,振荡器选择频率为12MHz的石英晶体。由于频率较大时,三角波、正弦波、锯齿波中每一点的延时时间为几微秒,故延时时间还要加上指令时间才能获得较大的频率波形[9]。
图4.5 时钟电路
13
显示电路
显示电路是用来显示波形信号的频率,使得整个系统更加合理,从经济的角度出发,所以显示器件采用LED数码管显示器。而且LED数码管是采用共阳极接法,当主控端口输出一个低电平后,与其相对应的数码管即变亮,显示所需数据。其器件模型如图4.6所示。
图4.6 LED显示电路
14
基于单片机的信号发生器 软件设件
基于单片机的信号发生器 软件设件
软件设计
程序流程图
本文中子程序的调用是通过按键的选择来实现,在取得按键相应的键值后,启动计时器和相应的中断服务程序,再直接查询程序中预先设置的数据值,通过转换输出相应的电压,从而形成所需的各种波形。
主程序的流程图如图5.1所示,在程序开始运行之后,首先是对8155进行初始化,之后判断信号频率值,如符合所需的频率,则重置时间常数,并通过显示器显示出来,不符则返回。在中断结束后,还要来判断波形是否符合,如符合,则显示其频率,不符则返回,重新判断。
图5.1 主程序流程图
15
图5.2为各波形子程序的流程图。如图所示,在中断服务子程序开始后,通过判断来确定各种波形的输出,当判断选择的不是方波后,则转向对正弦波的判断,如此反复。如果选择的是方波,则用查表的方法求出相应的数据,并通过D/A转换
器将数据转换成模拟信号,形成所需波形信号。
图5.2 子程序流程图
16
波形仿真
17
基于单片机的信号发生器 软件设计
通过前面的软、硬件设计,整个电路的设计已基本完成,下面将进行正弦波、方波、三角波、锯齿波等波形的仿真与测试。本文中波形信号的仿真是以Proteus 6.5这一款软件为平台,装入波形发生程序,验证硬件电路和程序的正确性。
正弦波的仿真
如图5.3所示,此波形为幅度为5V,频率为500HZ的正弦波,是通过查表转换的方法来实现的。而要实现其他如10HZ、100HZ、1KHZ等频率的波形,则需要调用延时子程序,改变波形发生的时间常数。
图5.3 正弦波仿真图
三角波的仿真
如图5.4所示,此波形为幅度为5V,频率为500HZ的正弦波,是通过查表转换的方法来实现的。通过调用延时子程序,改变波形发生的时间常数,实现10HZ、100HZ、1KHZ等频率的波形。
图5.4 三角波仿真图
锯齿波的仿真
如图5.5所示,此波形为幅度为5V,频率为500HZ的锯齿波,是通过查表转换的方法来实现的。而要实现其他如10HZ、100HZ、1KHZ等频率的波形,则需要调用延时子程序,改变波形发生的时间常数。
方波的仿真
如图5.6所示,此波形为幅度为5V,频率为500HZ的方波,是通过查表转换的方法来实现的。通过调用延时子程序,改变波形发生的时间常数,实现10HZ、100HZ、1KHZ等频率的波形。
图5.6 方波仿真图
18
基于单片机的信号发生器 结束语
结束语
这种基于单片机的信号发生器已经展示出很好的性能,而且有着很高的性价比。此外,它产生的波形与模拟电路的波形相比,波形有着更好的平滑性,其周期性也更加稳定。已经越来越多的应用到各种电子设备当中,给人们的日常生活带来了方便。
在论文中简单介绍了它的用途和发展趋势,根据它的一些基本知识,按照自己的想法设计了一类低频信号发生器,具体包括了设计方案以及相关参数的选取和计算,根据工作基本原理加入了一些相关的辅助电路,并编写了相关的应用程序。有些指标还有待于进一步提高。例如,在精度及其它功能的扩展上还有较大的潜力可以挖掘,这些都有待于我们通过对电路的改进和对元器件的最佳选择来进一步完善。而且由于本人所学知识有限,很多知识点的学习不够深刻,我会在以后的学习中更加踏实、认真的学好各个知识点。
19
基于单片机的信号发生器 参考文献
基于单片机的信号发生器 参考文献
参考文献
[1] 程全.基于AT89C52实现的多种波形发生器的设计[J].周口师范学院学报,2005.22(5):57~58.
[2] 周明德.微型计算机系统原理及应用[M].北京:清华大学出版社,2002.341~364.
[3] 刘乐善.微型计算机接口技术及应用[M].北京:北京航空航天大学出版社,2001.258~264.
[4] 童诗白.模拟电路技术基础[M].北京:高等教育出版社,2000.171~202.
[5] 杜华.任意波形发生器及应用[J].国外电子测量技术,2005.1:38~40.
[6] 张友德.单片微型机原理、应用与实践[M].上海:复旦大学出版社,2004.40~44.
[7] 程朗.基于8051单片机的双通道波形发生器的设计与实现[J].计算机工程与应用,2004.8:100~103.
[8] 张永瑞.电子测量技术基础[M].西安:西安电子科技大学出版社,2006.61~101.
[9] 李叶紫. MCS-51单片机应用教程[M].北京:清华大学出版社,2004.232~238.
[10] 蔡美琴.MCS-51系列单片机系统及其应用[M].北京:高等教育出版社,1988.56~289.
20
基于单片机的信号发生器 致谢
致 谢
本文的研究工作是在杨永东老师指导、帮助和督促下完成的。杨永东老师在该领域有敏锐的感知力以及对其应用价值的洞察力给我留下了深刻的印象。在攻读学士学位四年的学习期间,导师勇于探索、敢于创新的科研精神激励我不断努力进取,在今后的人生旅途上取得成功的宝贵的精神财富。
同时,在学习期间导师为我提供了良好的研究环境和实践条件,并对一些创新性的工作给予了大量的指导与支持。在本文完成之际,谨向为我倾注了大量心血的导师及帮助过我的老师和同学表示最诚挚的感谢和深深的敬意!
21
基于单片机的信号发生器 附 录
基于单片机的信号发生器 附录一
附录一
源程序:
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 指向8155命令字端口地址
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中保存
22
基于单片机的信号发生器 附录一
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
23
基于单片机的信号发生器 附录一
MOV 35H,#00H
LCALL LED1 调显示子程序
MOV TMOD,#00H
MOV TL0,#08H
MOV TH0,#0F6H
AJMP PD
K500H:MOV 30H,#00H 显示500Hz
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#05H
MOV 34H,#00H
MOV 35H,#00H
LCALL LED1 调显示子程序
MOV TMOD,#00H
MOV TL0,#01H
MOV TH0,#0FEH
AJMP PD
K1K:MOV 30H,#00H 显示1KHz
MOV 31H,#00H
24
基于单片机的信号发生器 附录一
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信号
25
基于单片机的信号发生器 附录一
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
26
基于单片机的信号发生器 附录一
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
27
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, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
TAB2: DB 80H, 83H, 86H, 89H, 8DH,90H,93H,96H
DB 99H, 9CH, 9FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB 0B1H, 0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
DB 0C7H, 0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H
DB 0DAH, 0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H
DB 0EAH, 0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H
DB 0F6H, 0F7H, 0F8H,0F9H, 0FAH, 0FBH,0FCH,0FDH
DB 0FDH, 0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH
DB 0FFH, 0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH
DB 0FDH, 0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H
DB 0F5H, 0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH
DB 0E9H, 0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH
DB 0D8H, 0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H
DB 0C5H, 0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H
DB 0AEH, 0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H
DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80H
DB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69H
28
DB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51H
DB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AH
DB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27H
DB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16H
DB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AH
DB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H
DB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00H
DB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02H
DB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H
DB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15H
DB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25H
DB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38H
DB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EH
DB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66H
DB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80H
TAB3: DB 00H,02H,04H,06H,08H,0AH,0CH,0EH
DB 10H,12H,14H,16H,18H,1AH,1CH,1EH
DB 20H,22H,24H,26H,28H,2AH,2CH,2EH
DB 30H,32H,34H,36H,38H,3AH,3CH,3EH
DB 40H,42H,44H,46H,48H,4AH,4CH,4EH
DB 50H,52H,54H,56H,58H,5AH,5CH,5EH
DB 60H,62H,64H,66H,68H,6AH,6CH,6EH
DB 70H,72H,74H,76H,78H,7AH,7CH,7EH
DB 80H,82H,84H,86H,88H,8AH,8CH,8EH
DB 0A0H,0A2H,0A4H,0A6H,0A8H,0AAH,0ACH,0AEH
DB 0B0H,0B2H,0B4H,0B6H,0B8H,0BAH,0BCH,0BEH
DB 0C0H,0C2H,0C4H,0C6H,0C8H,0CAH,0CCH,0CEH
DB 0D0H,0D2H,0D4H,0D6H,0D8H,0DAH,0DCH,0DEH
DB 0E0H,0E2H,0E4H,0E6H,0E8H,0EAH,0ECH,0EEH
DB 0F0H,0F2H,0F4H,0F6H,0F8H,0FAH,0FCH,0FEH
DB 0FFH,0FEH,0FCH,0FAH,0F8H,0F6H,0F4H,0F2H
DB 0F0H,0EEH,0ECH,0EAH,0E8H,0E6H,0E4H,0E2H
29
DB 0E0H,0DEH,0DCH,0DAH,0D8H,0D6H,0D4H,0D2H
DB 0D0H,0CEH,0CCH,0CAH,0C8H,0C6H,0C4H,0C2H
DB 0C0H,0BEH,0BCH,0BAH,0B8H,0B6H,0B4H,0B2H
DB 0B0H,0AEH,0ACH,0AAH,0A8H,0A6H,0A4H,0A
展开阅读全文