电铃程序.docx

上传人:b****6 文档编号:3604615 上传时间:2022-11-24 格式:DOCX 页数:30 大小:20.50KB
下载 相关 举报
电铃程序.docx_第1页
第1页 / 共30页
电铃程序.docx_第2页
第2页 / 共30页
电铃程序.docx_第3页
第3页 / 共30页
电铃程序.docx_第4页
第4页 / 共30页
电铃程序.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

电铃程序.docx

《电铃程序.docx》由会员分享,可在线阅读,更多相关《电铃程序.docx(30页珍藏版)》请在冰豆网上搜索。

电铃程序.docx

电铃程序

;**************教学打铃控制器程序*********

;CPU:

AT89S52,Fosc=12MHz

;++++++++++++++++++变量定义+++++++++++++++

SET_TIMEBITP1.0;时间设定

SET_ALARMBITP1.1;打铃设定

LEFTBITP1.2;左移位

UPBITP1.3;上翻/加1

DOWNBITP1.4;下翻/减1

RIGHTBITP1.5;右移位

ESCBITP1.6;取消/退出

ENTERBITP1.7;确认

KEY_BUFEQU30H;原按键状态

KEY_STEQU31H;键闭合标志,ON:

0FFH,OFF:

00H

SCLBITP3.3;IIC时钟线

SDABITP3.2;IIC数据线

FLASH_SBITP3.1;秒闪

CONTRELBITP3.4;控制;1=ON

H_MEMEQU10H;时

M_MEMEQU11H;分

S_MEMEQU12H;秒

CT_50MSEQU13H;50mS计数器

NEW_TIMEEQU14H;时间更新标志,0FFH更新

DIS_MEM1EQU15H;显示数据存储器1

DIS_MEM2EQU16H;显示数据存储器2

DIS_MEM3EQU17H;显示数据存储器3

DIS_BUF1EQU20H;显示缓冲器1(段码,左)

DIS_BUF2EQU21H;显示缓冲器2(段码)

DIS_BUF3EQU22H;显示缓冲器3(段码)

DIS_BUF4EQU23H;显示缓冲器4(段码)

DIS_BUF5EQU24H;显示缓冲器5(段码)

DIS_BUF6EQU25H;显示缓冲器6(段码,右)

AL_NUMBEREQU26H;打铃序号

AL_TOTAEQU27H;打铃点总数

ALARM_STEQU28H;打铃状态,0FFH正在打铃

TIME_OVEREQU29H;按键返回时间计数器

TOTA_ADDREQU60H;打铃点总数在24C02中的存储地址

ORG0000H

AJMPSTART

ORG0002BH

AJMPINT_T0;T2中断向量

ORG0030H

START:

MOVSP,#60H

CLRCONTREL

CLRFLASH_S

MOVH_MEM,#12

MOVM_MEM,#0

MOVS_MEM,#0

MOVCT_50MS,#20

MOVNEW_TIME,#0

MOVKEY_ST,#0

MOVR4,#TOTA_ADDR;从24C02读打铃时间点总数

MOVR0,#AL_TOTA

MOVR3,#1

ACALLRD_EEROM

MOVA,AL_TOTA;总数大于0,小于、等于40判断

JZJMP_RD

CLRC

SUBBA,#40

JCRD_AL_LIST

MOVAL_TOTA,#0

MOVR4,#TOTA_ADDR

MOVR3,#1

MOVR0,#AL_TOTA

ACALLWR_EEROM

SJMPJMP_RD

RD_AL_LIST:

MOVA,AL_TOTA;从24C02读打铃时间表

RLA

MOVR3,A

;R0:

RAM地址指针,R2:

8位移位计数器

;R3:

数据字节计数器

;R4:

24C02存储地址

MOVR0,#80H

MOVR4,#00H

ACALLRD_EEROM

JMP_RD:

MOVTH2,#3CH;T2工作方式、时间常数

MOVTL2,#0ABH

MOVRCAP2H,#3CH

MOVRCAP2L,#0ABH

MOVT2CON,#04H

SETBET2;开中断

SETBEA

WAITE:

ACALLDISPLAY

ACALLKEY_CHECK

MOVA,KEY_ST

CJNEA,#00H,KEY_MAIN

MOVA,NEW_TIME

CJNEA,#0FFH,WAITE

MOVNEW_TIME,#0

NEW_DIS:

MOVA,H_MEM

ACALLHBCD

MOVDIS_MEM1,A

MOVA,M_MEM

ACALLHBCD

MOVDIS_MEM2,A

MOVA,S_MEM

ACALLHBCD

MOVDIS_MEM3,A

ACALLDIS_TIME

MOVA,ALARM_ST

JNZCHEK_OFF

MOVA,S_MEM

JNZWAITE

ACALLCHEK_AL;打铃检测

CHEK_OFF:

MOVA,S_MEM

CLRC

SUBBA,#20

JCWAITE

CLRCONTREL

MOVALARM_ST,#0

SJMPWAITE

;SJMP$

;********打铃控制子程序***************

CHEK_AL:

MOVA,AL_TOTA

JZCHEK_END

MOVR0,#80H

MOVR6,AL_TOTA

CHK_LOOP:

MOVA,@R0

CJNEA,H_MEM,NEXT_AL_1

INCR0

MOVA,@R0

CJNEA,M_MEM,NEXT_AL_2

SETBCONTREL

MOVALARM_ST,#0FFH

SJMPCHEK_END

NEXT_AL_1:

INCR0

NEXT_AL_2:

INCR0

DJNZR6,CHK_LOOP

CLRCONTREL

MOVALARM_ST,#0

CHEK_END:

RET

;********键盘处理程序段***************

KEY_MAIN:

MOVKEY_ST,#0

JNBSET_TIME,TIME_SET

JNBSET_ALARM,JMP_SET_A

SJMPNEW_DIS

JMP_SET_A:

AJMPALARM_SET

;========时间设置=====================

TIME_SET:

MOVTIME_OVER,#30

MOVR5,H_MEM

MOVR6,M_MEM

MOVR7,S_MEM

SET_H:

JNBFLASH_S,GATE_H

MOVDIS_MEM1,#0AAH

SJMPCLS_H

GATE_H:

MOVA,R5

ACALLHBCD

MOVDIS_MEM1,A

MOVA,R6

ACALLHBCD

MOVDIS_MEM2,A

MOVA,R7

ACALLHBCD

MOVDIS_MEM3,A

CLS_H:

ACALLDIS_TIME

ACALLDISPLAY

MOVA,NEW_TIME

CJNEA,#0FFH,JMP_1

MOVNEW_TIME,#0

DJNZTIME_OVER,JMP_1

AJMPWAITE

JMP_1:

ACALLKEY_CHECK

MOVA,KEY_ST

CJNEA,#0FFH,SET_H

MOVKEY_ST,#0

MOVTIME_OVER,#30

JNBUP,H_UP

JNBDOWN,H_DOWN

JNBLEFT,JMP_SET_S

JNBRIGHT,SET_M

JNBESC,JMP_ESC

JNBENTER,JMP_OK

SJMPSET_H

JMP_ESC:

AJMPTIME_SET_ESC

JMP_OK:

AJMPTIME_SET_OK

JMP_SET_S:

AJMPSET_S

H_UP:

CJNER5,#23,INC_H

MOVR5,#0FFH

INC_H:

INCR5

AJMPGATE_H

H_DOWN:

CJNER5,#0,DEC_H

MOVR5,#24

DEC_H:

DECR5

AJMPGATE_H

;===========分钟设置===============

SET_M:

JNBFLASH_S,GATE_M

MOVDIS_MEM2,#0AAH

SJMPCLS_M

GATE_M:

MOVA,R6

ACALLHBCD

MOVDIS_MEM2,A

MOVA,R5

