帮我看看这个16位码里面的图片的编码格式是啥格式的

先在这谢谢大家帮忙    我有一个问题 上次可能怪我没说清楚 在这从新问下各位    我在这就举个实际例子吧    我用数码相机600W相素 拍出照片 输入电脑的图片格式是JPG的  但我要做画册 输出出菲林 一般印刷厂的菲林输出都转成TIF格式  图片  因此我就在想一个问题 图片转还是不转? 我觉得图片本身拍出来的  色彩是最饱和的 虽然是JPG格式 但只要不是图片本身出现质量问题或光线问题需要用PS修改调整 我觉得转了TIF格式多此一举 而且一张色彩饱和的图片 通过软件转换我认为应该是会使颜色出现偏差的    JPG图片输入进CORELDRAW以后把分辨率调整在300DIP转成CMYK格式 应该没什么问题吧?    这里我说的不知道对不对  希望懂这方面问题的高手 指教 谢谢
楼主发言:1次 发图:0张 | 更多
  先在此谢过
  楼主是不是有轻微强迫症啊,这种色彩的差别肉眼可以分辨吗?转不转都无所谓
  哈哈 其实我想想好象应该是没什么问题   只是想把这问题搞清楚
    &[技术]请教JPG转换TIF格式图片的相关疑难望高手进来看看指点下小弟&有点文不对题
  我说点基本的概念
