单片机AT89C52(7)

2019-03-11 09:30

附录1: 主程序:

ORG 000H JMP START

START: Curtemp EQU 10H ;Curtemp存储地址

Pretemp EQU 11H ;Pretemp存储地址

MOV TMOD, #53H

LCALL InitDS12887 ;初始化DS12887时钟芯片 SETB EA ;开CPU中断 LCALL ReadTempandTime ;读温度时间设定值 LCALL ReadWaterandPosition;读水位高度 CLR C ;C清零 SUB Curtemp,pretemp JC Offheat Heatcontinue:

LCALL FUZZY ;预算提前加热时间 LCALL DELAY LCALL Heat SJMP $ OffHeat:CLR P2.1 RETI

Heat: SETB P2.1 LCALL DELAY CLR C LCALL ReadTemp MOV A, Curtemp ADD A, #2H SUB A, Pretemp JNC KeepTemp JMP Heatcontinue LCALL KeeptempCON RETI InitDS12887:

SETB P2。1

第 31 页

MOV DPTR, #0BH ;初始化DS12887B寄存器 MOV A, #22H ;置DS12887 24小时模式 MOVX @DPTR, A ;允许报警中断禁止其它中断 MOV DPTR, #0AH ;初始化DS12887 A寄存器 MOVX A, #20H ;时钟频率52.628KHZ,禁止SQW MOV DPTR, #00H ;初始化时钟 MOV A, #00H

MOVX @DPTR, A ;秒 MOV DPTR, #02H ;分 MOV @DPTR, A

MOV DPTR, #04H ;时 MOV A, #12H MOV @DPTR, A RETI ReadTempandTime:

LCALL ReadTemp LCALL ReadTime RETI ORG 0013H JMP KeyBoardINT KeyBoardINT:

LED显示子程序:

DISI:

SETB P1.7 ;灭显示 MOV R0, #SBCD

MOV A, @R0 ;取出要显示的数 ADD A, #2DH ;加上偏移量 MOVC A , @A+PC ;查表取出段选码 MOV SBUF, A ;送出显示 DL1:

JNB TI, DL1 ;输出完否?

第 32 页

CLR TI ;完,清中断标志 INC R0 MOV A, @R0 ADD A, #21H MOVC A, @A + PC

ANL A, #OEFH ;个位加小数点 MOV SBUF, A DL2:

JNB TI, DL2 CLR TI INC R0 MOV A, @R0 ADD A, #13H MOVC A, @A+PC MOV SBUF, A DL3:

JNB TI, DL3 CLR TI MOV A, #0FFH MOV SBUF, A DL4:

JNB TI, DL4 CLR TI

CLR P1.7 ;亮显示 RET

SEGTAB:

DB 11H,0D7H,32H DB 92H,0D4H,98H DB 18H,0D3H,10H,0D0H

键盘输入主程序:

MOV P1, #0FH ;键盘初始化,P1.0~P1.3置输入方式,

P1.4~P1.7为0状态

第 33 页

MOV IE, #84H ;开CPU中断,开INT1中断 SJMP $ ;中断等待

中断服务程序:

ORG 0013 ;INT1中断入口地址

LJMP IO51K16 ;从中断入口转移键盘处理程序IO51K16

IO51K16: CALL D10MS ;延时10秒

LCALL KEYIN ;调键输入检查子程序 JNZ LKOUT ;有键输入,转查键号 RETI ;无键输入,中断返回

LKOUT: MOV R2, #0EFH ;首列扫描字写如R2

MOV R4, #00H ;首列偏移值如R4

CONU: MOV P1, R2 ;列扫描字写入列线中

MOV A, P1 ;读入P1口状态到A中

JB ACC.0,LONE ;检查第0行是否为0状态,不为0表示按下

键不在此行,转下行

MOV A, #00H ;第0行为0状态,表明按下键在此行,首列

号如A

AJMP LKP ;转求键号

LONE: JB ACC1.1, LTWO ;检查第1行有无键按下

MOV A, #04H ;有键按下,该行首列号入A AJMP LKP ;转求键号

LTWO: JB ACC.2, LTHR MOV A, #08H AJMP LKP

LTHR: JB ACC.3, NEXT ;该列所有行都无键按下,转NEXT MOV A, #0CH ;有键按下,该行首列号入A中 LKP: ADD A, R4 ;求键号,键号位首列号加列偏移值 PUSH A ;键号入栈保护 WKFE: LACLL KEYIN ;等待键释放

JNZ WKFE ;键未释放转WKFE等待 POP A ;键释放,键号如A

LJMP KJMP ;转键操作转处理 NEXT: INC R4 ;转查下一列,列偏移值加1 MOV A, R2

第 34 页

JNB ACC.7, KND ;最后一列查完?查完中断返回 RL A ;未查完,列扫描字左移1位 MOV R2, A ;扫描字如R2继续查找 LJMP CONU KND: RETI

KEYIN: MOV P1, #0FH ;查完有无键按下,A不为0,有键按下 MOV A, P1 CPL A ANL A, #0FH

RET

KJMP:

SUB A,#OFH JC W riteTemp ADD A, #0FH CLR C SUB A, #0EH

JC StoreTemporTime ADD A, #0EH CLR C SUB A, #ODH JC Waterpoistion ADD A, #ODH CLR C SUB A, #0CH JC Vtemp ADD A, 0CH CLR C SUB A, #OBH JC StoreTime RETI ORG 0003H JMP Heat RET

第 35 页

附录2:

第 36 页


单片机AT89C52(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2014-2015学年重庆市巴蜀中学高一上学期期中数学试卷和解析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: