机电课程设计-------温度巡回检测仪
MOV R1, #80H S13021: CLR T_RST CLR T_CLK SETB T_RST MOV B, R1 MOV A, @R0 MOV B, A
LCALL RTInputByte INC R0 INC R1 INC R1 SETB T_CLK CLR T_RST DJNZ R7, S13021 CLR T_RST CLR T_CLK SETB T_RST MOV B, #8EH LCALL RTInputByte MOV B, #80H LCALL RTInputByte SETB T_CLK CLR T_RST RET GET1302:
;秒写地址
;写秒 分 时
;写秒数据
LCALL RTInputByte
;控制寄存器 ;控制,WP=1,写保护
MOV R0, #SECOND; MOV R7, #7 MOV R1, #81H CLR T_RST CLR T_CLK SETB T_RST MOV B, R1
;秒 分 时
LCALL RTInputByte LCALL RTOutputByte MOV @R0, A INC R0 INC R1
温度巡回检测仪 36 ;秒地址
G13021:
;秒
机电课程设计-------温度巡回检测仪
INC R1 SETB T_CLK CLR T_RST DJNZ R7, G13021 RET
RTInputByte:
RTOutputByte:
MOV R4, #8 RRC A SETB T_CLK CLR T_CLK DJNZ R4, Outbit1 RET
LACALL DELAY ;延时去抖
MOV A,P1 ;读取P1口列值 ANL A, #0C7H ;屏蔽低六位
CJNE A,#0C7H,SKEY ;不等转移指令,判断是否有键闭合,有转SKEY AJMP FINISH ;无键闭合,返回 MOV A,#00H ;列扫描 MOV R0,A MOV R1,A
;R0作为列计数器,开始为0 ;行计数器
;R3为列扫描字暂存
Outbit1: MOV C, T_IO
MOV R4, #8 RRC A MOV B, A MOV T_IO, C SETB T_CLK CLR T_CLK DJNZ R4, Inbit1 RET
Inbit1: MOV A, B
INTR0:
SKEY:
MOV R3,#0F7H
SKEY2: MOV A, R3 ;扫描第一列
MOV P1,A NOP
;输出列扫描字
温度巡回检测仪 37 机电课程设计-------温度巡回检测仪
NOP NOP
;三个nop操作使P1口输出稳定 ;读行值 ;暂存行值
MOV A,P1 MOV R1,A
ANL A,#OC7H CPL A
;与运算,无闭合键则0C7H不变,取行值
;取反,高电平则有键闭合
JNZ SKEY3 ;非0跳转,有键按下转SKEY3,无则进行下一列扫描 INC R0 SETB C MOV A,R3 RLC A MOV R3,A MOV A,R0
;列计数器加一
;为行扫描字左移做准备
;带进位C左移 ;形成下一列扫描字
CJNE A,#03H,SKEY2 ;共需扫描3列
AJMP FINISH
SKEY3: MOV A,R1
JNB ACC.2, SKEY4 JNB ACC.1, SKEY5 JNB ACC.0, SKEY6
AJMP FINISH
MOV A,#01H MOV R2,A AJMP DKEY MOV A,#02H MOV R2,A AJMP DKEY MOV A,#03H MOV R2,A AJMP DKEY
;取行号 ;存3行号 ;存2行号 ;存1行号
SKEY4:
SKEY5:
SKEY6:
DKEY: MOV A,R2
ACALL DECODE ; MOV DPTR, #TABLE1 JMP @A+DPTR ACALL AA ACALL BB
TABLE1:
温度巡回检测仪 38 机电课程设计-------温度巡回检测仪
ACALL CC ACALL DD ACALL EE ACALL FF ACALL GG ACALL HH ACALL II RETI
;取行号送A
FINISH:
DECODE: MOV A,R2
DEC A ;(行号-1);
MOV B,#03H ;每行按键个数 MUL AB ADD A,R0 RET
;(行号-1)*按键数
;(行号-1)*按键数+列号=键号,存在A中
延时 DELAY:
TM:
MOV R7,#18H MOV R6,#0FFH
TM1: DJNZ R6,TM1
DJNZ R7,TM RET
MOV R0, #00H
;存数据高八位
AA:
MOV R1, #00H ;存数据低八位 MOV R2, #08H ;共8次采样
MOV DPTR, #0BFF8H ;定义ADC转换器首地址 MOV @DPTR, A ;开始转换 ACALL DELAY ;延时 JNB P3.3,LP1 ;等待转换完毕 MOVX A, @DPTR ;读一个数据 ADD A, R1 ;与低八位相加 JNC LP3 ;无进位转移
LP4:
LP1:
LP2:
INC R0 ;有进位则高八位加一 CLR C LP3:
MOV R1, A ;保存低八位 DJNZ R2, LP4 ;循环8次
MOV R2, #03H ;需要循环右移3次,即除以8
温度巡回检测仪 39 机电课程设计-------温度巡回检测仪
LP5; MOV A, R0 ;取高八位
RRC A ;高8位右移一位,即除以2 MOV R0, A ;保存高八位 MOV A, R1 ;取低八位 RRC A ;低八位右移一位 MOV R1, A ;保存低八位
DJNZ R2, LP5 ;循环右移三次,即除以8 MOV 30H, #01H ;30H置1
MOV 31H, R1 ;采样得到的温度值入31H保存 RET MOV A, 31H
;温度数值转化
MOV B,#20 MUL AB MOV B,#51 DIV AB
MOV R1,A MOV A,B MOV B,#10 MUL AB MOV B,#51 DIV AB MOV 32H,A MOV 31H,R1 MOV B,#100 MOV A,31H DIV AB
MOV 73H,A ;温度的百位 MOV A,B MOV B,#10 DIV AB
MOV 72H,A ;温度的十位 MOV 71H,B MOV 70H, 32H MOV 75H, 30H
;温度的个位
;温度的十分位 ;通道数
;小数后一位放于32H ;结果存放31H
MOV DPTR, #7FFFH ;选择控制存储器地址
温度巡回检测仪 40