其他的还要LZ自己思考  TIFF是带标签的图像文件,用以保存由色彩通道组成的图像,它的最大优点是图像不受操作平台的限制,无论PC机、MAC机还是UNIX机,都可以通用。它可以保存Alpha通道,可以在一个文件中存储分色数据。TIF 格式支持具有alpha 通道的 CMYK、RGB、Lab、索引颜色和灰度图像以及无 alpha 通道的位图模式图像。  JPE既是一种文件格式,又是一种压缩方法,这种压缩是有损的,损失大小不等,有的小到人眼分辨不出。    我们在PS下看到的TIF格式是16位的  16 位/通道数据的图像提供更细微的颜色差异,但是文件大小可能是8 位 /通道的图像的两倍。但这些是肉眼看不出来的。    简单点说JPG文件的色彩肯定要比TIF差异要大的多,大多少或者少多少要在实际运用中探索  LZ颜色转成CMYK是另一个问题  如果要印刷的话,必须进行分色,分成黄、品红、青、黑四种颜色,这是印刷的要求。这里牵扯到印刷网点的问题,就不多说了。
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)本帖子已过去太久远了,不再提供回复功能。各位前辈帮我看看这是什么意思,有劳了。(急) — 编程爱好者社区
主题:各位前辈帮我看看这是什么意思,有劳了。(急)
[专家分:0]
一个计算机三级的题,源程序prog1.asm已经正确通过汇编生成了prog1.obj,但当LINK&prog1.obj&io.obj时出现了以下文字:&&&&&&&&&&&&&&LINK:error:&fatal&error&LNK1123:&failure&during&conversation&to&COFF:file&invalid&or&corrupt&&&&&&&&&&&&&&&Segment&reference&in&fixup&record请高手指点这是什么意思,该怎么解决啊?小弟先行谢过了。
本帖地址:&
回复列表 (共7个回复)
[专家分:0]
不懂[em15]
[专家分:400]
请用link&prog1+io&试试。
[专家分:0]
多谢指点!
[专家分:1270]
汇编器生成的obj格式不正确,如果你用的是masm32,请使用参数/coff,例:&&&\masm32\bin\ml&/c&/coff&prog1.asm
[专家分:0]
多谢这位仁兄!那是不是在masm32条件下就不能用masm、link等指令了,只要源程序没有错,用ml指令编译和连接格式就正确了?另外,参数/coff具体是什么意思啊?
[专家分:1270]
masm32&是一个汇编工具集,它用的汇编器就是masm,低版本的masm的执行文件可能是masm.exe,高版本的masm程序集中的汇编器执行文件是ml.exe,目前,masm32&7.0,8,0,9,0中用的ml均为6.0以上版本。.obj文件的格式有好多处,32位的链接器需要coff的格式,所以你必须指定参数&/coff,以使生成的目标文件能够被链接成功。如果你使用16位的链器生成dos程序,那么就是不需要这个参数。&&顺便说一下,高版本的ml.exe依然可以汇编成16位dos程序,&当然也可以汇编以得到32位的windows程序。
[专家分:0]
好的,多谢!
您尚未登录,请登录后再回复。查看: 2736|回复: 26
DX帮看看错在哪了(已上图)
用遥控控制下一曲键不能用
;* CD-ROM控制器 Firmware (单LCD显示版本)&&For NEC 4disc changer& & *
;***************************************************************************
;* 标题:CD-ROM控制器 firmware& &&&版本:V3.5ND for 0mini遥控器-18& &*
;* 更新日期: -06.10& && && && && && && &&&*
;* 程序编写: 吴巍(创梦电子工作室)& && && && && && && &*
;* E-mail:& && && && && && && & *
;* 网址: & && && && && && && & *
;* 说明:用89S52控制光驱读音频CD(光驱改成CD机)& && && && && &*
;***************************************************************************
;*注:单片机89C52/S52&&晶振12Mhz& && && && && && && & *
;*本程序搭配CDROM控制器 V3.0版本PCB& && && && && && &&&*
;***************************************************************************
;在CDROM控制器V3.5版本的基础上修改
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CODE_BASE EQU 0031h
STACK_START EQU 85h
DA0 bit p2.5
DA1 bit p2.6
DA2 bit P2.7
ATA_nDIOR& & bit&&p3.7 ;read strobe
ATA_nDIOW& & bit&&p3.6 ;write strobe
ATA_nRESET& &bit&&p3.2
ATA_INTRQ& & bit&&p3.5 ;irq
ATA_DATA_LS& &data p0
ATA_DATA_MS& &data p1
;ir_control_code
ir_code data 5bH
;display ctrl 显示控制
DISP_E bit p3.4& && &;显示控制
;---------------------新版本更改的三根引脚定义,分号后为老版本的引脚定义-------------
RSPIN&&EQU& &P1.62.7
RWPIN&&EQU& &P1.73.0
EPIN&&EQU& &P3.43.1
;display data bus
LCM_D data P0 ; LCM BUS
play_key&&bit p2.0
pause_key bit p2.1
pre_key&&bit p2.2
next_key&&bit p2.3
stop_key&&bit p2.4
packet_size& &data 08h
start_track& &data 09h
end_track& & data 69h
tmp0& && &data 0ah
tmp1& && &data 0bh
tmp2& && &data 0ch
tmp3& && &data 0dh
start_M& &&&data 0eh
start_S& &&&data 0fh
start_F& &&&data 10h
end_M& && &data 11h
end_S& && &data 12h
end_F& && &data 13h
audio_status&&data 14h
current_track&&data 60h
current_M& & data 61h
current_S& & data 62h
current_F& & data 63h
next_track& &data 64h
media_type& &data 67h
volume_1& & data 42h
volume_2& & data 43h
sense_code& &data 45h
show_all& & data 46h
mech_S_0& & data 44h& &&&;mechanism status header 0 byte
mech_s_1& & data 47h& &&&;mechanism status header 1 byte
slot_N& &&&data 48h& &&&;slot number
Slot_DI& &&&data 49h& &&&;slot disc information ,4bit&&0000x x x x,x=1 disc in slot,
slot_Q& &&&data 4ah& &&&;changer slot q'ty
slot_SN& &&&data 2eh
ND_M& & bit 77no disc mark ,slot select use
Play_mk&&bit 78h;play_mk=1 play cd command
Delay_REQ bit 77h;延迟请求,当=1,程序运行时候会执行延迟指令,用在遥控多重按键功能处理上
IR_RPS data 17h
ir_tmp data 33h
VFD_LGH data 34h
aba_t& && &data 16h
abb_m& && &data 18h
abb_s& && &data 19h
Err_cd_code& &data 15h
toc_times& & data 54h& &
pause_da& & data 53h
pause_db& & data 52h
ir_temp data 50h
ir_key data 58h
ir_num data 51h
driver_status data 59h& && && && &
play_mode data 4ch
track_a data 4fh& && & ;循环开始结束曲
track_b data 4dh& && &
a_bit data 65h
b_bit data 66h
DM_code data 68h
d_track data 6ah
d_s data 6ch
d_m data 6dh
n_s data 6eh
n_m data 6fh
E_M data 57h& && & ;要显示用得M S T
E_s data 56h
E_t data 55h
packet_tab& &idata 70h
packet_cmd& &data 70h
packet_1& & data 71h
packet_2& & data 72h
packet_3& & data 73h
packet_4& & data 74h
packet_5& & data 75h
packet_6& & data 76h
packet_7& & data 77h
packet_8& & data 78h
packet_9& & data 79h
packet_10& & data 7ah
packet_11& & data 7bh
packet_12& & data 7ch
packet_13& & data 7dh
packet_14& & data 7eh
packet_15& & data 7fh
ORG 00013H ;外部中断P3.3脚INT1入口地址
org CODE_BASE
;SETB EA ;打开CPU总中断请求
clr ex0 ;关掉其他中断
SETB IT1 ;设定INT1的触发方式为脉冲负边沿触发
SETB EX1 ;打开INT1中断请求 (红外线输入)
mov ir_code,#0ffh
SETB EA ;打开CPU总中断请求
mov VFD_LGH,#00H
clr Delay_REQ
ljmp start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;红外线控制程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLR EA& &&&;暂时关闭CPU的所有中断请求
MOV R6,#8&&;为兼容11.2896MHZ,缩短延迟数 ,原先12M的时候是 10
;SJMP YS0& & ;转到882微秒延时判断子程序
jb p3.3,exit
SBB:& && &;延时882微秒中判断P3.3脚是否出现高电平如果有就退出解码程序
DJNZ R6, SB&&;重复'R6次,目的是检测在8820微秒内如果出现高电平就退出解码程序
& && && &;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
JNB P3.3, $&&;等待高电平避开9毫秒低电平引导脉冲
;ACALL YS2& &;延时4.74毫秒避开4.5毫秒的结果码
call ys3;1000ms
call ys3;1000ms
MOV R4,#2 ;如果在2.5ms出现低电平表示重复按键
MOV R5,#248
jnb P3.3,RP_FUN
DJNZ R5,CK_loop
DJNZ R4,irRP ;
call ys4;600ms
MOV R1,#5CH&&;设定1AH为起始RAM区
JNB P3.3,$& &;等待地址码第一位的高电平信号
call YS1& &;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.3& &;将P3.3引脚此时的电平状态0或1存入C中
JNC UUU& & ;如果为0就跳转到UUU
&&MOV A,@R1& &;将R1中地址的给A
&&RRC A& &&&;将C中的值0或1移入A中的最低位
&&MOV @R1,A& &;将A中的数暂时存放在R1中
&&DJNZ R3,JJJJ ;接收地址码的高8位
&&INC R1& & ;对R1中的值加1,换下一个RAM
&&DJNZ R2,PP&&;接收完16位地址码和8位数据码和8位数据反码,存放在5CH/5DH/5EH/5FH的RAM中
&&mov a,5eh
&&CPL A& &&&;对1AH取反后和1BH比较
&&CJNE A,5fH,EXIT& &;如果不等表示接收数据发生错误,放弃
&&cjne a,#0FFh,ir_如果是0FFH,转入长按键处理
&&;all change_light
&&jnb P3.3,$
&&call RPSKEY;长按遥控处理
&&sjmp Exit
&&;mov ir_code,5fh
&&mov ir_RPS,#00h;重复计数清零
&&call ir_key_code
&&SETB EA ;允许中断
&&RETI ;退出解码子程序
&&mov a,ir_RPS
&&cjne a,#04H,INCPRS;重复按键灵敏度 4次以后,生效
&&mov ir_RPS,#00h
&&call Ir_KPD; 按键第二功能
&&inc ir_RPS
Ir_KPD:; 按键第二功能
mov a,ir_temp
cjne a,#14h,irkp01
mov ir_key,#13h
;call change_light
&&cjne a,#10h,irkp02
&&mov ir_key,#0eh
&&cjne a,#0Fh,irkp03
&&mov ir_key,#0dh
MOV R4,#220
&&JB P3.3,EXIT
&&DJNZ R4,irD0
&&SJMP SBB
MOV R4,#20 ;延时子程序1,精确延时882微秒
MOV R5,#20
DJNZ R4,irD1
MOV R4,#10 ;延时子程序2,精确延时4740微秒
MOV R5,#235
DJNZ R4,irD2
MOV R4,#2;延时程序3,精确延时1000微秒
MOV R5,#248
DJNZ R4,irD3
MOV R4,#20 ;延时子程序1,精确延时600微秒
MOV R5,#12
DJNZ R4,irD4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;不同的遥控器键值修改此处
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IR_key_code:
mov a,5dh& && &&&;判断遥控器种类
;cjne a,#69h,irkc2
;ljmp IR_key_code_69
;cjne a,#0cfh,irkc3
;ljmp IR_key_code_cf
cjne a,#0f7h,irkc4
ljmp IR_key_code_ff
ljmp ir_kcret
IR_key_code_ff:& && && &
mov a,5fh& && && &;定义键值,将接收到红外线原码定义成具体的红外键值,
cjne a,#0a0h,ir_confff2
mov ir_key,#01h& &&&;1& && & 将F6的红外码定义为 1 按键 键值为 #01H
ljmp ir_kcret
ir_confff2:
cjne a,#0e3h,ir_confff3
mov ir_key,#02h& &&&;2& && & 将E2的红外码定义为 2 按键
ljmp ir_kcret
ir_confff3:
cjne a,#0e0h,ir_confff4
mov ir_key,#03h& &&&;3
ljmp ir_kcret
ir_confff4:
cjne a,#0A1h,ir_confff5
mov ir_key,#04h& &&&;4
ljmp ir_kcret
ir_confff5:
cjne a,#0E2h,ir_confff6
mov ir_key,#05h& &&&;5
ljmp ir_kcret
ir_confff6:
cjne a,#0E1h,ir_confff7
mov ir_key,#06h& &&&;6
ljmp ir_kcret
ir_confff7:
cjne a,#0A8h,ir_confff8
mov ir_key,#07h& &&&;7
ljmp ir_kcret
ir_confff8:
cjne a,#0EBh,ir_confff9
mov ir_key,#08h& &&&;8
ljmp ir_kcret
ir_confff9:
cjne a,#0E8h,ir_confff10
mov ir_key,#09h& &&&;9
ljmp ir_kcret
ir_confff10:
cjne a,#0EAh,ir_confff11
mov ir_key,#0ah& &&&;0
ljmp ir_kcret
ir_confff11:
;cjne a,#0B0h,ir_confff12
;mov ir_key,#0bh& &&&;play& & 将AE的红外码定义为 play/stop 按键,键值为#0Bh
;ljmp ir_kcret
ir_confff12:
cjne a,#0B0h,ir_confff13
mov ir_key,#0bh& &&&;pause/resume&&
ljmp ir_kcret
ir_confff13:
;cjne a,#0FAh,ir_confff14
;mov ir_key,#0dh& &&&;forward& &&&将E1的红外码定义为 forward 按键,键值为#0Dh
;ljmp ir_kcret
ir_confff14:
;cjne a,#0f9h,ir_confff15
;mov ir_key,#0eh& &&&;backward
;ljmp ir_kcret
ir_confff15:
cjne a,#0F0h,ir_confff16
mov ir_key,#0fh& &&&;next
setb Delay_REQ
ljmp ir_kcret
ir_confff16:
cjne a,#0F3h,ir_confff17
mov ir_key,#010h& &&&;previous
setb Delay_REQ
ljmp ir_kcret
ir_confff17:
cjne a,#0A9h,ir_confff18
mov ir_key,#11h& &&&;Time
ljmp ir_kcret
ir_confff18:
;cjne a,#0A9h,ir_confff19
;mov ir_key,#12h& &&&;Enter
;ljmp ir_kcret
ir_confff19:
;cjne a,#0b7h,ir_confff20
;mov ir_key,#13h& &&&;setup
;ljmp ir_kcret
ir_confff20:
;cjne a,#0B1h,ir_confff21
;mov ir_key,#14h& &&&ower---Eject
;ljmp ir_kcret
ir_confff21:
cjne a,#0B1h,ir_confff22
mov ir_key,#14h& &&&;ALT
setb Delay_REQ
ljmp ir_kcret
ir_confff22:
;cjne a,#0F4h,ir_confff23
;mov ir_key,#16h& &&&;A-B
;ljmp ir_kcret
ir_confff23:
cjne a,#0E9h,ir_confff24
&&mov ir_key,#17h& &&&;repeat
&&;mov a,play_mode
&&;cjne a,#0BAh,ir_ 循环判断值,ircode=0xABh 表示 A-B循环中
&&;mov ir_key,#11h;在AB循环模式中,这个按键=exit time
ljmp ir_kcret
ir_confff24:
cjne a,#0F1h,ir_confff25
mov ir_key,#18h& &&&;eject
ljmp ir_kcret
ir_confff25:
&&;cjne a,#0B0h,ir_confff26
&&;mov ir_key,#19h& &&&;volume+
&&;ljmp ir_kcret
ir_confff26:
&&;cjne a,#0B1h,ir_confff27
&&;mov ir_key,#1ah& &&&;volume-
&&;ljmp ir_kcret
ir_confff27:
&&cjne a,#0F2h,ir_confff28
&&mov ir_key,#1bh& &&&;Stop
&&ljmp ir_kcret
ir_confff28:
&&mov ir_key,#0ffh
&&ljmp ir_kcret
;=============延时程序============
delay_100000us:
mov&&r7,#0c8h
delay_100000us_l0:
mov&&r6,#0f8h
delay_100000us_l1:
djnz r6,delay_100000us_l1
djnz r7,delay_100000us_l0
delay_10ms:
mov&&r7,#100
delay_10ms_l0:
mov&&r6,#100
delay_10ms_l1:
djnz r6,delay_10ms_l1
djnz r7,delay_10ms_l0
;r5 = seconds
call delay_100000us
call delay_100000us
call delay_100000us
call delay_100000us
call delay_100000us
call delay_100000us
call delay_100000us
call delay_100000us
call delay_100000us
call delay_100000us
djnz r5,delay
mov r5,#01
call delay
;-------------------------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;CD-ROM控制指令源代码;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; atomic routines
; Nb/ code assumes 1us clock cycle (12Mhz xtal clock)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
read_cycle:
mov&&ATA_DATA_LS,#0ffh
mov&&ATA_DATA_MS,#0ffh
clr&&ATA_nDIOR
mov&&a,ATA_DATA_LS
mov&&b,ATA_DATA_MS
setb ATA_nDIOR
read_cycle_ls:
mov&&ATA_DATA_LS,#0ffh
clr&&ATA_nDIOR
mov&&a,ATA_DATA_LS
setb ATA_nDIOR
write_cycle:
mov&&ATA_DATA_LS,a
mov&&ATA_DATA_MS,b
clr&&ATA_nDIOW
setb ATA_nDIOW
write_cycle_ls:
mov&&ATA_DATA_LS,a
clr&&ATA_nDIOW
setb ATA_nDIOW
;setb ATA_INTRQ
jnb&&ATA_INTRQ,wait_irq
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; cylinder register
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
get_cyl_high_register:
;mov&&ATA_ADDR,#b
call read_cycle_ls
get_cyl_low_register:
; mov&&ATA_ADDR,#b
call read_cycle_ls
set_cyl_high_register:
; mov&&ATA_ADDR,#b
call write_cycle_ls
set_cyl_low_register:
;mov&&ATA_ADDR,#b
call write_cycle_ls
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
set_cmd_register:
; mov&&ATA_ADDR,#b
call write_cycle_ls
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; data register
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ret: a = ls b = ms
; mov&&ATA_ADDR,#b
call read_cycle
; a = ls b = ms
; mov&&ATA_ADDR,#b
call write_cycle
set_data_ls:
; mov&&ATA_ADDR,#b
call write_cycle_ls
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; device/head register
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
get_devhead_register:
; mov&&ATA_ADDR,#b
call read_cycle_ls
set_devhead_register:
; mov&&ATA_ADDR,#b
call write_cycle_ls
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; error register
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ERROR_REG_AMNF bit acc.0
ERROR_REG_TK0NF bit acc.1
ERROR_REG_ABRT bit acc.2
ERROR_REG_MCR&&bit acc.3
ERROR_REG_IDNF bit acc.4
ERROR_REG_MC&&bit acc.5
ERROR_REG_UNC&&bit acc.6
ERROR_REG_RES&&bit acc.7
get_error_register:
; mov&&ATA_ADDR,#b
call read_cycle_ls
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sector register's
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
get_sector_c_register:
; mov&&ATA_ADDR,#b
call read_cycle_ls
get_sector_n_register:
; mov&&ATA_ADDR,#b
call read_cycle_ls
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; status register
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STATUS_REG_ERR bit acc.0
STATUS_REG_IDX bit acc.1
STATUS_REG_CORR bit acc.2
STATUS_REG_DRQ bit acc.3
STATUS_REG_DSC bit acc.4
STATUS_REG_DF&&bit acc.5
STATUS_REG_DRDY bit acc.6
STATUS_REG_BSY bit acc.7
get_status_register:
; mov&&ATA_ADDR,#b
call read_cycle_ls
call get_status_register
jb&&STATUS_REG_BSY,bsy_wait
bsy_drdy_wait:
call delay_100000us
call get_status_register
jb&&STATUS_REG_BSY,bsy_drdy_wait
jnb&&STATUS_REG_DRDY,bsy_drdy_wait
call get_status_register
jb&&STATUS_REG_BSY,drq_wait
jnb&&STATUS_REG_DRQ,drq_wait
ndrq_wait:
call get_status_register
jb&&STATUS_REG_BSY,drq_wait
jb&&STATUS_REG_DRQ,drq_wait
IO_CoD_Wait:
call get_sector_c_register
jnb acc.0,IO& && &;check CoD
sjmp io_cod_wait
jnb acc.1,io_cod_wait
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main routines
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
terminate_with_error:
;mov r5,#2h
;call delay
call s_wait
; clocks data out of buffer until all done (DRQ goes low)
skip_rest_of_packet:
call get_status_register
jnb&&STATUS_REG_DRQ,skip_rest_of_packet_d
call get_data
sjmp skip_rest_of_packet
skip_rest_of_packet_d:
;skip_rest_of_packet2:
; call get_status_register
; jnb&&STATUS_REG_DRQ,skip_rest_of_packet_d2
; call set_data
; sjmp skip_rest_of_packet2
;skip_rest_of_packet_d2:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; init ATA device routines..
; also detects the device during the process of initing it.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
init_ata_device:
; do hard reset..
; nb/ you have a wait a bit after pulling the reset back high. if you
; don't, then bsy flag will falsey pass. i haven't figured out a way
; yet to determine when the device controller is busy during hard reset
clr&&ATA_nRESET
call delay_100000us
setb ATA_nRESET
mov&&r5,#2
call delay
call s_ver
mov&&r5,#1
call delay
call S_space
call s_MCU_ST
call bsy_wait
;select device 0
;the device will now respond to commands now
call get_devhead_register
clr&&acc.4& && & ;set device to 0
call set_devhead_register
; test for device signature to determine if it's 'packet command' device
; if it's not a packet command, then it's probably a harddisk or
; something, and we can't continue.
; we have to check this inorder to know if we can issue the 'identify
; packet device' ATA command.
call bsy_wait
call get_cyl_low_register
cjne a,#14h,init_device_s_error_L
call get_cyl_high_register
cjne a,#0ebh,init_device_s_error_h
sjmp init_device_s_done
init_device_s_error:
;ajmp terminate_with_error_ini
init_device_s_error_ini:
init_device_s_error_H:
call s_IDE_error
init_device_s_error_L:
call s_IDE_error
init_device_s_done:
; running self diagonistics..
; nb/ this is the first ATA command we send
mov&&a,#90h
call set_cmd_register
call bsy_wait
call get_error_register
jb&&acc.0,init_device_c1
ajmp terminate_with_error_ini_s_done
terminate_with_error_ini_s_done:
init_device_c1:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ATAPI identify packet device
; this ATA/ATAPI command is mandatory for CDROM (and like) devices, as it
; will enable the DRDY flag. without this command, we won't be able to
; issue any commands (ATA or packet).
; nb/ older ATA standards, DRDY goes high immediately after BSY goes low
; during reset. .. not so for CDROM)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
identify_packet_device:
;identify device cmd
mov&&a,#2h& && && &;set byte count registers
call set_cyl_high_maximum transfer length = 0200h
clr&&a& && && &&&;nb/ on the few devices i've tested, this
call set_cyl_low_cmd automatically sets these registers.
& && && && && &;but i'll set)
mov&&a,#0a1h
call set_cmd_register
call wait_irq
; get general config word
call get_data
jb&&acc.0,identify_packet_device_c2
jb&&acc.1,identify_packet_device_c2
identify_packet_device_c2:
jb&&acc.0,identify_packet_device_c3
jnb&&acc.1,identify_packet_device_c3
identify_packet_device_c3:
mov&&packet_size,a
call skip_rest_of_packet
call bsy_drdy_wait
call s_start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
do_packet_cmd:
; clr packet table
mov&&r0,#packet_tab
mov&&r7,#16
init_pck_l:
mov&&@r0,#0
djnz r7,init_pck_l
; send packet command
; call IO_CoD_wait
call ndrq_wait
mov&&a,#0a0h
call set_cmd_register
send_packet:
&&call drq_wait
&&mov&&r0,#packet_tab
;mov&&r7,#packet_size
&&mov r7,#06h
send_packet_l:
mov&&a,@r0
mov&&a,@r0
call set_data
djnz r7,send_packet_l
call wait_irq
call get_status_register
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;action cmd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov&&a,#16h& && &&&;set byte counter register
call set_cyl_low_= 16 bytes
call set_cyl_high_
call do_packet_cmd
mov&&packet_cmd,#5ah
mov&&packet_1,#08H ;
mov&&packet_2,#01 C and page Code
mov&&packet_7,#0ffh& & ;allocation length
mov&&packet_8,#0ffh& & ;allocation length
call send_packet
jb&&STATUS_REG_DRQ,act_ok
sjmp act_cmd
call skip_rest_of_packet
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; test unit ready ATAPI command
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
test_unit_ready_cmd:
call do_packet_cmd
call send_packet
jnb&&STATUS_REG_ERR,test_unit_ready_d
test_unit_ready_d:
wait_for_ready_state:
mov&&r2,#2
wait_for_ready_state_l:
;mov&&r5,#1
;call delay
call test_unit_ready_cmd
jnc&&wait_for_ready_state_l
cjne r2,#0,wait_for_ready_state_l
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Table of Contents command
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
read_toc_cmd:
call delay_100000us
call s_x& &&&;关显示音量
mov sense_code,#001h
mov&&a,#0ffh& && &&&;set byte counter register
acall set_cyl_low_(set it to full on.. it doesn't matter coz
acall set_cyl_high_DRQ controls the feed)
acall do_packet_cmd
mov&&packet_cmd,#43h
mov&&packet_1,#b&&;MSF=1
mov&&packet_7,#0FFh& & ;allocation length
mov&&packet_8,#0FFh& & ;(again, set it to full on)
acall send_packet
jb&&STATUS_REG_DRQ,read_toc_cmd_r
read_toc_cmd_e:
;acall read_toc_cmd
ajmp terminate_with_error_R
terminate_with_error_R:
;mov r5,#1h
;call delay
; read header
read_toc_cmd_r:
acall get_data& & ;data length
acall get_data& & ;get track limits
mov&&start_track,a
mov&&end_track,b
mov a,next_track
cjne a,end_track,read_toc_cmd_l2
sjmp read_toc_cmd_l2_end
; read track descriptors
read_toc_cmd_l2:
acall get_data&&;get ADR and control fields
acall get_data&&;get track number
mov&&tmp0,a
acall get_data&&
mov&&tmp1,b
acall get_data
mov&&tmp2,a
mov&&tmp3,b
; record MSF position,ready for play
mov&&a,tmp0
cjne a,next_track,read_toc_cmd_i0_p
mov&&start_M,tmp1
mov&&start_S,tmp2
mov&&start_F,tmp3
read_toc_cmd_i0_P:& && && &;next_track不是最后一曲
inc next_track
cjne a,next_track,read_toc_cmd_i0_3 ;是下一曲吗?是--继续
mov n_m,tmp1
mov n_s,tmp2
read_toc_cmd_i0_3:
cjne a,#0aah,read_toc_cmd_i1_2
mov&&end_M,tmp1
;dec end_m
mov&&end_S,tmp2
mov&&end_F,tmp3
call fix_msf& && && && & ;fix msf
read_toc_cmd_i1_2:
dec next_track
acall bsy_wait
jb&&STATUS_REG_DRQ,read_toc_cmd_l2
read_toc_cmd_l2_end:
acall get_data&&;get ADR and control fields
acall get_data&&;get track number
mov&&tmp0,a
acall get_data&&
mov&&tmp1,b
acall get_data
mov&&tmp2,a
mov&&tmp3,b
mov&&a,tmp0
cjne a,next_track,read_toc_cmd_i0_end
mov&&start_M,tmp1
mov&&start_S,tmp2
mov&&start_F,tmp3
read_toc_cmd_i0_end:
cjne a,#0aah,read_toc_cmd_i1_2_end
mov&&end_M,tmp1
mov&&end_S,tmp2
mov&&end_F,tmp3
call fix_msf
mov n_s,end_s
mov n_m,end_m
read_toc_cmd_i1_2_end:
acall bsy_wait
jb&&STATUS_REG_DRQ,read_toc_cmd_l2_end
fix_msf:& && && & ;修正sony一些旧光驱MSF会多出几秒,导致播放出错问题
; mov a,end_s
; cjne a,#3,fmsf1
; mov end_s,#00h
; jnc msf3
; dec end_m
; mov a,#3
; mov end_s,a
; mov a,#59
; subb a,end_s
; mov end_s,a
; dec end_s
; dec end_s
; dec end_s
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; play MSF cd cmd;按MSF格式播放CD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
play_entire_cd_cmd:
call delay_100000us
call do_packet_cmd
mov&&packet_cmd,#47h
mov&&packet_3,start_M
mov&&packet_4,start_S
mov&&packet_5,start_F
mov&&packet_6,end_M
mov&&packet_7,end_S
mov&&packet_8,end_F
call send_packet
jnb&&STATUS_REG_ERR,play_audio_cmd_d
ajmp terminate_with_error
play_audio_cmd_d:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; read sub channel cmd;CD播放状态信息
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
read_subchan_cmd:
call delay_100000us
mov&&a,#016h& && &&&;set byte counter register
call set_cyl_low_= 16 bytes
call set_cyl_high_
call do_packet_cmd
mov&&packet_cmd,#42h
mov&&packet_1,#MSF=1
mov&&packet_2,#SubQ=1
mov&&packet_3,#01h& & ;format=01 (current position)
mov&&packet_8,#016h& & ;allocation length (16 bytes)
call send_packet
jb&&STATUS_REG_DRQ,read_subchan_cmd_r
read_subchan_cmd_e:
mov&&audio_status,#0ffh
;read Current Audio track,MSF
read_subchan_cmd_r:
call get_data& & ;get audio status
mov&&audio_status,b
call get_data& & ;sub channel data length (will be zero).. ignore
call get_data& & ;data format,adr/fiel
call get_data& & ;current track ,index track
mov current_track,a
call get_data& & ;M
mov current_M,b
call get_data& & ;SF
mov current_S,a
mov current_F,b
call skip_rest_of_packet
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Load/Unload command
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOAD_disc_cmd_1:
call delay_100000us
mov&&a,#16h& && &&&;set byte counter register
call set_cyl_low_= 16 bytes
call set_cyl_high_
call do_packet_cmd
mov&&packet_cmd,#0A6h
mov&&packet_1,#00H ;
mov&&packet_4,#03h& & ;02=unload disc,03=load disc
mov&&packet_8,#01h& & ;slot No. (NEC CDR-251 Slot= 0 1 2 3)
LOAD_disc_cmd_2:
call send_packet
jb&&STATUS_REG_DRQ,load_disc_r
load_disc_r:
;call skip_rest_of_packet
;;;;----select slot -----------
select_slot_1:
call load_disc_cmd_1
mov&&packet_4,#03h& & ;02=unload disc,03=load disc
mov&&packet_8,#00h& & ;slot No. (NEC CDR-251 Slot= 0 1 2 3)
call load_disc_cmd_2
select_slot_2:
call load_disc_cmd_1
mov&&packet_4,#03h& & ;02=unload disc,03=load disc
mov&&packet_8,#01h& & ;slot No. (NEC CDR-251 Slot= 0 1 2 3)
call load_disc_cmd_2
select_slot_3:
call load_disc_cmd_1
mov&&packet_4,#03h& & ;02=unload disc,03=load disc
mov&&packet_8,#02h& & ;slot No. (NEC CDR-251 Slot= 0 1 2 3)
call load_disc_cmd_2
select_slot_4:
call load_disc_cmd_1
mov&&packet_4,#03h& & ;02=unload disc,03=load disc
mov&&packet_8,#03h& & ;slot No. (NEC CDR-251 Slot= 0 1 2 3)
call load_disc_cmd_2
unload_disc:
call load_disc_cmd_1
mov&&packet_4,#02h& & ;02=unload disc,03=load disc
call load_disc_cmd_2
load_disc:
call load_disc_cmd_1
mov&&packet_4,#03h& & ;02=unload disc,03=load disc
call load_disc_cmd_2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;MECHANISM STATUS CCD-ROM状态信息
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mech_status_cmd:
call delay_100000us
mov&&a,#16h& && &&&;set byte counter register
call set_cyl_low_= 16 bytes
call set_cyl_high_
call do_packet_cmd
mov&&packet_cmd,#0BDh
mov&&packet_8,#0ffh& & ;allocation length
mov&&packet_9,#0ffh& & ;allocation length
call send_packet
jb&&STATUS_REG_DRQ,mech_status_cmd_r
mech_status_cmd_e:
;jmp mech_status_cmd
;mov media_type,#0ffh
mech_status_cmd_r:
mov 2fH,#00
mov slot_DI,#00h
call get_data&&; mechanism status header
mov mech_s_0,a
mov mech_s_1,b
call get_data
call get_data
mov slot_q,b&&;Number of slots available
call get_data
call get_data
mov c,acc.7 ; slot 0 disc status
call get_data
call get_data
mov c,acc.7 ; slot 1 disc status
call get_data
call get_data
mov c,acc.7 ; slot 2 disc status
call get_data
call get_data
mov c,acc.7 ; slot 3 disc status
mov slot_di,2Fh
call skip_rest_of_packet
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CD-ROM状态信息
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mode_sense_cmd:
call delay_100000us
mov&&a,#16h& && &&&;set byte counter register
call set_cyl_low_= 16 bytes
call set_cyl_high_
call do_packet_cmd
mov&&packet_cmd,#5ah
mov&&packet_1,#00H ;
mov&&packet_2,#01H C and page Code
mov&&packet_7,#0ffh& & ;allocation length
mov&&packet_8,#0ffh& & ;allocation length
call send_packet
jb&&STATUS_REG_DRQ,mode_sense_cmd_r
mode_sense_cmd_e:
jmp mode_sense_cmd
;mov media_type,#0ffh
;read Current CD-ROM Media Type Code
mode_sense_cmd_r:
call get_data&&;mode Data length
call get_data&&;Medium Type
mov media_type,a
call skip_rest_of_packet
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;mode sense read 0E读音频控制页
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mode_sense_cmd_0e:
call delay_100000us
mov&&a,#016h& && &&&;set byte counter register
call set_cyl_low_= 16 bytes
call set_cyl_high_
call do_packet_cmd
mov&&packet_cmd,#5ah
mov&&packet_1,#000H ;
mov&&packet_2,#00eH C and page Code
mov&&packet_7,#000h& & ;allocation length
mov&&packet_8,#018h& & ;allocation length
call send_packet
jb&&STATUS_REG_DRQ,mode_sense_cmd_r_0e
jmp&&mode_sense_cmd_0e
mode_sense_cmd_r_0e:
&&mov r7,#12
&&mov r1,#0B0h
&&get_audio_data_loop:
&&acall get_data
&&mov @r1,a
&&mov @r1,b
&&djnz r7,get_audio_data_loop
&&mov r0,#0C1h
&&mov volume_1,@r0
&&mov r0,#0C3h
&&mov volume_2,@r0
&&call skip_rest_of_packet
&&mov sense_code,#0eh
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;mode select(10)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mode_select_cmd:
call delay_100000us
mov&&a,#0FFh& && &&&;set byte counter register
call set_cyl_low_= 16 bytes
call set_cyl_high_
call do_packet_cmd
mov&&packet_cmd,#55h
mov&&packet_1,#10H ;
mov&&packet_2,#000H C and page Code
mov&&packet_7,#000h& & ;allocation length
mov&&packet_8,#018h& & ;allocation length
call send_packet
jb STATUS_REG_DRQ,mode_select_cmd_r
jmp mode_select_cmd
mode_select_cmd_r:
mode_sense_10:
mov a,sense_code
cjne a,#00eh,ms0e
call mode_sense_cmd_0e
cjne a,#11h,v_tc1& & ;11h=volume +
jmp volume_inc
&&cjne a,#99h,v_tc2& & ;99h=volume -
&&jmp volume_dec
volume_inc:
mov a,volume_1
cjne a,#245,v_inc
call set_v
call set_v
mov a,volume_1
addc a,#10
call set_v
volume_dec:
mov a,volume_1
cjne a,#11,v_dec
call set_v
jnc v_dn10
call set_v
mov a,volume_1
subb a,#10
call set_v
mov volume_1,a
mov volume_2,a
mov r0,#0c1h
mov @r0,volume_1
mov r0,#0c3h
mov @r0,volume_2
scmd:& && & ;改变音量
call mode_select_cmd
call send_data
;call skip_rest_of_packet2
send_data:
mov r1,#0B0h
mov r0,#12
set_head_data_loop:
acall set_data
call delay_1000us
djnz r0,set_head_data_loop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Key control 按键功能
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov r6,#200
mov r7,#20
djnz r6,DEL2
djnz r7,DEL1
key_wait_s:
&&mov a,ir_key
&&cjne a,#18h,kwsa0
&&call ir_eject
&&mov ir_key,#0ffh
&&jnb stop_key,eject_s
call delay_10ms
jb stop_key,esret
&&call ir_key_wait& &&&;查询有无红外线码输入
&&jnb play_key,play_cdd& &
&&jnb pause_key,pause_cdd
&&jnb pre_key,prevous_d
&&jnb next_key,next_d
&&jnb stop_key,Stop_cdd
&&mov a,ir_code
&&cjne a,#0ceh,kwtab
&&call s_clr& && & ;清屏LCM
&&call s_space
&&call ir_track
&&cjne a,#0abh,kwtret
&&call ir_a_b
play_cdd:& && && && & ;播放按键
call play_cd
pause_cdd:& && && && &;停止按键
call pause_cd
prevous_d:& && && && &;上一曲按键
call delay_10ms
caod:& && && && && &
call delay_10ms
jnb pre_key,bwd_cd
call prevous
call delay_100000us
jb pre_key,caod
call delay_100000us
jb pre_key,caod
call delay_100000us
jb pre_key,caod
call delay_100000us
jb pre_key,caod
call backward
;call fb_msf_play
next_d:& && && &&&;下一曲按键
call delay_10ms
jnb next_key,fwd_cd
JHY:& && && && &
call delay_100000us
jb next_key,JHY
call delay_100000us
jb next_key,JHY
call delay_100000us
jb next_key,JHY
call delay_100000us
jb next_key,JHY
call forward
;call fb_msf_play
stop_cdd:& && && &&&;停止
call delay_10ms
jb stop_key,stopret
call stop_cd
jb stop_key,stopret
call eject_cd
play_cd_s:& && && && &;播放指定曲
call delay_10ms
jnb play_key,Cnex2
mov r3,#00h
mov next_track,r3
call read_toc_cmd
call play_entire_cd_cmd
mov packet_6,#00h
sjmp cnex1
play_cd:& && && && & ;播放
call delay_10ms
jnb play_key,PR_D
sjmp PR_D3
call read_subchan_cmd
mov a,audio_status
cjne a,#12h,PR_D1
call resume_cd
sjmp PR_D3
cjne a,#11h,PR_D2
call delay_10ms
call delay_10ms
call delay_10ms
jnb play_key,PR_D4
sjmp PR_D3
jnb play_key,$
;call change_disp
sjmp pr_d3
call play_cd_s
prevous:& && && && &&&;上一曲
;acall delay_10ms
;jnb pre_key,CPRE
mov a,current_track
cjne a,#01,maop&&
mov a,end_track
;sjmp r_pe
mov next_track,a
call read_toc_cmd
call play_entire_cd_cmd
mov packet_6,#00h
next:& && && && && & ;下一曲
;acall delay_10ms
;jnb next_key,Cnex
mov a,current_track
cjne a,end_track,xich& &
mov a,#00h
mov next_track,a
call read_toc_cmd
call play_entire_cd_cmd
mov packet_6,#00h
pause_cd:& && && & ;暂停
call delay_10ms
jnb pause_key,CpauF
call delay_100000us
jb pause_key,CPAUSE_R
&&call delay_100000us
jb pause_key,CPAUSE_R
&&call delay_100000us
jb pause_key,CPAUSE_R
&&call delay_100000us
jb pause_key,CPAUSE_R
&&call delay_100000us
jb pause_key,CPAUSE_R
&&call delay_100000us
jnb pause_key,slot_se_mo
call pause_resume_cd
slot_se_mo:
&&call slot_sect
Cpau:& && && && &;pause cd command
call delay_100000us
mov&&a,#0ffh& && &&&;set byte counter register
call set_cyl_low_(set it to full on.. it doesn't matter coz
call set_cyl_high_DRQ controls the feed)
call do_packet_cmd
mov&&packet_cmd,#4Bh
mov&&packet_1,#b&&;MSF=1
mov&&packet_4,#000h& & ;allocation length
mov&&packet_8,#000h& & ;(again, set it to full on)
call send_packet
jnb STATUS_REG_DRQ,PC1
slot_sect:& && &&&;切换碟片
call s_space
call s_clr&&;clr lcm
call mech_status_cmd
& & mov a,mech_s_0
& && & clr acc.7
& && & clr acc.6
& && & clr acc.5
& &&&inc a& &
&&mov slot_sn,a
&&mov ir_key,slot_sn
slot_sect1:
&&call mech_status_cmd
&&;call ir_num_key_wait
&&;mov slot_sn,ir_key
&&mov a,ir_key
&&;mov slot_sn,ir_num
&&cjne a,#015h,sldd2
&&sjmp s2ret
&&cjne a,#0bh,sldd3&&;按下play 键就选择 slot
&&sjmp retsl
&&cjne a,#012h,sldd4&&;按下enter 键就选择 slot
&&sjmp retsl
&&cjne a,#011h,sldd5
&&jmp IRSLRET
&&mov slot_sn,ir_key
&&mov a,slot_sn
&&cjne a,#04h,ir_chek&&;如果输入大于 4,修正为 4。
&&;mov slot_sn,ir_key
&&;mov slot_sn,ir_key
&&;call delay_100000us
&&call key_wait_ID
&&call s_slot_info
&&call s_slot_sec
&&call s_slot_sno
&&jnb stop_key,s2ret&&;stop key----&exit
&&jnb play_key,retSL&&;play key----&load
&&call key_wait_ID
&&mov ir_key,slot_sn
&&jmp slot_sect1
&&mov slot_sn,#04h
&&jmp sldd
&&jnb stop_key,$
&&IRSLRET:
&&call s_space
&&call s_clr
&&mov ir_key,#0ffh
&&;mov show_all,#0a0h
&&;mov ir_num,#0ffh
&&jnb play_key,$
&&call s_load
&&mov slot_n,slot_sn
&&dec slot_n
&&call slot_load
&&mov ir_key,#0ffh
&&;mov show_all,#0a0h
&&call s_space
&&call s_clr
key_wait_ID:
&&jnb next_key,next_add
&&jb pre_key,kwiret
&&ljmp pre_dec
&&call delay_10ms
&&jb next_key,prret2
&&jnb next_key,$
&&mov a,slot_sn
&&cjne a,#04h,nddd
&&mov slot_sn,#4h
&&jnc nddret
&&inc slot_sn
&&jmp prret
&&mov slot_sn,#04h
&&call delay_10ms
&&jb pre_key,pdcret
&&jnb pre_key,$
&&mov a,slot_sn
&&cjne a,#1h,dkdk
&&dec slot_sn
pause_resume_cd:
call read_subchan_cmd
mov a,audio_status
cjne a,#12h,Pa_CD3
call cres& & ;resume cd
cjne a,#11h,Pr_ret
call cpau& & ;pause cd
stop_cd:& && && &&&;停止
call delay_10ms
jnb stop_key,Csto
mov a,#0ffh& && &&&
call set_cyl_low_register
call set_cyl_high_register
call do_packet_cmd
mov&&packet_cmd,#4Eh
mov&&packet_1,#b&&
call send_packet
mov next_track,start_track
mov toc_times,#4
forward:& && && && && & ;快进
&&call s_forward
&&mov pause_da,#07h& &;速度初始值
&&call read_subchan_cmd
&&call track_inc
&&call s_msf_pn
&&call s_speed
&&jnb play_key,fo_play_ret
&&jnb stop_key,fo_cancel
&&jnb next_key,cf_speed& & ;改变速度
&&;sjmp cf_speed
&&mov a,ir_key
&&cjne a,#0bh,ir_fora&&;判断遥控有无输入& &
&&sjmp ir_froward_p& &;再按下&&键,play
&&cjne a,#12h,ir_forb& &
&&sjmp ir_froward_p& &;再按下enter键,play
&&cjne a,#0dh,ir_forc& &
&&sjmp ir_f_spd& &&&;再按下&&键,改变速度
&&cjne a,#11h,fo_start&&;mode 退出& &
&&sjmp ir_for_ret
fo_play_ret:
&&call delay_10ms
&&jb play_key,csfor
ir_froward_p:
&&call fb_msf_play
&&mov next_track,current_track
&&call read_toc_cmd
&&;call read_subchan_cmd
&&mov ir_key,#0ffh
&&call s_space
fo_cancel:
&&call delay_10ms
&&jb stop_key,fo_start
&&jnb stop_key,$
ir_for_ret:
&&call read_subchan_cmd
&&mov ir_key,#0ffh
&&call s_space
&&call delay_10ms
&&jb next_key,csfor
&&jnb next_key,$
&&mov a,pause_da
&&cjne a,#1,cfsd1&&
&&mov pause_da,#07速度最快为1,否则为7
&&mov ir_key,#0ffh
&&sjmp fo_start
&&dec pause_da
&&dec pause_da& &;改变速度值
&&mov ir_key,#0ffh
&&sjmp fo_start
track_inc:
&&mov a,current_m
&&cjne a,n_m,time_inc
&&mov a,current_s
&&cjne a,n_s,time_inc
&&mov a,current_track
&&cjne a,end_track,trackil
trackil:&&
&&inc current_track
&&mov next_track,current_track
&&call read_toc_cmd
&&sjmp track_inc
&&mov a,current_s
&&cjne a,#60,c_s_ad& && &;当前秒是60?
&&mov current_s,#0h
&&mov a,current_m
&&cjne a,end_m,c_m_ad
&&mov current_m,end_m
&&inc current_m
&&mov a,current_s
&&cjne a,end_s,c_s_cd2
&&mov a,current_m
&&cjne a,end_m,c_s_cd2
&&mov current_s,end_s
&&inc current_s
call delay_10ms
;mov pause_da,#07h& &;快进速度
mov pause_db,pause_da
;mov a,dm_code
;cjne a,#0,MSFPN_1
call disp_m2z
call delay_fb
djnz pause_db,PNM0
backward:& && && &&&;快退
&&call s_backward
&&mov pause_da,#07h& && &;速度值
&&call read_subchan_cmd
&&call track_dec
&&call s_msf_pn
&&call s_speed
&&jnb play_key,ba_play_ret
&&jnb stop_key,ba_cancel
&&jnb pre_key,cb_speed
&&mov a,ir_key
&&cjne a,#0bh,ir_baka&&;判断遥控有无输入& &
&&sjmp ir_bakward_p& &;按下&键,play
&&cjne a,#12h,ir_bakb& &
&&sjmp ir_bakward_p& &;再按下enter键,play
&&cjne a,#0eh,ir_bakc& &
&&sjmp ir_b_spd& &&&;再按下&&键,改变速度
&&cjne a,#11h,ba_start&&;mode 退出& &
&&sjmp ir_bak_ret&&
&&sjmp ba_start
ba_play_ret:
&&call delay_10ms
&&jb play_key,csbak
&&;jnb play_key,$
ir_bakward_p:
&&call fb_msf_play
&&;call read_subchan_cmd
&&mov next_track,current_track
&&call read_toc_cmd
&&mov ir_key,#0ffh
&&call s_space
ba_cancel:
&&call delay_10ms
&&jb stop_key,ba_start
&&jnb stop_key,$
ir_bak_ret:
&&call read_subchan_cmd
&&mov ir_key,#0ffh
&&call s_space
&&call delay_10ms
&&jb pre_key,csbak
&&jnb pre_key,$
&&mov a,pause_da
&&cjne a,#1,cbsd1&&
&&mov pause_da,#07速度最快为1,否则为7
&&mov ir_key,#0ffh
&&sjmp ba_start
&&dec pause_da
&&dec pause_da& &;改变速度值
&&mov ir_key,#0ffh
&&sjmp ba_start
track_dec:
&&mov a,current_s
&&cjne a,start_s,time_dec
&&mov a,current_m
&&cjne a,start_m,time_dec
&&mov a,current_track
&&cjne a,#1,Trac_d1
&&dec current_track
&&mov next_track,current_track
&&call read_toc_cmd
&&sjmp time_dec
&&mov a,current_s
&&cjne a,#0,c_s_dec
&&mov a,current_m
&&cjne a,#0,c_m_dec
&&mov current_s,#0
&&mov current_m,#0
&&dec current_s
&&dec current_m
&&mov current_s,#59
eject_cd:& && && &&&;出盘
call delay_100000us
call delay_100000us
call delay_100000us
jnb stop_key,e_cd
call mode_sense_cmd
mov a,media_type
cjne a,#71H,e_cd_out
ljmp e_cd_in
call tray_out
mov current_s,#0
mov d_s,#0
mov current_m,#0
mov d_m,#0
ljmp ee_end
call tray_in
ir_eject:& && && &&&;红外线出盘指令具体
call mode_sense_cmd
mov a,media_type
cjne a,#71H,ir_e_cd_out
sjmp ir_e_cd_in
ir_e_cd_out:
call t_out
mov current_s,#0
mov d_s,#0
mov current_m,#0
mov d_m,#0
sjmp ir_ee_end
ir_e_cd_in:
ir_ee_end:
mov toc_times,#4
resume_cd:& && && & ;恢复播放
call delay_10ms
jnb play_key,Cres
&&call delay_100000us
&&mov a,#0ffh& && &&&;set byte counter register
&&call set_cyl_low_(set it to full on.. it doesn't matter coz
&&call set_cyl_high_DRQ controls the feed)
&&call do_packet_cmd
&&mov&&packet_cmd,#4Bh
&&mov&&packet_1,#b&&;MSF=1
&&mov&&packet_4,#000h& & ;allocation length
&&mov&&packet_8,#001h& & ;(again, set it to full on)
&&call send_packet
&&;jnb STATUS_REG_DRQ,d3
Tray_out:& && && & ;出盘指令
call delay_10ms
jnb stop_key,t_out
&&call s_tray_out
mov&&a,#0ffh& && &&&;set byte counter register
call set_cyl_low_(set it to full on.. it doesn't matter coz
call set_cyl_high_DRQ controls the feed)
call do_packet_cmd
mov&&packet_cmd,#1bh
mov&&packet_1,#b&&;
mov&&packet_4,#002h& & ;
mov&&packet_8,#000h& & ;
call send_packet
jb&&STATUS_REG_DRQ,dout
Tray_in:& && && && & ;进盘指令
call delay_10ms
jnb stop_key,t_in
&&call s_tray_in
mov&&a,#0ffh& && &&&;set byte counter register
call set_cyl_low_(set it to full on.. it doesn't matter coz
call set_cyl_high_DRQ controls the feed)
call do_packet_cmd
mov&&packet_cmd,#1bh
mov&&packet_1,#b&&;
mov&&packet_4,#003h& & ;
mov&&packet_8,#000h& & ;
call send_packet
jb&&STATUS_REG_DRQ,din
call delay_100000us
call delay_100000us
;call act_cmd
fb_msf_play:& && && &&&;按 M S F数据播放指令
mov start_m,current_m
mov start_s,current_s
mov start_f,#0h
call play_entire_cd_cmd
mov packet_6,#00h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;红外码查询-功能执行
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ir_num_key_wait:& && && && &
&&mov a,ir_key
&&cjne a,#0ffh,irk_num
&&mov a,ir_key
&&cjne a,#0ah,irkrtt
&&sjmp irty45
&&jnc irktret& && && & ;&oah,非数字键退出
&&mov ir_code,#0CEh& && & ;是数字键做个0CEh标记
&&mov ir_temp,ir_key
&&mov ir_key,#0ffh
;;;;;;;;;;;;;;;;;;;;;;;;;;具体功能执行
ir_key_wait:
&&mov a,ir_key
&&cjne a,#0ffh,irktw1
&&mov dptr,#irKm
&&mov b,#2
&&mov a,ir_key
&&jmp @A+dptr
irkm:& && && & ;这里定义了共24个按键功能
&&ajmp irk00
&&ajmp irk01
&&ajmp irk02
&&ajmp irk03
&&ajmp irk04
&&ajmp irk05
&&ajmp irk06
&&ajmp irk07
&&ajmp irk08
&&ajmp irk09
&&ajmp irk10
&&ajmp irk11
&&ajmp irk12
&&ajmp irk13
&&ajmp irk14
&&ajmp irk15
&&ajmp irk16
&&ajmp irk17
&&ajmp irk18
&&ajmp irk19
&&ajmp irk20
&&ajmp irk21
&&ajmp irk22
&&ajmp irk23
&&ajmp irk24
&&ajmp irk25
&&ajmp irk26
&&ajmp irk27
&&ljmp irk_ret
&&mov ir_code,#0CEh
&&mov ir_temp,ir_key
&&ljmp irk_ret_abp
&&mov ir_code,#0CEh
&&mov ir_temp,ir_key
&&ljmp irk_ret_abp
&&mov ir_code,#0CEh
&&mov ir_temp,ir_key
&&ljmp irk_ret_abp
&&mov ir_code,#0CEh
&&mov ir_temp,ir_key
&&ljmp irk_ret_abp
&&mov ir_code,#0CEh
&&mov ir_temp,ir_key
&&ljmp irk_ret_abp
&&mov ir_code,#0CEh
&&mov ir_temp,ir_key
&&ljmp irk_ret_abp
&&mov ir_code,#0CEh
&&mov ir_temp,ir_key
&&ljmp irk_ret_abp
&&mov ir_code,#0CEh
&&mov ir_temp,ir_key
&&ljmp irk_ret_abp
&&mov ir_code,#0CEh
&&mov ir_temp,ir_key
&&ljmp irk_ret_abp
&&mov ir_code,#0CEh
&&mov ir_temp,ir_key
&&ljmp irk_ret_abp
&&irk11_1ret:
irk11:& && && && & ;paly/stop
&&mov a,driver_status
&&cjne a,#0ffh,irk11_1ret
&&;mov a,play_mode
&&;cjne a,#0BAH,irk11_0 ;在 A-B模式 Play用做Enter
&&;ljmp irk_ret
&&;mov driver_status,#031h
&&;ljmp irk_ret
& &mov a,audio_ 修正sony CDU4811光驱在暂停状态下,执行mode_sense_cmd会出现死机现象,先判断是否暂停,如果是暂停,则跳开mode_sense_cmd,直接执行resume命令
&&cjne a,#12h,irk11_0A
&&jmp irk11_00
&&irk11_0A:& && &
&&call mode_sense_cmd&&;在 open 状态下,按play 直接进仓 并播放
&&mov a,media_type
&&cjne a,#71H,irk11_00
&&call t_in
&&setb play_mk
&&;acdre:& && && && &;如果tray out---》Tray in ---》Play
&&; call disc_wait
&&; call read_toc_cmd
&&; mov a,end_m& && & ;判断分如果不是 0x00,就执行play cd
&&; cjne a,#00,iroc
&&; call delay_10ms
&&; call delay_10ms
&&; call delay_10ms
&&; call delay_10ms
&&; jmp acdre
jmp irplay_cd
&&irk11_00:
&&mov a,audio_status
&&cjne a,#11h,irk11_1& &&&;如果正在播放--》stop
&&call cpau
&&ljmp irk_ret
&&cjne a,#12h,irk11_2& &&&;如果暂停--》play
&&call cres
&&ljmp irk_ret
&&cjne a,#13h,irk11_3& &&&;如果停止--》play
irplay_cd:
&&mov next_track,#01h
&&call read_toc_cmd
&&call play_entire_cd_cmd
&&call luchunfang
&&ljmp irk_ret
&&;cjne a,#14h,irk11_4
&&mov next_track,#01h
&&call read_toc_cmd
&&call play_entire_cd_cmd
&&ljmp irk_ret
&&;irk11_4:
&&;ljmp irk_ret&&
&&mov a,audio_status
&&cjne a,#11h,irk12_1& &&&;如果正在播放--》pause
&&call cpau
&&ljmp irk_ret
&&cjne a,#12h,ikr12_2& &&&;如果暂停--》play
&&call cres
&&ljmp irk_ret
&&ljmp irk_ret
irk13:& && && && & ;&&
&&call forward
&&ljmp irk_ret_abp
irk14:& && && && & ;&&
&&call backward& && && && &
&&ljmp irk_ret_abp
irk15:& && && && & ;NEXT
&&jb Delay_REQ,irk15_2
&&; call delay_100000延迟执行快进,是为了识别是否重复按下
&&; mov a,ir_key
&&; cjne a,#0fh,irk15_0
&&mov a,audio_status
&&cjne a,#11h,irk15_1
&&call cnex
&&ljmp irk_ret_abp
&&ljmp irk_ret_abp
&&ljmp irk_ret_abp2
irk16:& && && && & RE.
& &setb Delay_REQ
&&;call delay_100000延迟执行快进,是为了识别是否重复按下
& &;mov a,ir_key
&&;cjne a,#010h,irk16_0
&&mov a,audio_status
&&cjne a,#11h,irk16_1
&&call cpre
&&ljmp irk_ret_abp
& &irk16_0:
&&ljmp irk_ret_abp
& &irk16_2:
&&ljmp irk_ret_abp2
;mov a,ir_code
;cjne a,#0ffh,irk17_0
;ljmp irk_ret_----------
&&mov r0,#090h
;&&Mov DPTR,#NUM16
&&mov a,dm_code
&&cjne a,#4,irk17_3
&&mov a,#0
&&;MOVC A,@A+DPTR
&&djnz r0,irk17_2
&&setb ex1
&&;call change_disp& && &;改变显示模式
&&ljmp irk_ret_abp
irk18:& && && &&&;Enter
&&ljmp irk_ret
&&mov ir_temp,ir_key
&&ljmp irk_ret
&&;mov ir_temp,ir_key
&&call change_light
&&ljmp irk_ret
&&;ljmp irk_ret_abp
irk20:;;;进入碟片选择状态
&&jb Delay_REQ,irk20_2
&&call slot_sect
&&ljmp irk_ret
&&ljmp irk_ret_abp2
&&;mov a,driver_status
&&;cjne a,#021h,irk21_0
&&mov a,play_mode
&&cjne a,#0BAH,irk21_0
&&mov play_mode,#0ffh
&&mov ir_code,#0ffh
&&mov driver_status,#0ffh
&&irk21_0:
&&ljmp irk_ret
&&mov ir_temp,ir_key
&&ljmp irk_ret
&&;mov a,ir_code
&&mov a,play_mode
&&cjne a,#0bah,irk22_0
&&mov play_mode,#0ffh
&&ljmp irk_ret_abp
&&mov ir_code,#0abh
&&ljmp irk_ret_abp
irk23:& && && &;Repeat
&&mov a,play_mode
&&cjne a,#0BAh,irk23_0 ; 循环判断值,ircode=0xABh 表示 A-B循环中
&&mov play_mode,#0ffh
&&mov driver_status,#0ffh
&&mov ir_code,#0ffh&&;当第四次按下repeat 退出重复,ir_code=#0ffh
&&call s_space
&&;call reset_data
&&ljmp irk_ret
&&;mov ir_key,#11h
&&ljmp irk17
&&cjne a,#0deh,irk23_1;; 循环判断值,ircode=0xDEh 表示整碟循环中
&&mov ir_code,#0ABH ;当第三次按下repeat 进入A-B循环,ir_code=#0ABh
&&mov play_mode,#0ABh
&&ljmp irk_ret_abp
&&irk23_1:
&&cjne a,#0eah,irk23_2; 循环判断值,ircode=0xeah 表示单曲目循环中
&&mov ir_code,#0deH;当第二次按下repeat 进入整碟循环,ir_code=#0DEh
&&mov play_mode,#0deh
&&ljmp irk_ret_abp
&&irk23_2:
&&mov ir_code,#0
&&mov track_a,current_当第一次按下repeat 进入整碟循环,ir_code=#0eah
&&mov play_mode,#0eah
&&ljmp irk_ret_abp
&&call ir_eject
&&ljmp irk_ret
&&call mode_sense_10
&&mov 44h,#11h
&&call v_change
&&;mov volume_1,#020h
&&;mov volume_2,#020h
&&call set_v
&&;call delay_100000us
&&call scmd
&&call delay_100000us
&&ljmp irk_ret_abp
&&call mode_sense_10
&&mov 44h,#99h
&&call v_change
&&;call delay_100000us
&&call scmd
&&call delay_100000us
&&ljmp irk_ret_abp
&&call csto& && && &;stop
&&ljmp irk_ret
irvolumejudge:& && & ;判断是否在改变音量
&&mov a,44h
&&cjne a,#11h,ivj1
&&cjne a,#99h,ivj2
&&call mode_sense_cmd_0e
irk_ret:& && && & ;完全返回
&&mov ir_temp,ir_key
&&mov ir_key,#0ffh
&&mov ir_code,#0ffh
irk_ret_abp:& && &&&;不改变ir_code 返回
&&mov ir_temp,ir_key
&&mov ir_key,#0ffh
irk_ret_abp2:& && &&&;不改变ir_key 返回
&&mov ir_temp,ir_key
&&;mov ir_key,#0ffh
RPT_wait2:;退出判断
mov a,ir_key
cjne a,#17h,PRE2ret
mov play_mode,#0ffh
mov ir_key,#0ffh
;call s_space
mov ir_code,#0ffh
mov driver_status,#0ffh
mov play_mode,#0ffh
call s_space
&&mov driver_status,#56h
&&mov track_a,#00h
&&mov track_b,#00h
&&mov ir_temp,#00h
&&mov ir_key,#00h
&&mov ir_num,#00h
track_a_loop:
&&mov a,play_mode
&&cjne a,#0abh,Exit_ABS
&&call RPT_wait2;检查是否有退出指令请求,再按一下repeat就退出循环
&&call ir_num_key_wait
&&acall ab_num_in
&&mov track_a,ir_num
&&call disp_track_a
&&mov a,ir_temp
&&cjne a,#0bh,abira1& & ;ir enter
&&mov a,ir_num& && & ;判断输入的track是否在范围内
&&cjne a,#00h,tnoca2
&&mov ir_num,#00h
&&mov driver_status,#055h
&&mov ir_temp,#0ffh
&&sjmp track_a_loop
&&mov a,end_track
&&cjne a,ir_num,tnoca3
&&jc tnoca4& && && &;超出
&&mov track_a,ir_num
&&mov ir_temp,#0ffh
&&mov ir_num,#00h
&&ajmp track_b_loop& &&&;跳到b track输入
&&mov ir_num,#00h
&&mov driver_status,#055h
&&mov ir_temp,#0ffh
&&sjmp track_a_loop
&&cjne a,#15h,abira2& & ;clr
&&mov track_a,#00h
&&mov ir_num,#00h
&&mov driver_status,#055h
&&mov ir_temp,#0ffh
&&sjmp track_a_loop
&&cjne a,#11h,abira3& & ;ir mode
&&call s_space
&&mov play_mode,#00h& & ;exit a-b mode
&&mov ir_code,#0ffh
&&jb stop_key,track_a_loop
&&call delay_100000us
&&jb stop_key,track_a_loop
&&jnb stop_key,$
&&mov ir_code,#0ffh
Exit_ABSb:
mov ir_code,#0ffh
mov driver_status,#0ffh
mov play_mode,#0ffh
track_b_loop:
&&mov a,play_mode
&&cjne a,#0abh,Exit_ABSb
&&call RPT_wait2
&&call ir_num_key_wait
&&acall ab_num_in
&&mov track_b,ir_num
&&call disp_track_b
&&mov a,ir_temp
&&cjne a,#0bh,baira1& & ;ir enter play
&&mov a,ir_num& && & ;判断输入的track是否在范围内
&&cjne a,#00h,tnocb2
&&mov ir_num,#00h
&&mov driver_status,#055h
&&mov ir_temp,#0ffh
&&sjmp track_b_loop
&&mov a,end_track
&&cjne a,ir_num,tnocb3
&&jc tnocb4& && && &;超出
&&mov track_b,ir_num
&&call a_b_start
&&call s_退出选择显示模式,清屏
&&mov driver_status,#0ffh
&&mov ir_code,#0BAh& &&&;标记0bah
&&mov play_mode,#0BAH;输入曲目后,BA模式才生效
&&mov ir_key,#0ffh
&&mov ir_num,#00h
&&mov driver_status,#055h
&&mov ir_temp,#0ffh
&&sjmp track_b_loop
&&cjne a,#15h,baira2& & ;clr
&&;mov track_a,#00h&&; 修正显示B位的时候,按clr时候会同时清零两个输入数据
&&mov ir_num,#00h
&&mov driver_status,#055h
&&mov ir_temp,#0ffh
&&sjmp track_b_loop
&&cjne a,#11h,baira3& & ;ir mode
&&call s_退出模式,清屏
&&mov play_mode,#00h
&&mov ir_code,#0ffh
&&jb stop_key,track_b_loop
&&call delay_100000us
&&jb stop_key,track_b_loop
&&jnb stop_key,$
&&mov ir_code,#0ffh
ab_num_in:
&&mov a,ir_code
&&cjne a,#0ceh,ab_num_ret
&&mov a,ir_temp
&&cjne a,#0ah,irab0
&&mov ir_temp,#0h
&&mov a,driver_status
&&cjne a,#55h,ab_num_56
&&mov ir_num,ir_temp
&&mov driver_status,#56h
&&sjmp ab_num_ret
ab_num_56:
&&mov b,#10
&&mov a,ir_num
&&add a,ir_temp
&&mov ir_num,a
&&mov driver_status,#55h
ab_num_ret:
&&mov ir_code,#0ffh
disp_track_a:
&&call s_ab_fmt
&&call s_a
&&acall disp_ab
disp_track_b:
&&call s_ab_fmt
&&call s_b
&&acall disp_ab
&&Mov DPTR,#NUM
&&mov a,track_a
&&call HEXtodec
&&mov a,track_b
&&call HEXtodec
a_b_start:
&&mov a,track_a
&&cjne a,track_b,abdiff
&&cjne a,end_track,abdiffe
&&;a=end_track
&&mov abb_m,end_m
&&mov abb_s,end_s
&&mov aba_t,track_a
&&mov next_track,track_a
&&sjmp play_aba
abdiffe:& && && &
mov next_track,track_a
inc next_track
call read_toc_cmd
mov abb_m,start_m
mov abb_s,start_s
mov next_track,track_a
mov aba_t,track_a
sjmp play_aba
abdiff:& && && &&&;a&&b
mov a,track_a& && & ;a&b
cjne a,end_track,abddera
mov abb_m,end_m
mov abb_s,end_s
mov aba_t,track_b
sjmp play_aba
mov next_track,track_a
inc next_track
call read_toc_cmd
mov abb_m,start_m
mov abb_s,start_s
mov aba_t,track_b
sjmp play_aba
bmorea:& && && &;a&b
mov a,track_b
cjne a,end_track,abdderb
mov abb_m,end_m
mov abb_s,end_s
mov aba_t,track_a
sjmp play_aba
mov next_track,track_b
inc next_track
call read_toc_cmd
mov abb_m,start_m
mov abb_s,start_s
mov aba_t,track_a
sjmp play_aba
mov next_track,aba_t
call read_toc_cmd
call play_entire_cd_cmd
call read_subchan_cmd
b_msfdec:& && &&&;最终-1,解决显示问题
&&mov a,abb_s
&&cjne a,#00h,bmsfd1
&&mov abb_s,#59
&&dec abb_m
&&dec abb_s
&&mov ir_code,#0bah
&&mov play_mode,#0bah
&&mov driver_status,#55h
ir_loop_t:
&&mov a,ir_temp
&&cjne a,#0ah,irttv
&&mov ir_temp,#0h
&&mov ir_num,ir_temp
ir_tloop1:& && && &&&
&&mov ir_code,#0ffh
&&call ir_track_disp& && &;;;;;;;;;;;;
&&call s_ir_track
&&mov driver_status,#56h
&&call ir_num_key_wait& &&&;红外数字键有效
&&ljmp ir_t_key
&&mov a,ir_code
&&cjne a,#0ceh,ir_tloop1
&&mov a,ir_temp& && && &;;;;;;;;;;;;;;;
&&cjne a,#0ah,irttv2
&&mov ir_temp,#0h
&&mov b,#10
&&mov a,ir_num
&&add a,ir_temp
&&mov ir_num,a
ir_tloop2:
&&mov ir_code,#0ffh
&&call ir_track_disp& && &;;;;;;;;;;;;
&&call s_ir_track
&&mov driver_status,#55h
&&call ir_num_key_wait
&&ljmp ir_t_key
&&iloop2re:
& &mov a,ir_code
& &cjne a,#0ceh,ir_tloop2
& &mov ir_code,#0ffh
& &sjmp ir_loop_t
ir_t_key:& && && &;功能键等待
&&mov a,ir_temp
&&cjne a,#12h,irtka0& & ;ir enter
&&sjmp irtplay
&&cjne a,#0bh,irtka1& & ;ir play
&&sjmp irtplay
&&cjne a,#15h,irtka2& & ;ir clr
&&mov ir_num,#00h
&&mov ir_temp,#00h
&&ljmp ir_tloop2
&&cjne a,#11h,irtka3& & ;ir exit
&&ljmp ir_t_ret
&&jb play_key,irtsp& & ;play
&&call delay_10ms
&&jb play_key,irtsp
&&jnb play_key,$
&&ljmp irtplay
&&jb stop_key,irtk1& & ;stop
&&call delay_10ms
&&jb stop_key,irtk1
&&jnb stop_key,$
&&ljmp ir_t_ret
&&mov a,driver_status
&&cjne a,#56h,irtk22
&&ljmp iloopre
&&ljmp iloop2re
&&mov a,ir_num
&&cjne a,#00h,irpccc
&&mov ir_temp,#00h
&&ljmp ir_track
&&mov a,end_track
&&cjne a,ir_num,irol
&&ljmp play_ir_track
&&jc irover
play_ir_track:
&&mov next_track,ir_num
&&call read_toc_cmd
&&call play_entire_cd_cmd
&&ljmp ir_t_ret
&&mov ir_num,#00h
&&mov ir_temp,#00h
&&ljmp ir_tloop2
&&mov ir_temp,#00h
&&mov ir_code,#0ffh
&&mov driver_status,#0ffh
ir_track_disp:
;;;;;;;;;;;;;
;;;;;;;;;;;;;
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#00h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_start
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea& &
DB 'Starting...& & '
LCM_string:
& & movc a,@a+dptr
& & CALL&&LCDWD& &
& & dec r5
& & cjne r5,#0,tc2
& & sjmp rrt
& & inc r6
& & mov a,r6
& & sjmp LCM_string
& &&&mov a,#016h& &&&;设置DDRAM地址& &修正VFD1602会重复显示上一个字符问题 设置一个无效的地址,跳过显示
& &&&ORL& &A,#80H& &;LCM上的物理地址&&
& &&&CALL&&LCDWC& &;写地址
& & CLR EA& && & ;关中断
& & setb disp_e& &&&;开显示控制
& & call disp_mh& & ;显示 : 号
& & call LCM_Track& &;显示曲目
& & call s_clr_tt& &;空格
& & call LCM_M& &&&;显示分
& & call LCM_S& &&&;显示妙
& & clr disp_e& &&&;关显示控制
& & setb ea& && & ;开中断
& & mov r5,#1
& & mov a,#0Ah& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_tt
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
DB '&&'&&
& & mov a,#0Dh& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov a,#':'
& & CALL&&LCDWD
& &mov dptr,#lcm_num
& &mov a,e_s
& &call hextodec
& &call LCM_Sb
& &call LCM_Sa
& &mov dptr,#lcm_num
& &mov a,e_m
& &call hextodec
& &call LCM_Mb
& &call LCM_Ma
&&LCM_Track:
& &mov dptr,#lcm_num
& &mov a,e_t
& &call hextodec
& &call LCM_Ta
& &call LCM_Tb
& & mov a,#0Eh& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov a,b_bit
& & call tc
& & mov a,#0Fh& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov a,a_bit
& & call tc
& & mov a,#0Bh& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov a,b_bit
& & call tc
& & mov a,#0Ch& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov a,a_bit
& & call tc
& & mov a,#07h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov a,b_bit
& & call tc
& & mov a,#08h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov a,a_bit
& & call tc
movc a,@a+dptr
call lcdwd
DISP_FX_VFD:
mov a,#016h& &&&;设置DDRAM地址& &修正VFD1602会重复显示上一个字符问题 设置一个无效的地址,跳过显示
ORL& &A,#80H& &;LCM上的物理地址&&
CALL&&LCDWC& &;写地址
db''
S_repeat_ab:
& &call s_rpt
& &mov a,track_a
& &call hextodec
& &mov a,#48h& &&&;设置DDRAM地址
& &acall s_atb
& &mov a,#49h& &&&;设置DDRAM地址
& &acall s_ata
& & CLR EA
& & setb disp_e
& & mov a,#4ah& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov a,#'-'
& & CALL&&LCDWD
& & clr disp_e
& & setb ea
& &mov a,track_b
& &call hextodec
& &mov a,#4bh& &&&;设置DDRAM地址
& &acall s_atb
& &mov a,#4ch& &&&;设置DDRAM地址
& &acall s_ata
& & CLR EA
& & setb disp_e
& & mov dptr,#lcm_num2
& & ;mov a,#07h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov a,b_bit
& & call tc
& & clr disp_e
& & setb ea
& & CLR EA
& & setb disp_e
& & mov dptr,#lcm_num2
& & ;mov a,#08h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov a,a_bit
& & call tc
& & clr disp_e
& & setb ea
db''
s_speed:;显示快进速度
&&call s_s_X
& & mov a,#4Fh& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
&&mov a,pause_da
&&mov dptr,#lcm_num
&&cjne a,#1,SSP01
& & mov a,#4
&&jmp SSDRET
& &&&cjne a,#3,SSP02
& & mov a,#3
&&jmp SSDRET
& &&&cjne a,#5,SSP03
& & mov a,#2
&&jmp SSDRET
& &&&cjne a,#7,SSP04
& & mov a,#1
&&jmp SSDRET
& & call tc
& & mov r5,#1
& & mov a,#04Eh& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_x
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
DB 'x'
& &call s_rpt
& &mov a,track_a
& &call hextodec
& &mov dptr,#lcm_num
& &mov a,#49h& &&&;设置DDRAM地址
& &acall s_atb
& &mov a,#4ah& &&&;设置DDRAM地址
& &acall s_ata
&&;mov a,ir_code
&&mov a,play_mode
&&cjne a,#0bah,s_py1
&&call s_repeat_ab
&&mov a,ir_code
&&cjne a,#0eah,s_py2
&&call s_repeat
& &cjne a,#0DEh,s_py3
& &call s_Disc_RPT
& &setb ea
& &call s_playing
& &;call s_volume& && & ;显示音量值点阵图
& &setb ea
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#00h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_cdrom
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea& &
DB ' CD-ROM PLAYER '
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#40h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_design
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
DB 'Design By Wu_Wei '
s_IDE_error1:
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#00h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#IDE_error1
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
IDE_error1:
DB 'IDE Connect Err.'
S_IDE_error2:
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#40h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#IDE_error2
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea& &
IDE_error2:
DB &#39lease check IDE'
S_IDE_error:
call s_IDE_error1
call s_IDE_error2
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#80h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_MCu
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
DB 'Checking IDE... '
s_playing:
& & clr ea
& & setb disp_e
& & mov r5,#14
& & mov a,#40h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_play
& & mov a,#0
& & mov r6,#0h
& & call lcm_string
& & ;call s2spec& & ;显示两个空格& &
& & CLR disp_e
& & setb ea
DB 'Playing...& & '
& & mov a,#4CH& && &&&
& & ORL a,#80H& && && &&&
& & call LCDWC& &
& & mov a,#' '& && &&&
& & call LCDWD
& & mov a,#4DH& && &&&
& & ORL a,#80H& && && &&&
& & call LCDWC& &
& & mov a,#' '& && &&&
& & call LCDWD
& & clr ea
& & setb disp_e
& & mov r5,#10
& & mov a,#40h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_rpt
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
DB 'Repeat:& & '
s_Disc_RPT:
& & call s_rpT
& & clr ea
& & setb disp_e
& & mov r5,#4
& & mov a,#49h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_d_rpt
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
DB 'DISC'
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#40h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#m_a
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
DB 'Set&&[A]& &B '
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#40h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#m_b
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
DB 'Set& &A&&[B]'
S_from_to:
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#00h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#m_ft
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
DB 'From :&&To:&&'
s_slot_sno:
& & ;mov ir_num,#03h
& & CLR EA
& & setb disp_e
& & mov dptr,#lcm_num2
& & mov a,#09h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov a,slot_sn
& & call tc
& & clr disp_e
& & setb ea
s_slot_sec:
& & clr ea
& & setb disp_e
& & mov r5,#8
& & mov a,#00h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#m_slot_sec
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
m_slot_sec:
DB 'Select :'
S_slot_no_disc:
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#40h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_sndc
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
& & ;call s_space
DB ' Slot No Disc&&'
s_slot_info:
& & clr ea
& & setb disp_e
& & mov r5,#8h
& & mov a,#40h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#m_slotinfo
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
&&mov a,#48h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov 2FH,slot_DI
& &&&jnb 78h,s178h
& &&&mov a,#'1'
& &&&jmp sc11
& & s178h:
& &&&mov a,#' '
& & CALL&&LCDWD
&&mov a,#4ah& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& & mov 2FH,slot_DI
& &&&jnb 79h, s179h
& &&&mov a,#'2'
& &&&jmp sc12
& & s179h:
& &&&mov a,#' '
& & CALL&&LCDWD
&&mov a,#4ch& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& &&&mov 2fh,slot_DI
& &&&jnb 7ah, s17ah
& &&&mov a,#'3'
& &&&jmp sc13
& & s17ah:
& &&&mov a,#' '
& & CALL&&LCDWD& &
&&mov a,#4eh& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& &&&mov 2fh,slot_DI
& &&&jnb 7bh, s17bh
& &&&mov a,#'4'
& &&&jmp sc14
& & s17bh:
& &&&mov a,#' '
& & CALL&&LCDWD
& & call DISP_FX_VFD ;消除 VFD会多显示一个字问题
& & CLR disp_e
& & setb ea
m_slotinfo:
DB 'Disc In:'
& & CLR EA
& & acall S_from_to
& & setb disp_e
& & mov a,track_a
& & call hextodec
& & mov dptr,#lcm_num
& & call LCM_ta
& & call LCM_tb& &
& & mov a,track_b
& & call hextodec
& & call LCM_sa
& & call LCM_sb
&&call delay_100000us
& & clr disp_e
& & setb ea
s_ir_track:
& & CLR EA
& & setb disp_e
& & mov a,ir_num
& & call hextodec
& & mov dptr,#lcm_num
& & call LCM_Ta
& & call LCM_Tb& &
& & clr disp_e
& & clr ea
& &call s_select
& &call s_track
& &call delay_100000us
& &;clr disp_e
& &setb ea
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#40h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_select
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
DB 'Select a track '
S_slot_No:& && &&&;显示当前slot 位号
& &mov dptr,#slot_num
& & mov a,#05h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &;LCM上的物理地址&&
& & CALL&&LCDWC& &;写地址
& && & mov a,mech_s_0
& && & clr acc.7
& && & clr acc.6
& && & clr acc.5
& &&&cjne a,#04h,ssn1 ;最大slot 数 4+1=5,slot 0 1 2 3 4
& &&&jmp s_sn
& &&&ssn1:
& &&&jc s_sn
& &&&mov a,#0ah& &;如果但slot的值&5,显示一个 X 符号
& & s_sn:& &
& & call tc
& &&&mov a,#06h& &&&;设置DDRAM地址
& &&&ORL& &A,#80H& &;LCM上的物理地址&&
& &&&CALL&&LCDWC& &;写地址
& &&&mov a,#' '
& &&&CALL&&LCDWD& &;显示一个空格
db 'X'
get_change_status:
mov a,mech_s_0
S_change_status:
& & clr ea
& & call get_change_status
& & cjne a,#01,scgt1
& & mov dptr,#M_sls
& & jmp s_cgt
& & scgt1:
& & cjne a,#02,slret
& & mov dptr,#M_sls
& & jmp s_cgt
& & s_cgt:
& & setb disp_e
& & mov r5,#16
& & mov a,#00h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & slret:
& & setb ea& &
DB 'Loading Slot& &'
DB 'Unloading Slot&&'
&&call s_clr
&&call delay_100000us
&&jnb play_key,spret
&&jnb pause_key,spret
&&call delay_100000us
&&jnb play_key,spret
&&jnb pause_key,spret
&&call delay_100000us
&&jnb play_key,spret
&&jnb pause_key,spret
&&call s_track
&&call lcm_disp
&&call s_pau
&&call delay_100000us
&&jnb play_key,spret
&&jnb pause_key,spret
&&call delay_100000us
&&jnb play_key,spret
&&jnb pause_key,spret
&&call delay_100000us
&&jnb play_key,spret
&&jnb pause_key,spret
&&call delay_100000us
&&jnb play_key,spret
&&jnb pause_key,spret
&&call delay_100000us
&&jnb play_key,spret
&&jnb pause_key,spret
&&;call read_subchan_cmd
&&;mov a,audio_status
& & clr ea
& & setb disp_e
& & mov r5,#14
& & mov a,#40h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_pause
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
DB '&&[--PAUSE--]&&'
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#00h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_clr
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
& & ;call s_space
DB '& && && &'
& & clr ea
& & setb disp_e
& & mov r5,#16
& & mov a,#40h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_load
& & mov a,#0
& & mov r6,#0h
& & call lcm_string& &&&
& & CLR disp_e
& & setb ea
& & ;call s_space
DB 'Now Loading... '
& & clr ea
& & setb disp_e
& & mov r5,#5
& & mov a,#00h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_track
& & mov a,#0
& & mov r6,#0h
& & call lcm_string
& & call s_slot_no
& & CLR disp_e
& & setb ea
DB 'DISC-'
& & clr ea
& & setb disp_e
& & mov r5,#5
& & mov a,#00h& &&&;设置DDRAM地址
& & ORL& &A,#80H& &&&
& & CALL&&LCDWC
& & mov dptr,#M_total
& & mov a,#0
& & mov r6,#0h
& & call lcm_string
& & call s_slot_no
& & CLR disp_e
&

我要回帖

更多关于 图片编码格式 的文章

 

随机推荐