⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ykds.asm

📁 可设定时间的遥控倒计时定时器,可选择15/30/45分钟倒计时
💻 ASM
字号:
;电子制作实验室http://www.xie-gang.com/
;可设定时间的遥控倒计时定时器,可选择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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -