컴퓨터 지식 네트워크 - 컴퓨터 설치 - DS18B20 칩을 사용하여 51 마이크로 컨트롤러로 구현된 온도 제어 프로그램을 찾고 있습니다.

DS18B20 칩을 사용하여 51 마이크로 컨트롤러로 구현된 온도 제어 프로그램을 찾고 있습니다.

AT89S51 마이크로컨트롤러를 기반으로 한 디지털 온도 측정 및 디스플레이 시스템 설계

프로그램

DI EQU P3.3

DO EQU P3.4

CLK EQU P3.5

CS EQU P3.6, LCD 포트 정의

D2RS EQU P2.7

D2RW EQU P2 .6

D2E EQU P2.5

KEYPORT EQU P1; 포트 정의

TEMPER_L EQU 36H

TEMPER_H EQU 35H p>

TEMPER_NUM EQU 38H

FLAG1 BIT 00H

DQ BIT P2.4

ORG 0000H

LJMP MAIN

ORG 0003H

JMP INT00

ORG 0038H

MAIN: MOV SP,#60H

SETB P2 .0

SETB P2.1

SETB P2.2

SETB EA

SETB EX0

SETB P2.0

SEETB P2.1

SETB P2.2

MOV R0,#01H ;화면을 지우고 주소 카운터 AC를 0으로 설정합니다

LCALL DIS_CMD _WRT

MOV R0,#38H ;8비트 데이터 인터페이스, 이중 라인 디스플레이, 5*7 도트 매트릭스

LCALL DIS_CMD _WRT

CALL DIS_CUR_OFF

MOV 42H,#20

MOV 43H,#32

XIAN: LCALL GET_TEMPER

LCALL DISP

LCALL DELAY43MS

MOV A,TEMPER_NUM

SUBB A,42H

JC ZZZL

MOV A, TEMPER_NUM

SUBB A,43H

JNC ZZZ2

SETB P2.0

SETB P2.1

SETB P2.2

JMP XIAN

ZZZL: CLR P2.0

CLR P2.2

JMP XIAN

ZZZ2: CLR P2.0

CLR P2.1

JMP XIAN

INT0:

;키보드 프로그램 스캔

LCALL ASK

SAO: CLR 01H

LCALL KEY

JNB 01H,SAO

CJNE A,#10,PAN

LCALL ANSW

RETI

PAN: CJNE A,#12,SAO

RETI; 호출 가능한 표시 기능 부분

DIS_CUR_OFF: MOV R0,#0CH

LCALL DIS_CMD_WRT

RET

DIS_CUR_ON: MOV R0, #0EH

LCALL DIS_CMD_WRT

RET

CHK_BUSY_FLG: MOV P0,#0FFH

CLR D2RS

NOP

NOP

NOP

LCALL DISPLAY_RD

JB ACC.7,CHK_BUSY_FLG

RET

CLEAR_DIS: MOV R0,#01H

LCALL DIS_CMD_WRT

RET

DIS_CMD_WRT: LCALL CHK_BUSY_FLG

MOV P0,R0

CLR D2RS

NOP

NOP

NOP

LCALL DISPLAY_WRT

RET

DIS_DATA_WRT: LCALL CHK_BUSY_FLG

CJNE A,#10H,DIS_DAT_WRT1

MOV P0,#0C0H ;라인 1100,00000의 시작 주소는 40입니다.

CLR D2RS

NOP

NOP

NOP

LCALL DISPLAY_WRT

DIS_DAT_WRT1: MOV P0 , R0

D2RS 설정

NOP

NOP

NOP

LCALL DISPLAY_WRT

RET

DISPLAY_WRT: CLR D2RW

NOP

NOP

NOP

SETB D2E

안돼

안돼

안돼

CLR D2E

NOP

NOP

NOP

RET

DISPLAY_RD: SETB D2RW

아니요

아니요

아니요

D2E 설정

아니요

아니요

NOP

MOV A,P0

NOP

NOP

NOP

CLR D2E

NOP

NOP

NOP

RET

DIS_DATA_RD: LCALL CHK_BUSY_FLG

MOV P0,# 0FFH

SETB D2RS

LCALL DISPLAY_RD

RET ;키보드 프로그램, 내보내기: A는 키 값입니다. 01H: 0 키를 누르지 않았습니다. 1 키를 눌렀습니다.< /p >

키: MOV KEYPORT,#0FH

MOV A,KEYPOR

CJNE A,#0FH,KEYDOWN

MOV A,#0FFH

p>

RET

키다운: LCALL DELAY43MS

MOV KEYPORT,#0FH

MOV A,KEYPORT

CJNE A, #0FH,KEYDOWN_YES

MOV A,#0FFH

RET

KEYDOWN _YES: MOV B,A

MOV 키포트, #0F0H

MOV A,KEYPORT

ORL A,B

PUSH 30H

MOV 30H,A

MOV R3,#10H

MOV DPTR,#KEYVALUE

NEXT_KEY: MOV A,R3

MOVC A,@a+dptr

CJNE A,30h,NEXTKEYVALUE

DEC R3

POP 30H

WAITKEY_F: MOV KEYPORT,#0FH

MOV A, KEYPORT

CJNE A,#0FH, WAITKEY_F

MOV A,R3

SETB 01H

RET

NEXTKEYVALUE: DJNZ R3,NEXT_KEY

12월 R3

POP 30H

WAITKEY_FREE: MOV KEYPORT,#0FH

MOV A,KEYPORT

CJNE A,#0FH, WAITKEY_FREE

MOV A,R3

SETB 01H

RET