ACALLHBCD

MOVDIS_MEM1,A

MOVA,R7

ACALLHBCD

MOVDIS_MEM3,A

CLS_M:

ACALLDIS_TIME

ACALLDISPLAY

MOVA,NEW_TIME

CJNEA,#0FFH,JMP_2

MOVNEW_TIME,#0

DJNZTIME_OVER,JMP_2

AJMPWAITE

JMP_2:

ACALLKEY_CHECK

MOVA,KEY_ST

CJNEA,#0FFH,SET_M

MOVKEY_ST,#0

MOVTIME_OVER,#30

JNBUP,M_UP

JNBDOWN,M_DOWN

JNBLEFT,JMP_SET_H

JNBRIGHT,SET_S

JNBESC,TIME_SET_ESC

JNBENTER,TIME_SET_OK

SJMPSET_M

M_UP:

CJNER6,#59,INC_M

MOVR6,#0FFH

INC_M:

INCR6

AJMPGATE_M

M_DOWN:

CJNER6,#0,DEC_M

MOVR6,#60

DEC_M:

DECR6

AJMPGATE_M

JMP_SET_H:

AJMPSET_H

;============秒设置=================

SET_S:

JNBFLASH_S,GATE_S

MOVDIS_MEM3,#0AAH

SJMPCLS_S

GATE_S:

MOVA,R7

ACALLHBCD

MOVDIS_MEM3,A

MOVA,R5

ACALLHBCD

MOVDIS_MEM1,A

MOVA,R6

ACALLHBCD

MOVDIS_MEM2,A

CLS_S:

ACALLDIS_TIME

ACALLDISPLAY

MOVA,NEW_TIME

CJNEA,#0FFH,JMP_3

MOVNEW_TIME,#0

DJNZTIME_OVER,JMP_3

AJMPWAITE

JMP_3:

ACALLKEY_CHECK

MOVA,KEY_ST

CJNEA,#0FFH,SET_S

MOVKEY_ST,#0

MOVTIME_OVER,#30

JNBUP,S_UP

JNBDOWN,S_DOWN

JNBLEFT,JMP_SET_S_M

JNBRIGHT,JMP_S_H

JNBESC,TIME_SET_ESC

JNBENTER,TIME_SET_OK

SJMPSET_S

JMP_S_H:

AJMPSET_H

S_UP:

CJNER7,#59,INC_S

MOVR7,#0FFH

INC_S:

INCR7

AJMPGATE_S

S_DOWN:

CJNER7,#0,DEC_S

MOVR7,#60

DEC_S:

DECR7

AJMPGATE_S

JMP_SET_S_M:

AJMPSET_M

;======================================

TIME_SET_ESC:

AJMPNEW_DIS;时间设置取消/返回

TIME_SET_OK:

MOVS_MEM,R7;时间设置确认/返回

MOVM_MEM,R6

MOVH_MEM,R5

AJMPNEW_DIS

;=========打铃设置程序段===============

ALARM_SET:

MOVTIME_OVER,#20

MOVAL_NUMBER,AL_TOTA

AL_LIST:

MOVA,AL_NUMBER

JNZNUMBER_N

MOVDIS_MEM1,#0

MOVDIS_MEM2,#0AAH

MOVDIS_MEM3,#0AAH

ACALLDIS_TIME

AJMPWAITE_A

NUMBER_N:

DECA

RLA

ADDA,#80H

MOVR0,A

MOVA,AL_NUMBER

ACALLHBCD

MOVDIS_MEM1,A

MOVA,@R0

ACALLHBCD

MOVDIS_MEM2,A

INCR0

MOVA,@R0

ACALLHBCD

MOVDIS_MEM3,A

ACALLDIS_TIME

WAITE_A:

ACALLDISPLAY

MOVA,NEW_TIME

CJNEA,#0FFH,JMP_4

MOVNEW_TIME,#0

DJNZTIME_OVER,JMP_4

AJMPWAITE

JMP_4:

ACALLKEY_CHECK

MOVA,KEY_ST

CJNEA,#0FFH,WAITE_A

MOVKEY_ST,#0

MOVTIME_OVER,#20

JNBUP,NUM_UP

JNBDOWN,NUM_DOWN

JNBESC,JMP_ESC_AL

JNBENTER,JMP_OK_AL

JNBSET_ALARM,JMP_DEL_AL

JNBSET_TIME,CHANGE_AL

SJMPWAITE_A

JMP_DEL_AL:

AJMPDEL_AL

;-------------------------------------

NUM_UP:

MOVA,AL_NUMBER

CJNEA,AL_TOTA,INC_NUM

MOVAL_NUMBER,#0FFH

INC_NUM:

INCAL_NUMBER

AJMPAL_LIST

;-------------------------------------

NUM_DOWN:

MOVA,AL_NUMBER

CJNEA,#0,DEC_NUM

MOVAL_NUMBER,AL_TOTA

SJMPJ_DECNUM

DEC_NUM:

DECAL_NUMBER

J_DECNUM:

AJMPAL_LIST

;==========修改打铃时间点=================

CHANGE_AL:

MOVA,AL_NUMBER

JZJMP_ADD_AL

DECA

RLA

ADDA,#80H

MOVR0,A

MOVA,@R0

MOVR6,A

INCR0

MOVA,@R0

MOVR7,A

;------------时修改------------------

SET_AL_H:

JNBFLASH_S,GATE_AL_H

MOVDIS_MEM2,#0AAH

SJMPCLS_AL_H

GATE_AL_H:

MOVA,AL_NUMBER

ACALLHBCD

MOVDIS_MEM1,A

MOVA,R6

ACALLHBCD

MOVDIS_MEM2,A

CLS_AL_H:

MOVA,R7

ACALLHBCD

MOVDIS_MEM3,A

ACALLDIS_TIME

ACALLDISPLAY

MOVA,NEW_TIME

CJNEA,#0FFH,JMP_5

MOVNEW_TIME,#0

DJNZTIME_OVER,JMP_5

AJMPWAITE

JMP_5:

ACALLKEY_CHECK

MOVA,KEY_ST

CJNEA,#0FFH,SET_AL_H

MOVKEY_ST,#0

MOVTIME_OVER,#20

JNBUP,AL_H_UP

JNBDOWN,AL_H_DOWN

JNBLEFT,SET_AL_M

JNBRIGHT,SET_AL_M

JNBESC,JMP_AL_LIST

JNBENTER,JMP_SET_AL_OK

SJMPSET_AL_H

JMP_ESC_AL:

AJMPESC_AL

JMP_OK_AL:

AJMPOK_AL

JMP_ADD_AL:

AJMPADD_AL

JMP_SET_AL_OK:

AJMPSET_AL_OK

JMP_AL_LIST:

AJMPAL_LIST

AL_H_UP:

CJNER6,#23,INC_H_AL

MOVR6,#0FFH

INC_H_AL:

INCR6

AJMPGATE_AL_H

AL_H_DOWN:

CJNER6,#0,DEC_H_AL

MOVR6,#24

DEC_H_AL:

DECR6

AJMPGATE_AL_H

;----------分修改----------------

SET_AL_M:

JNBFLASH_S,GATE_AL_M

MOVDIS_MEM3,#0AAH

SJMPCLS_AL_M

GATE_AL_M:

MOVA,AL_NUMBER

ACALLHBCD

MOVDIS_MEM1,A

MOVA,R7

ACALLHBCD

MOVDIS_MEM3,A

CLS_AL_M:

MOVA,R6

ACALLHBCD

MOVDIS_MEM2,A

ACALLDIS_TIME

ACALLDISPLAY

MOVA,NEW_TIME

CJNEA,#0FFH,JMP_6

MOVNEW_TIME,#0

DJNZTIME_OVER,JMP_6

AJMPWAITE

JMP_6:

ACALLKEY_CHECK

MOVA,KEY_ST

CJNEA,#0FFH,SET_AL_M

MOVKEY_ST,#0

MOVTIME_OVER,#20

JNBUP,AL_M_UP

JNBDOWN,AL_M_DOWN

JNBLEFT,JMP_SET_AL_H

JNBRIGHT,JMP_SET_AL_H

JNBESC,JMP_AL_LIST

JNBENTER,SET_AL_OK

SJMPSET_AL_M

JMP_SET_AL_H:

AJMPSET_AL_H

AL_M_UP:

CJNER7,#59,INC_M_AL

MOVR7,#0FFH

INC_M_AL:

INCR7

AJMPGATE_AL_M

AL_M_DOWN:

CJNER7,#0,DEC_M_AL

MOVR7,#60

DEC_M_AL:

DECR7

AJMPGATE_AL_M

;=====打铃点设置确认/返回到列表状态======

SET_AL_OK:

NOP

MOVA,AL_NUMBER

DECA

RLA

ADDA,#80H

MOVR0,A

MOVA,R6

MOV@R0,A

INCR0

MOVA,R7

MOV@R0,A

MOVR0,#80H

MOVR2,AL_TOTA

ACALLUP_LIST;调升序排序程序

AJMPALARM_SET

;==========增加打铃时间点================

ADD_AL:

INCAL_TOTA

MOVAL_NUMBER,AL_TOTA

MOVR6,#08

MOVR7,#0

MOVA,AL_NUMBER

DECA

RLA

ADDA,#80H

MOVR0,A

MOVA,R6

MOV@R0,A

INCR0

MOVA,R7

MOV@R0,A

AJMPSET_AL_H

;==========打铃设置取消/返回==========

ESC_AL:

MOVR4,#TOTA_ADDR

MOVR0,#AL_TOTA

MOVR3,#1

ACALLRD_EEROM

MOVA,AL_TOTA

JZEXIT_SET_AL

RLA

MOVR3,A

MOVR0,#80H

MOVR4,#00H

ACALLRD_EEROM

EXIT_SET_AL:

AJMPNEW_DIS

;=========打铃设置确认/返回===========

OK_AL:

MOVR0,#AL_TOTA

MOVR3,#1

MOVR4,#TOTA_ADDR

ACALLWR_EEROM

MOVA,AL_TOTA

JZJMP_NEW_DIS

MOVA,AL_TOTA

RLA

MOVR0,#80H

MOVR3,A

MOVR4,#0

ACALLWR_EEROM

JMP_NEW_DIS:

AJMPNEW_DIS

JMP_AL_SET:

AJMPALARM_SET

;========删除打铃时间点===========

DEL_AL:

MOVA,AL_TOTA

JZJMP_AL_SET

JNBFLASH_S,GATE_DIS

MOVDIS_MEM1,#0AAH

MOVDIS_MEM2,#0AAH

MOVDIS_MEM3,#0AAH

SJMPCLS_DIS

GATE_DIS:

MOVA,AL_NUMBER

ACALLHBCD

MOVDIS_MEM1,A

MOVA,AL_NUMBER

DECA

RLA

ADDA,#80H

MOVR0,A

MOVA,@R0

ACALLHBCD

MOVDIS_MEM2,A

INCR0

MOVA,@R0

ACALLHBCD

MOVDIS_MEM3,A

CLS_DIS:

ACALLDIS_TIME

ACALLDISPLAY

MOVA,NEW_TIME

CJNEA,#0FFH,JMP_7

MOVNEW_TIME,#0

DJNZTIME_OVER,JMP_7

AJMPWAITE

JMP_7:

ACALLKEY_CHECK

MOVA,KEY_ST

CJNEA,#0FFH,DEL_AL

MOVKEY_ST,#0

MOVTIME_OVER,#20

JNBENTER,DEL_LIST

JNBESC,JMP_AL_SET_D

AJMP

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1