www.pudn.com > 单片机实验板程序.rar > ykds.asm, change:2004-11-10,size:3546b


;斯玛特电脑服务中心网站HTTP://smt666.51.net 
;可设定时间的遥控倒计时定时器,可选择15/30/45分钟倒计时 
;倒计时时间由800米遥控器来控制 
 
a_bit equ 20h ;数码管个位数存放内存位置 
b_bit equ 21h ;数码管十位数存放内存位置 
temp equ 22h ;计数器数值存放内存位置 
 
;开机初始化 
MOV P0,#0FFH;使显示时间数码管熄灭 
MOV P1,#0FFH;将P1口设定为输入口 
CLR P1.7;点亮LED 
 
;等待键盘输入 
START:JNB P1.6,$;循环判断遥控接收头第17脚是否有高电平信号输出? 
ACALL DELAY10;延时10毫秒触点消抖 
JNB P1.6,START;如果是干扰就返回 
CLR P2.5;蜂鸣器鸣叫一声,表示遥控接收收到 
ACALL DELAY 
SETB P2.5 
;读遥控接收头四路数据,获得倒计时时间的子程序 
K1:JNB P1.2,K2;判断数据A是否有信号输出? 
ACALL DELAY10;延时10毫秒触点消抖 
JNB P1.2,K1;如果是干扰就返回 
MOV TEMP,#15;设定倒计时时间为15分钟 
K2:JNB P1.3,K3;判断数据B是否有信号输出? 
ACALL DELAY10;延时10毫秒触点消抖 
JNB P1.3,K2;如果是干扰就返回 
MOV TEMP,#30;设定倒计时时间为30分钟 
K3:JNB P1.4,DISPLAY;判断数据C是否有信号输出? 
ACALL DELAY10;延时10毫秒触点消抖 
JNB P1.4,K3;如果是干扰就返回 
MOV TEMP,#45;设定倒计时时间为45分钟 
K4:JNB P1.5,DISPLAY;判断数据D是否有信号输出? 
ACALL DELAY10;延时10毫秒触点消抖 
JNB P1.5,K4;如果是干扰就返回 
AJMP OVER 
 
;数码管显示定时时间的程序 
display:CLR P2.4;使继电器1释放,开始定时(开机时继电器处于吸合状态) 
CLR P2.3;使继电器2释放,开始定时(开机时继电器处于吸合状态) 
MOV R2,#120 
AB:MOV R3,#250 
TIME1:mov a,temp ;将temp中的十六进制数转换成10进制  
mov b,#10 ;10进制/10=10进制 
div ab 
mov b_bit,a ;十位在a 
mov a_bit,b ;个位在b 
 
mov dptr,#numtab ;指定查表启始地址 
mov r0,#4  
dpl1: mov r1,#250 ; 
dplop: mov a,a_bit ;取个位数 
MOVC A,@A+DPTR ;查个位数的7段代码 
mov p0,a ;送出个位的7段代码 
clr p2.7 ;开个位显示 
ACALL DELY1;显示1毫秒 
setb p2.7;关闭个位显示,防止鬼影 
mov a,b_bit ;取十位数 
MOVC A,@A+DPTR ;查十位数的7段代码 
mov p0,a ;送出十位的7段代码 
clr p2.6 ;开十位显示 
ACALL DELY1;显示1毫秒 
setb p2.6;关闭十位显示,防止鬼影 
 
;插入一段判断定时过程中是否有遥控信号输入的程序段 
G1:JNB P1.6,M33;循环判断遥控接收头第17脚是否有高电平信号输出? 
ACALL DELAY10;延时10毫秒触点消抖 
JNB P1.6,G1;如果是干扰就返回 
CLR P2.5;蜂鸣器鸣叫一声,表示遥控接收收到 
ACALL DELAY 
SETB P2.5 
;读遥控接收头四路数据,获得倒计时时间的子程序 
K11:JNB P1.2,K21;判断数据A是否有信号输出? 
ACALL DELAY10;延时10毫秒触点消抖 
JNB P1.2,K11;如果是干扰就返回 
MOV TEMP,#15;设定倒计时时间为15分钟 
K21:JNB P1.3,K31;判断数据B是否有信号输出? 
ACALL DELAY10;延时10毫秒触点消抖 
JNB P1.3,K21;如果是干扰就返回 
MOV TEMP,#30;设定倒计时时间为30分钟 
K31:JNB P1.4,K41;判断数据C是否有信号输出? 
ACALL DELAY10;延时10毫秒触点消抖 
JNB P1.4,K31;如果是干扰就返回 
MOV TEMP,#45;设定倒计时时间为45分钟 
K41:JNB P1.5,M33;判断数据D是否有信号输出? 
ACALL DELAY10;延时10毫秒触点消抖 
JNB P1.5,K41;如果是干扰就返回 
AJMP OVER 
 
M33:djnz r3,TIME1;2毫秒循环执行250次,时间约0.5秒 
CPL P1.7;使LED闪光,表示在定时过程中 
djnz r2,AB ;循环执行120次,时间为1分钟 
 
DEC TEMP;满一分钟对定时时间减1 
MOV A,TEMP 
JNZ DISPLAY;判断TEMP的数值是否为0?不为0循环  
 
;结束定时 
OVER:MOV P0,#0FFH 
MOV TEMP,#0 
MOV P2,#0FFH 
SETB P1.7 
JB P1.5,$ 
AJMP START;退到开机初始化状态 
 
;1毫秒延时子程序 
 DELY1:MOV R4,#2 
    D1:MOV R5,#248 
       DJNZ R5,$ 
       DJNZ R4,D1 
       RET 
 
;10毫秒延时子程序 
DELAY10:MOV R4,#20 
    D2:MOV R5,#248 
       DJNZ R5,$ 
       DJNZ R4,D2 
       RET 
 
DELAY:MOV R4,#02H;延时子程序,12M晶振延时约1秒 
L3: MOV R2 ,#0FAH  
L1: MOV R3 ,#0FAH  
L2: DJNZ R3 ,L2  
DJNZ R2 ,L1 
DJNZ R4 ,L3  
RET  
 
;实验板上的两位一体的数码管0~9各数字的显示代码 
numtab: DB 30H,0FCH,0A2H,0A4H,06CH,25H,21H,0BCH,20H,24H 
 
end