키값: DB 0FFH,7EH,7DH,7BH,77H,0BEH, 0BDH,0BBH,0B7H,0DEH,0DDH,0DBH,0D7H,0EEH,0EDH,0EBH,0E7H

DELAY43MS: A 푸시

MOV A,R3

푸시 A

MOV A,R2

푸시 A

MOV R3,#43

지연: MOV R2,#0FAH

p>

LOOP: NOP; 내부 루프는 1MS

NOP

DJNZ R2, LOOP

DJNZ R3, DELAY

POP A

MOV R2,A

POP A

MOV R3,A

POP A

RET ;온도 설정 수정 여부 확인

ASK: MOV R0,#01H ;화면을 지우고 주소 카운터 AC를 0으로 설정

LCALL DIS_CMD_WRT

MOV 40H ,#0

ZDZ: MOV DPTR,#LINE

MOV A,40H

MOVC A,@A+DPTR

MOV R0,A

LCALL DIS_DATA_WRT

INC 40H

MOV A,40H

MOVC A,@A+DPTR

CJNE A,#00H,ZDZ

RET

라인: DB " 정말로

T(Y/N)를 변경하시겠습니까?" ,00H

답변: MOV R6,42H

MOV R7,43H

MOV R0,#01H

LCALL DIS_CMD_WRT

MOV R0,#44H

CALL DIS_DATA_WRT

MOV R0,#6FH

CALL DIS_DATA_WRT

MOV R0,# 77H

DIS_DATA_WRT 호출

MOV R0,#6EH

DIS_DATA_WRT 호출

MOV R0,#3AH

DIS_DATA_WRT 호출

MOV 40H,#0

CLR 00H

JMP SAO1

GAI: MOV R0,#0FEH

DIS_DATA_WRT 호출

MOV R0,#55H

DIS_DATA_WRT 호출

MOV R0,#70H

CALL DIS_DATA_WRT

MOV R0,#3AH

CALL DIS_DATA_WRT

MOV 40H,#0

SAO1: CLR 01H

LCALL 키

JNB 01H,SAO1

MOV R1,A

MOV B,#10

DIV AB

JZ NEXT2

MOV A,A1

CJNE A,#11, XU

JB 00H,DOWN

MOV 42H,40H

CPL 00H

JMP GAI

DOWN: MOV 43H,40H

RETI

XU: CJNE A,#12,SAO1

MOV 42H,R6

MOV 43H,R7

RETI

NEXT2: MOV A,R1

ADD A,#30H

MOV R0,A

LCALL DIS_DATA_WRT

MOV A,R1

XCH A,40H

MOV B,#10

MUL AB

NOP

CLR DQ

CLR C

WR1: CLR DQ

MOV R3,#6

DJNZ R3,$

RR

R4, #2 R1, #36H; 낮은 비트는 36H(TEMPER_L)에 저장되고, 높은 비트는 35H(TEMPER_

NOP

NOP

<에 저장됩니다. p> SETB DQ

p>

MOV R3,#7

DJNZ R3,$

MOV C,DQ

MOV R3, #23

DJNZ R3,$

RRC A

DJNZ R2,RE01

MOV @R1,A

DEC R1

DJNZ R4,RE00

RET ; DS18B20에서 읽은 온도 데이터를 변환합니다.

TEMPER_COV: MOV A,#0f0H

ANL A ,TEMPER_L ; 저온 자리 소수점 이하 4자리 온도 값을 버립니다.

SWAP A

MOV TEMPER_NUM,A

MOV A,TEMPER_L

JNB ACC.3,TEMPER_COV1 ; 온도 값을 반올림합니다.

INC TEMPER_NUM

TEMPER_COV1:MOV A,TEMPER_H

ANL A,#07H

p>

SWAP A

ORL A,TEMPER_NUM

MOV TEMPER_NUM,A 변환된 온도 데이터 저장

RET ;

SETB DI

SETB DO

SETB CLK

CLR CS

NOP

SETB CS

CLR CLK

CLR CS

CALL DELAY1

SETB DI

세트 CLK

NOP

CLR CLK

세트 DI

세트 CLK

NOP

CLR

CLK

CLR DI

SETB CLK

NOP

CLR CLK

NOP

설정 CLK

NOP

해제 CLK

해제

설정 CLK

MOV C,DO

CLR CLK

RLC A;7

SETB CLK

MOV C,DO

CLR CLK

RLC A 6

SETB CLK

MOV C,DO

CLR CLK

RLC A ;5

SETB CLK

MOV C,DO

CLR CLK

RLC A ;4

SETB CLK

MOV C,DO

CLR CLK

RLC A ;3

SETB CLK

MOV C,DO

CLR CLK

RLC A ;2

SETB CLK

MOV C,DO

CLR CLK

RLC A ;1

SETB CLK

MOV C,DO

CLR CLK

RLC A ;0

세트 CLK

NOP

CLR CLK ;1

NOP

세트 CLK

NOP

CLR CLK ;2

NOP

SETB CLK

NOP

CLR CLK ;3

NOP

SETB CLK

NOP

CLK ;4

NOP

SETB CLK

NOP

CLR CLK ;5

NOP

SETB CLK

NOP

CLR CLK ;6

NOP

SETB CLK

NOP

CLR CLK ;7

NOP

세트 클클

NOP

CLR CLK

NOP

세트 CLK

NOP

CLR CLK

NOP

통화 지연1

SETB CS

RET

DELAY1: MOV R7,#10

DELAY2: NOP

NOP

DJNZ R7,DELAY2

RET

上篇: Xinxian Sword 및 Xuanyuan Sword 시리즈 다운로드 주소를 찾습니다 ~~~ 下篇: ntp 서버가 유효한 리눅스인지 확인하세요
관련 내용