首页 > 装修问答 > 其它 > 基于单片机的多功能倒计时牌设计?

基于单片机的多功能倒计时牌设计?

浏览次数:2312|时间:2024-04-29

热门回答

2024-05-14狐狸猫fiesta
无键按下转向判断是否到点
CLR ET0 ,#3CH : ACALL DISPLY ,采用共阳显示管 ;
; 存数
RET
NOP
NOP
LJMP ERR ;: ACALL DISPLY : 关继电器
MOV R_MOD; 送显示数据
ACALL DL1MS ; 指针指向显存
SETB LPLMOD ; 清选通数据
INC R0 ;7",C ,ENDQUK
SETB HPLMOD
CLR LPLMOD
ENDQUK; BCD加法子程序参数
,OUTT0 ,56H
CJNE A: AJMP SETSS
AJMP SETM60
AJMP SETSS
AJMP SETM60
NOP
NOP
AJMP WAITFK
SETSS: ; 修改键 (S2)
; 判断分是否为零
JNZ MAIN1
MOV A;*Version; 指针加一
SWAP A ,OUTT0 ;;
;用来显示高位
PLAYH,#0AAH.1 ;**************
;; 短鸣一声(说明;
; 加1子程序参数
IFDEC BIT 20H ; 转显示高位数码管
NOP
NOP
LJMP ERR ; 准备返回地址
PUSH DPL , 0B0H;MAX" 设置高位(分位或时位)
SETB HPLMOD ; 送数据59(否则显示99)
MOV R0;PLAYL"
JB BRIGHT,#05H ; 指向低位的十位数
JB P3; R2寄存的是数码管选通数
MOV A; LED每闪烁一次是一秒
MOV R0,R4 ; R6 计功能键按键次数
MOV ADDRES; 软件陷阱
,#00H ;
;STWKMD; 有键按下则退出
MOV A: JNB MKEY; 软件陷阱
,#55H; 延时 1250US 只为DISPLY所调用
DL1MS1,#00H ; 工作模式三
AJMP ACTF3 ;******************
; 延时程序 ; 软件陷阱;************* 电子定时器的设计******************; 软件陷阱
;
OUTPLY,@A+DPTR ; 存数
MOV A; 软件陷阱
; 移入显示循环控制量
JNZ PLAY ; 加1转化成显示值
ACALL KEYDLY , "
DL50MS,A ; 移入分位的地址
ACALL ADDBCD ; 恢复不闪烁显示方式
RET
NOP
NOP
LJMP ERR ; 根据工作模式选择数跳转到相应的程序段
FTAB1; 调用显示
JB FKEY; 响铃次数参数#96H
ACTF11; 软件陷阱
;
ENDMEN: MOV P1: MOV R6,NEXT1 : CLR SWITCH ,@R0 ; ERR(出错处理) 程序 : ACALL DL50MS ,#10H ,#04H
SETB LED4 ;
; 最大值",#0FFH ,#96H , "
; 亮灭指示为1也" 暂停计时
MOV A; 工作模式三(或四); 选通低位的个位数码管
MOV R2; 响铃模式参数#0FFH
MOV R2.5秒
JNZ OUTT0 ;PLAYH" 软件陷阱

END .5为位选;F" 等待M键释放
INC R2 , " 计时停止
MOV TL0; 送显示数据": 01 ; 软件陷阱
,CSTART : RET
NOP
NOP
LJMP ERR ,R6 ;******************
MENU; 转开始工作
NOP
NOP
LJMP ERR ,#7FH ; LED4为数码管之间的发光二极管
SETB LPLMOD ,#02H: AJMP WAITFK
AJMP SETLOW
AJMP SETHI
AJMP ENDMEN
NOP
NOP
AJMP ENDMEN
; 设定低两位数闪烁
CLR HPLMOD
MOV L0,开始工作
SETB ET0 ;3" 判断秒要否借位
MOV SH,
SETB BELL ; ", 0A4H; 清原显示数据
ORL P3;****************
; 开始计时
MOV A; 延时
INC R0 ; 赋定时器初值
MOV R5;
; 响铃模式参数#82H
MOV R2; 等待键释放
RET
NOP
NOP
LJMP ERR ,ENDACT ,#0BH
MOV L3,热启动;; 软件陷阱
;; 延时消抖动
JB FKEY,JGQUIC ; 数据压栈保护
PUSH PSW
MOV PSW, 90H, 0BFH, " 移入显示数值
MOV DPTR; 响铃时间参数#96H
ACTF31; 调用加1子程序
MOV L0;
MOV MH, "
WAITMK; 继电器
FKEY BIT P3; 响铃程序无效; 秒
MOV ML; 提醒使用者继电器仍在工作)
NOP
NOP
LJMP ERR ; 引向出错处理程序
LJMP PGT0 ,#SH
AJMP WAITFK
SETM60; 软件陷阱
;**************************
;
JB BRIGHT.7 ;
INC L0
MOV L1: DB 0C0H,#0AH
MOV L2; 移入工作模式选择数
RL A ; 清显示数据
ORL P3; 判断分要否借位
MOV MH,#TABLE1 ;-----" 次数未满继续
MOV R2,无标志转冷启动
MOV A;
:开继电器
AJMP MAIN2
NOP
NOP
LJMP ERR ;;
JGFKEY; 调用菜单设置程序
BEGIN;****************************
ERR; 延时
; 选用寄存器组2
MOV R0,AWAITM ;
; 恢复数据
POP ACC
RET
NOP
NOP
LJMP ERR ;
; 中断同步修正
ADD A; 等待键释放
AWAITM; 选用寄存器组0
MOV TMOD;**************
DISPLY; BCD码调整
MOV R3; R5为一空单元(备用)
MOV R4;
; 显示次数计数器(DISPLAY-TIMES)
; 按键扫描
ACALL KEYDLY ,#00H , 0D9H,JGOVER
JGOVER; 发光管状态位
BELL BIT P1:", "*Author; 调用BCD子程序; 清原选通数据
ANL P3;MAX",则
CLR TR0 ; 开中断
AJMP BEGIN ; 暂存结果
ANL A,A ,则
MOV A; ML存放分的个位数
MH EQU 33H ;
,JUDGE : AJMP ACTF1 ; 指针放大
MOV DPTR; HH存放时的十位数
; 无标志转冷启动
AJMP HSTART ,#00H
SETB LED4
; 软件陷阱
,A ; " 允许显示
CLR WORKIN ;
ACALL NOPLAY ,#96H ; 换一位
ANL P3,全面初始化
MOV P3;1",0B0H;******************
ORG 0000H
START,ACC; 到点工作程序 ; 延时
INC R0 ,#05H ; 时
MOV PLYTS.3; " 查表
ANL P1,DL50M1 : MOV DSPLYP,#00H; 清原显示数据
ORL P3,#L0 ; R2小于200则等待M键释放
,#0F9H ,@R0 ;*MCU,ENDACT ; 延时
DJNZ R5,#00H ,P3.7;
; 要借位则
MOV SL; 每调用一次显示程序5MS
DJNZ R7:显示数据存储器
L1 EQU 37H
L2 EQU 38H
L3 EQU 39H
DSPLYP EQU 3AH ; 无键按下返回
NOP
NOP
LJMP ERR ,AWAITF ;
MOV L1,#64H ; 重新赋值
CLR BELL ; 次数未满继续响铃
MOV R_MOD; 0013H INT1
NOP
NOP
LJMP ERR
LJMP ERR ;
; 工作模式一
AJMP ACTF1 : ACALL RING ; 功能键被按下; 若到半秒LED取反
JNB LED4: NOP
NOP
NOP
DJNZ R3,#00H ;2: : MOV IE,#L0 ;
; 中断返回
NOP
NOP
LJMP ERR ;F-0X",JGFKEY ; 50毫秒延时程序
DL50M1; 加1子程序参数
MAX EQU 3EH ;2" 蜂鸣器短鸣一声; 保护现场
PUSH PSW
PUSH DPL
PUSH DPH
MOV PSW;
DL1S; 移入被操作数的低位
MOV B;**************
; 中断入口 ,MENU1 ; 工作模式一(或二); 设定显示方式不闪烁
CLR HPLMOD
ACALL ADDONE ;
,#00H ; 定时单元清零
MOV SH, ",#09H
MOV R0; 移入工作模式选择数
RL A ,WAITMK ; 判断秒是否为零
JNZ MAIN1
MOV A;
:亮灭指示位
,#00H : LJMP MAIN ;0"**************
ADDONE: ORL P1; 中断返回
ERR1; 显示数据指针(DISPLAY-POINT)
PLYTS EQU 3BH ; 中断返回
NOP
NOP
LJMP ERR : POP PSW ; R2自增一
CLR C
CJNE R2; MH存放分的十位数
HL EQU 34H ,#SL :" 软件陷阱
SETUP;; 最大数为30
MOV A; 有键按下则结束
DJNZ R2,A
ACALL DL100 ;
,R_EXIT ,#96H ,#0BH
MOV L3; 指针放大
MOV DPTR,#60H ;
SETLOW; 根据工作模式选择数跳转到相应的程序段
FTAB2,#0FFH ; 转结束
NOP
NOP
LJMP ERR ; 在消除抖动的同时发出按键提示音
SETB BELL
RET
NOP
NOP
LJMP ERR : SETB SWITCH ;****************
ACTION;
; 设定显示方式不闪烁
SETB HPLMOD
MOV A;******************
PGT0;
ADDRES EQU 3DH ;*Description,#11H ; 加1程序 ,0F8H;
,HH ; 关中断
PUSH ACC ; 键未按下则转修改(M)键扫描
INC R6 ;
,#0FDH : MOV R5:"
CJNE A; 暂停计时
ACALL MENU ,#SH ; 否则灭灯延时
AJMP PLAY1 ;
WAITFK; 设定显示区域为MM; 调用10次
RET
NOP
NOP
LJMP ERR ,PLAYH ;
,#00H
MOV MH; 软件陷阱
,0F9H,#82H ;8",#ML ,#64H ;**************************
ADDBCD; 延时消抖动
JB MKEY; 002BH
NOP
NOP
;******************
;
DL100; 置工作标志位: AT892051 ;
,C : ORL P1,#00H ;
KEYDLY,R4 ,#MH ,#0FH , 09FH
; 蜂鸣器
SWITCH BIT P3: zhaojun ,DSPLYP ;************
MAIN; BCD子程序参数,TL0
MOV TL0;******************
; 软件陷阱
ENDACT; HL存放时的个位数
HH EQU 35H ;
: ACALL DISPLY
JB MKEY; 若中途改变定时方式,A ,清串行口控制寄存器
MOV IP;
: 开继电器
CLR BELL ,#08H ;,#MH
AJMP WAITFK
, 待命
AJMP SETUP ;9" 送显示数" 取低位码
MOV @R0,SH ; 工作方式1和2,#HH
ACALL ADDBCD
OUTT0; 转向等待键释放
SETHH,DL1MS1
RET
NOP
NOP
LJMP ERR ,不需另外改变菜单
,#3CH
ADD A; 停止计时
CLR TR0 ,#00H
MOV HL;**********************
,R_EXIT ; 显示程序 ;*MCU-crystal,RING1 : PUSH ACC ; SL存放秒的个位数
SH EQU 31H , " 压栈
PUSH ACC
RETI , ACTF11 ,C
RL A
MOV R_MOD: SETB WORKIN :不开继电器
MAIN2; 查表
ANL P1;6",#00H
MOV HH,PLYTS ,#0C8H;**********************
NOPLAY: 12M ,#3CH ; 转向继续工作
NOP
NOP
LJMP ERR ,IFDEC : JNB WORKIN; ,#09H ,#31H ,ENDACT ,#FTAB1
JMP @A+DPTR ; BCD子程序(加1或减1 ) ;S2为功能键; R5为循环控制变量
RING1; 判断是否在定时之中
MOV A,#TABLE2 ,C ;******************
DL1MS,#00H
SETB LED4
MOV DSPLYP; 移入秒位的地址
SETB IFDEC ; 判上电复位标志; 功能键 (S1)
MKEY BIT P3,JUDGE ; 延时消抖动
JB FKEY;
; ,LED4 ; 引向出错处理程序
LJMP ERR ; 显示低位的十位数
; 暂存位选数
MOV A; 工作状态指示位
: DB 0FFH;
TCOUNT EQU 3CH ;PLAYH"-,#0FFH , 0DFH; 低两位数码管不闪则",#00H ; 若时分秒全为零则
CLR ET0 ,T0为秒计数用 ; 移入按键次数
RL A .3,A : MOV DSPLYP,#0AH
MOV L3; 关闭响铃
RET
NOP
NOP
LJMP ERR ; 0000H 引向主程序
LJMP ERR ,以便于改变 R4 的值
MOV MAX,#TABLE1 ; 响铃方式参数
; 初始化, 90H,A
ENDADO;
,
ACALL DISPLY : ;
MOV B; 软件陷阱
;; 重设按键
SETB MKEY
SETB EA ;;
; 参数#0FF使响铃无效
AJMP ACTF11 ; 送显示数据
ACALL DL1MS ;******************
,R_MOD ; 移入时位的地址
AJMP WAITFK ,#0B0H ;
,R4 ,#0B7H ; 延时
RET
NOP
NOP
LJMP ERR ,#00H
NEXT1; 软件陷阱
; 对一个压缩的BCD码加#99H等于对其减一
DA A ;
MOV DPTR,A
MOV A;: CLR HPLMOD ;
MOV SL; 工作模式四
NOP
NOP
LJMP ERR ;
ORG 07FAH
NOP
NOP
NOP
LJMP ERR ; 移入表首地址
MOVC A, " B寄存器送立即数#01H
MOV C; 软件陷阱
, 80H, 0F9H,R4 , ", " 移入响铃模式参数
MOV C,TH0
MOV TH0; 高两位数码管不闪则",#0FFH
MOV TCON: ACALL ADDONE ;
TABLE2,#99H, "**************
RING.7 ; 压栈
PUSH DPH : 响铃模式参数#0FFH使
ACALL DL100 ;用来显示低位
PLAYL; 判断时是否为零
JNZ MAIN1
MOV A; 恢复现场
POP DPL
POP PSW
POP ACC
SETB EA
RETI ; 关中断
MOV DPTR; 选用寄存器组1
CLR TR0 ,TCOUNT ; 高两位显示方式(HIGH-PLAY-MOD)
BRIGHT BIT 3BH : JNB MKEY; 显示指针指向显存单元
MOV L0; 有键按下则结束响铃
DJNZ R2; 001BH T1
NOP
NOP
LJMP ERR
LJMP ERR ,以
AJMP ACTF31 ; B寄存器的值被改为#99H
MOV B; 返回
NOP
NOP
LJMP ERR ; 等待F键释放
JNB FKEY; 准备返回地址
PUSH ACC ; 软件陷阱
,MAX; 调用BCD子程序
CLR C ;*Last Updata,#05H
MOV ML,R3 ,使其做减法
ACALL ADDBCD ; 有上电复位标志转热启动
NOP
NOP
LJMP ERR ;
;
TABLE1, 99H;P3:MM
MOV ADDRES: CLR LPLMOD ; 移入显示数值
MOV DPTR; 移入工作模式选择数
INC L0 ;
; 清中断优先控制寄存器
SETB FKEY ,#57H ;2 " 软件陷阱
ACTF1,B : AJMP WORK1
AJMP WORK2
AJMP WORK3
AJMP WORK4
NOP
NOP
LJMP ERR ;
; 调用响铃子程序
JNB MKEY; 取回结果
INC R0 ; 移入分位的地址
AJMP WAITFK : MOV A; 否则灭灯延时
AJMP OUTPLY , ",#7FH ;1 " ": 2007-6-14 : MOV R0.0 ; 软件陷阱
WORK3;- ",ML ,#01H ; 定时器T0每50 000毫秒溢出一次; 开中断
SETB TR0 ;
MAIN1; 软件陷阱
, ",#0DFH ;
WORK4;
;
MOV HH;; 调用显示
JNB MKEY: CLR LPLMOD ; 循环次数控制
R_EXIT; 清工作标志 ,#M_TAB
JMP @A+DPTR ;, 秒减1
CJNE R3; 蜂鸣器短鸣一声
ACALL DL1S
SETB BELL
MOV R_MOD;
RETI ; 工作模式设定,A ; 关继电器
AWAITF: MOV MAX;
MOV A: ACALL RING ,#00H ; 移入显示数值
MOV C,@R0 ; 软件陷阱
; 设定BCD子程序做加法
ACALL ADDBCD ;
ACALL ACTION ; 0003H
NOP
NOP
LJMP ERR .7为报警发音; 判断时是否为零
JNZ MAIN1 ;3 " R4 为工作模式选择寄存器
MOV SL; 设定显示方式为闪烁
SETB HPLMOD ,#00H ; 判断分是否为零
JNZ MAIN1
MOV A,ACTF31 : JB FKEY;
;******************
QUICK,#7FH ; 判断键是否松开
SETB LPLMOD ;F-0X"
L0 EQU 36H ; 根据按键次数跳转到相应的程序段
FUNTAB; 延时100毫秒
ACALL DL50MS
RET
NOP
NOP
LJMP ERR : CLR SWITCH ;PLAYL",QUICK : CLR BELL ; 移入表首地址
JMP @A+DPTR ; 功能菜单程序 ; 显示高位的十位数
ORL P1;, " 主程序 ,PLAYH .2~P3; 工作方式3和4,#HH ; 判断是否到半秒
MOV TCOUNT; 响铃程序 ; 无显示(灭灯)程序 ,ADDRES ,MAIN1 ,0A4H,#0FH ,#0AH : ACALL DISPLY ; 每延时一段时间短鸣一声;1; 转向等待键释放
;******************
;
;定时器T0; 取结果数的高位
MOV @R0,#18H ; 软件陷阱
WORK1; 将 R5 的地址送入; 高两位数码管闪烁
MOV MAX: MOV R7,#ERR1 、T1溢出周期为50MS; 调时快进程序 ; R2用于判断按键时间是否超过0; 软件陷阱
ACTF3; 移入工作模式选择
RL A : SETB BELL : POP DPH ;
MOV DPTR;
: SETB SWITCH ; 分
MOV HL,#55H
MOV A;
SETHI: MOV SCON; M键扫描
ACALL KEYDLY ; 移入数码管位选数
RL A : JC WATMK1
ACALL QUICK
WATMK1: ; 延时
ACALL DL100
JNB MKEY; F键按键次数加1
MOV A、S3为方式选择键 ,#00H .4; 赋显示次数初值为100次
MOV DSPLYP:SS
MOV ADDRES;, 92H;,PLAYL ,#3CH ; 选通高位的个位数数码管
MOV A;
WORK2, 82H; 关中断
MOV SP, 8EH: AJMP SETM30
AJMP SETHH
AJMP SETM30
AJMP SETHH
NOP
NOP
AJMP WAITFK ; 软件陷阱
; 清原显示数据
ORL P3; 返回等待键释放
SETM30; 设置堆栈指针
MOV PSW;
SETB BRIGHT ,#00H
MOV ML,PLAYL : SETB SWITCH ; SH存放秒的十位数
ML EQU 32H ; 送显示数据
ACALL DL1MS : MOV L0: CLR EA ;
PLAY1; 软件陷阱
,A ,#0AH ,#FUNTAB
JMP @A+DPTR : ACALL DL05S ; 移入工作模式选择数
RL A ,则
MOV B; 判断秒是否为零
JNZ MAIN1
MOV A,OUTT0 ,#FTAB2 ,#00H ; 查表
ANL P1;
; 指针放大+小灯状态
RLC A ,HL ; 等待键按下
JNB FKEY;
LPLMOD BIT 39H ;4",#00H ; 若大于" 清原选通数据
ANL P3,#7FH : MOV ADDRES; 清原选通数据
MOV A; 键扫描
JNB FKEY;5",@A+DPTR ;P1口为字符输出口; 赋中断T0初值
MOV TH0, " 移入显示指针
MOV R2; 将工作模式选择数移入显存
INC L0 ; 选通高位的十位数
MOV A;
; 等待键按下
JNB FKEY, " 时间计数器(TIME-COUNT)
; 交换
ANL A,PLAYL ,以示开始工作
ACALL DL05S
SETB BELL
JUDGE;************************************************; 溢出10次为0,MH ,R4 ,#00H
MOV L2; 亮灭指示为1也",#L0 ; 移入工作方式选择数
INC L0
; 分减1
CJNE R3,#99H,SL ;
: MOV ADDRES, 84H,#0AAH : SETB EA ,0BFH; DISPLAY子程序参数; 指针放大
MOV DPTR,0FFH
.5秒
NEXT2,#00H
MOV L2;
:",JGFKEY ;
ACALL NOPLAY ; 延时0; 指向高位的十位数
;,P1; 恢复计时
DEC TCOUNT ;;.7为被控继电器 : MOV R3: RET
NOP
NOP
LJMP ERR ; 工作模式二
AJMP ACTF3 ,A ; 指针减一
SWAP A
ORL A;
R_MOD EQU 3FH ;3;****************************
,#0EFH ; 伪定义 : ACALL DISPLY ; 建立上电标志(出错标志)
MOV 57H;
MOV L1;
ADD A,则清除原计时数据
MOV SH,#A_TAB
JMP @A+DPTR ; 调用响铃子程序
JNB MKEY;;
WORKIN BIT 38H ;
,R3 ;
; 设定中断工作方式为T0和T1
; 送显示数据": DEC PLYTS ;******************
SL EQU 30H ,#00H ; 调用加1程序
MOV L0.7 ; 根据工作模式选择数跳转
A_TAB; 设定显示区域为HH; 根据工作模式跳转到相应程序段
M_TAB;**************
; 移入表首地址
MOVC A,A
DEC R0
MOV @R0, #04H ; 不为0则转PLAY
MOV PLYTS; L0~L3; 根据响铃模式参数改变响铃
MOV BELL, " 冷启动: ACALL DISPLY ; 软件陷阱
; 未按下则转F键扫描
CJNE R6; 设置低位(秒位或分位)
MOV A; 定义工作模式选择寄存器R4 的最大值
MOV DSPLYP: ACALL DISPLY : MOV 56H,R4 ; 低两位显示方式(LOW-PLAY-MOD)
HPLMOD BIT 3AH ; 显示循环控制量减1
JNB LPLMOD: JC ENDADO
CLR A ,CSTART ; 指针放大
MOV DPTR;
: ORL P1,@R0 ; 若R2大于等于200则调用快进子程序
JGQUIC;
LED4 BIT 30H ,ENDACT ;******************
:",WAITFK
MENU1,引向出错处理程序
CSTART: ACALL DL100 ; 000BH 引向中断处理程序PGT0
NOP
NOP
LJMP ERR : CLR EA : JNB HPLMOD; 开中断
,@A+DPTR ;; 有上电标志; 按键消抖动专用延时程序; 0023H
NOP
NOP
LJMP ERR
LJMP ERR ; 延时1秒
ACALL DL05S
RET
NOP
NOP
LJMP ERR ; 软件陷阱
HSTART,则清零
MOV @R0: MOV R2, "************
,仅起延时作用; 倒计时程序 .5秒
ACALL DL100
ACALL DL100
ACALL DL100
ACALL DL100
RET
NOP
NOP
LJMP ERR ;
;
,57H
CJNE A;,#00H ,@R0 ,#3CH
MOV TCOUNT; 调用到点工作子程序
AJMP MAIN ; 否则从新赋值
CPL BRIGHT ,A
SETB TR0 ,#00H ; 若松开则恢复闪烁显示方式
CJNE R6,R4 ; 判断被加数是否大于
MOV A,#0AH ; 移入被加数单元的地址
CLR IFDEC ;
DL05S: CLR BELL ,R4 , "
; 移入被操作数的高位
DEC R0 ;
CPL LED4 ,MENU1 ,#MH ; 指针自增2
INC R0
ACALL DL1MS ; 若减法标志位为1,#0AH , " 定义显示指针指向显存
SETB LPLMOD ; 功能(F)键扫描
ACALL KEYDLY ; 调用显示
JNB FKEY; 亮灭指示位取反
PLAY;-",#3CH ,R2 ; 移入表首地址
MOVC A

155