📄 ds18b20main.c
字号:
/*
//************************************************************************* //
//
//
// COPYRIGHT (c) 2006 BY FOSHAN LX.
// -- ALL RIGHTS RESERVED --
//
// File Name: ds18b20main.C
// Author: guobin
// Created: 2006/04/20
// Modified:
// Revision: 2.0
//
//*************************************************************************
*/
//CPU: P89LPC932A1 8K Flash 256+512Byte RAM
//Crystal:12MHz Fosc=12M
//DIVM=0 CCLK=Fosc=12M
//Single INS=6M=166ns
#include "hardware.h"
unsigned char LLEDData,RLEDData;
bit bdata CLRFlag;
extern UCHAR ROM64Bit[8];
extern UCHAR RAM9Byte[9];
extern RealTM RealTimeTM;
UCHAR TXDData[14];
UCHAR TXDCount;
UCHAR TXDLength;
extern UCHAR DS18B20_Start(void);
extern void DS18B20_ReadTM(void);
extern void DS18B20_WaitDQ(void);
void (*ISP)();
//P00(O) P01(O) P02(O) P03(O) P04(O) P05(O) P06(O) P07(O)
//P10(O) P11(I) P12(O) P13(I/O) P14(I) P15(I) P16(O) P17(O)
//P20(I/O) P21(I/O) P22(I/O) P23(I/O) P24(I/O) P25(I/O) P26(I/O) P27(I/O)
void GPIO_Initial(void)
{
P0M1=0x00;
P0M2=0x00;
P1M1=0x20;
P1M2=0x00;
P2M1=0x00;
P2M2=0x00;
}
void ISP_Initial(void)
{
ISP=0x1F00;
if(!Key)
ISP();
SSTAT=0xFA;
BRGCON=0x00;
AUXR1=0x40;
SCON=0x50;
BRGR1=0x04; //cystal=12M baund=9600(0x04d2)-----baund=cclk/((brgr1,brgr0)+16)
BRGR0=0xD2;
BRGCON=0x03;
}
/*
位段编码对应关系:
数码管位:a b c d e f g dp
74HC164: Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
Q对应输出1点亮相应的位,比如显示1---写74HC164数据01100000(0x60)
*/
code UCHAR LEDCode[]= //数码管编码表
{
0xFC, //'0'
0x60, //'1'
0xDA, //'2'
0xF2, //'3'
0x66, //'4'
0xB6, //'5'
0xBE, //'6'
0xE0, //'7'
0xFE, //'8'
0xF6, //'9'
};
/*
写74HC164函数
入口参数:写1个字节数据
出口参数:无
*/
void HC164(UCHAR Dat)
{
UCHAR i;
HC164_CLK=0;
for(i=0;i<8;i++)
{
if(Dat&0x01) //移为顺序:LSB位先移出
HC164_AB=1;
else
HC164_AB=0;
HC164_CLK=1;
HC164_CLK=0;
Dat>>=1;
}
}
void ScanLEDOutput(void)
{
NLEDR=NLEDL=1;
if(CLRFlag)
{
CLRFlag=0;
HC164(LEDCode[RLEDData]);
NLEDR=0;
}
else
{
CLRFlag=1;
HC164(LEDCode[LLEDData]);
NLEDL=0;
}
}
void T0_Initial(void)
{
TMOD&=0xf0;
TMOD|=0x01;
TH0=0x8A; //5MS
TL0=0xD0;
TR0=1;
ET0=1;
EA=1;
}
void T0_IRQ(void) interrupt 1
{
TH0=0x8A;
TL0=0xD0;
ScanLEDOutput();
}
char putchar (char c) {
if (c == '\n') {
while (!TI);
TI = 0;
SBUF = 0x0d; /* output CR */
}
while (!TI);
TI = 0;
return (SBUF = c);
}
void main(void)
{
UCHAR i;
UINT j;
GPIO_Initial();
ISP_Initial();
T0_Initial();
TI=1;
printf("P89LPC932A1 DS18B20 USB BOARD\n");
while(1)
{
for(j=0;j<60000;j++);
EA=0;
i=DS18B20_Start();
EA=1;
if(i)
{
printf("DS18B20 Initial OK!\n");
printf("Read DS18B20 64Bit Rom Code\n");
for(i=0;i<8;i++)
printf("Rom[%bu]=%bx\n",i,ROM64Bit[i]);
DS18B20_WaitDQ();
EA=0;
DS18B20_ReadTM();
EA=1;
LLEDData=RealTimeTM.ZhengShu/10;
RLEDData=RealTimeTM.ZhengShu%10;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -