新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 智能定时插座程序

智能定时插座程序

作者:时间:2012-10-27来源:网络收藏

;**************************************************************
;电院 单片机设计
:智能

;**************************************************************
;功能描述:带键盘设置的时间计数器
;功能:实现1分钟到99小时99分钟内的定时。可定时关机或定时开机。
;各个键的功能:
;S1:小时十位调整
;S2:小时个位调整
;S3;分钟十位调整
;S4:分钟各位调整
;可扩展功能:时间显示
;硬件描述:
;P0口显示字段。P2.0-2.3共阳控制端。P1.0-P1.3按键
;P3.4
;**************************************************************
STARTRUN BIT 01H;开始运行标志
KEYOK BIT 00H;有键按下标志
SCOUNT EQU 21H;分计数器
SETVAL EQU 22H;预置分值储存单元
SCOUNT2 EQU 26H;小时计数器
SETVAL2 EQU 27H;预置小时储存单元
TCOUNT EQU 24H;;秒计数器
TCOUNTER EQU 250;软件计数器的计数值,X定时器4MS等于1S
KEYVAL EQU 25H;键值储存单元
DISPBUF EQU 58H;显示缓冲区
COUNTER EQU 57H;计数器,显示程序通过它得知现在正在显示的
TMRVAR EQU 61536;设定4MS。65536-4000定时器初值
ORG 0000H
JMP START
ORG 0*8+3;INTO中断入口
RETI
ORG 1*8+3;定时器0中断入口
LJMP INT_T0
ORG 2*8+3
RETI
ORG 3*8+3
RETI
ORG 4*8+3
RETI
;*******************主程序设定************************************
START:
MOV R7,#60
MOV R4,#60
MOV SP,#5FH
MOV SCOUNT,#0
MOV SCOUNT2,#0
MOV SETVAL,#00;启动程序默认值为0
MOV SETVAL2,#00
MOV SCOUNT,SETVAL
MOV SCOUNT2,SETVAL2
CLR KEYOK
CLR STARTRUN
CALL INIT_T0
SETB EA
;********************主程序开始***************************************
LOOP:
CALL KEY;调用键盘程序
JB KEYOK,KEYPROC;如果有键按下,转键盘处理程序
NEXT:
MOV A,SCOUNT;获取分的数值
MOV B,#10
DIV AB
NEXT1:
MOV DISPBUF+2,A;送显示缓冲区
MOV DISPBUF+3,B
NEXT2:
MOV A,SCOUNT2;获取小时的数值
MOV B,#10
DIV AB
NEXT3:
MOV DISPBUF,A
MOV DISPBUF+1,B

JMP LOOP
;*******************键值处理程序****************************************
KEYPROC:
MOV A,KEYVAL;取得键值
JZ KEY1;如果键值是0,转
DEC A
JZ KEY2;如果键值是1,转
DEC A
JZ KEY3;如果键值是2,转
JMP KEY4;如果键值是3,转
KEY1:;对小时十位进行操作
INC DISPBUF;将显示缓冲区的数加1
MOV A,DISPBUF
CJNE A,#9,EFT01
MOV DISPBUF,#0
SETB STARTRUN

EFT01:;键值处理
MOV B,#10
MUL AB
ADD A,DISPBUF+1
MOV SETVAL2,A
MOV SCOUNT2,SETVAL2
SETB STARTRUN
JMP LOOP
KEY2:

INC DISPBUF+1
MOV A,DISPBUF+1
CJNE A,#10,EFT02
MOV DISPBUF+1,#0
SETB STARTRUN
EFT02:
MOV A,DISPBUF
MOV B,#10
MUL AB
ADD A,DISPBUF+1
MOV SETVAL2,A
MOV SCOUNT2,SETVAL2
SETB STARTRUN
JMP LOOP

KEY3:
INC DISPBUF+2
MOV A,DISPBUF+2
CJNE A,#6,LEFT0
MOV A,#0
SETB STARTRUN
LEFT0:
MOV B,#10
MUL AB
ADD A,DISPBUF+3
MOV SETVAL,A
MOV SCOUNT,SETVAL
SETB STARTRUN
JMP LOOP
KEY4:
INC DISPBUF+3
MOV A,DISPBUF+3
CJNE A,#10,REFT0
MOV DISPBUF+3,#0
SETB STARTRUN
REFT0:
MOV A,DISPBUF+2
MOV B,#10
MUL AB
ADD A,DISPBUF+3
MOV SETVAL,A
MOV SCOUNT,SETVAL
SETB STARTRUN
JMP LOOP
;**************键盘程序********************************************************
KEY:
MOV P1,#0FFH
CLR KEYOK
MOV A,P1
ORL A,#11110000B
CPL A
JZ KEY_RET
CALL DELAY
MOV A,P1
ORL A,#11110000B
CPL A
JZ KEY_RET
SETB KEYOK
JNB ACC.0,KEY_1
MOV KEYVAL,#0
JMP KEY_RET
KEY_1:
JNB ACC.1,KEY_2
MOV KEYVAL,#1
JMP KEY_RET
KEY_2:
JNB ACC.2,KEY_3
MOV KEYVAL,#2
JMP KEY_RET
KEY_3:

MOV KEYVAL,#3


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