컴퓨터 지식 네트워크 - 컴퓨터 교육 - at89c52 마이크로컨트롤러를 사용하고 현재 시간과 온도 프로그래밍을 표시하기 위해 1602 LCD를 사용해야 하는 C 언어 프로그램을 작성할 수 있습니까?

at89c52 마이크로컨트롤러를 사용하고 현재 시간과 온도 프로그래밍을 표시하기 위해 1602 LCD를 사용해야 하는 C 언어 프로그램을 작성할 수 있습니까?

#include?

#include?

#include?"LCD1602.h"

#include?"DS1302.h"

sbit?DQ=P3^0;//ds18b20?Port

unsigned?int?ReadTemperature(void);

bit?Init_DS18B20(void);

unsigned?char?ReadOneChar(void);

void?WriteOneChar(unsigned?char?dat);

void?DelayUs2x(unsigned?char);

void?Delay1ms(unsigned?int);

/*--------------- -------------------

이름: 18B20 온도 센서

웹사이트: www.doflye.net

작성자: shifang

날짜: 2009.5년

수정: 없음

내용: 18B20 싱글 라인 온도 감지 응용 샘플 프로그램

------------------------- --- --------*/

/*------------- -- -----

18b20 초기화

--------------- - ----------------------*/

bit?Init_DS18B20(void)

{ bit?dat=0; DQ?=?1;//DQ는 DelayUs2x(5)를 재설정합니다.?//약간의 DQ 지연?=?0;?//마이크로컨트롤러는 DQ를 낮게 설정합니다. DelayUs2x ( 200);?//정확한 지연? 480us보다 큼? DelayUs2x(200);//높은 버스를 가져옵니다. DelayUs2x(50)?//15~60us?수신 60 -240us 존재 펄스 dat=DQ;//x=0이면 초기화 성공,?x=1이면 초기화 실패 DelayUs2x(25);?//약간 지연된 상태로 반환 return?dat;

}

void?DelayUs2x(unsigned?char?t)

{? while(--t);

}

/*- -------------------------------- --

바이트 읽기

------------------ -- --------------*/

unsigned?char?ReadOneChar(void)

{

unsigned? char? i=0;

unsigned?char?dat?=?0;

for?(i=8;i>0;i--) {

DQ?=?0;?//?펄스 신호 제공

dat>>=1;

DQ?=?1;?//?펄스 신호 제공< /p >

if(DQ) dat|=0x8

0;

DelayUs2x(25); } return(dat);

}

/*------------ ---------------------

바이트 쓰기

-------------------------------------- --*/

void?WriteOneChar(unsigned?char?dat)

{ unsigned?char?i=0; for?(i=8;?i>0;? i--) {

DQ?=?0;

DQ?=?dat&0x01;

DelayUs2x(25);

DQ?=?1;

dat>>=1; }

DelayUs2x(25);

}

/*- ---------------------

온도 읽기

------------------------- -------- ------------*/

unsigned?int?ReadTemperature(void)

{

unsigned?char?a= 0;

unsigned?int?b=0;

unsigned?int?t=0;

Init_DS18B20() ;

WriteOneChar(0xCC);?//?일련번호 및 열번호 읽기 작업 건너뛰기

WriteOneChar(0x44);?//?온도 변환 시작

p>

Delay1ms(10);

p>

Init_DS18B20();

WriteOneChar(0xCC);?//일련번호 읽기 작업을 건너뛰시겠습니까?

WriteOneChar(0xBE);?//온도 레지스터 읽기 등(***9개 읽기 가능한 레지스터)? 처음 두 개는 온도입니다.

a=ReadOneChar();?//낮은 비트

b=ReadOneChar();? //높은 비트

b<<=8;

t=a+b;

return(t);

}

void?Delay1ms(unsigned?int?count)

{

unsigned?int? i,j;

for(i= 0;i

for(j=0;j<120;j++);

}

main()

{

SYSTEMTIME?CurrentTime;

int?temp;

float? 온도;

unsigned?char?dist[ 4];

LCD_Initial();

초기_DS1302();

Init_DS18B20() ;

GotoXY(14,0);

Print(".");

GotoXY(15,1);

Print("C");

while (1)

{

DS1302_GetTime(&CurrentTime);

TimeToStr(

&CurrentTime);

DateToStr(&CurrentTime);

GotoXY(0,0);Print("20");

GotoXY(2,0);

Print(CurrentTime.DateString);

GotoXY(0,1);

Print(CurrentTime.TimeString);

임시 =ReadTemperature();

온도=(float)temp*0.0625;

sprintf(dist,"%4f",온도);

GotoXY(9 ,1);

인쇄(거리);

지연1ms(400);

}

}

上篇: 한국 영화' 노소년' 을 못 읽었어요? 下篇: 휴대폰에서 Demon Sword Road Shufrid를 플레이하는 방법
관련 내용