📄 1820.c
字号:
#include<at89x52.h>
#include <INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P1^5;
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
unsigned char code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar i;
/******************************
* 函数名称://1毫秒延时子程序
* 功 能:写函数
* 入口参数:N
* 出口参数:无
*******************/
void delay1ms(int n)/* 1毫秒延时子程序*/
{
unsigned char i,j;
for (j=0;j<n;j++)
for(i=124;i>0;i--); /*延时124*8+10=1002us*/
}
/*************************************************
1602液晶使能
*************************************************/
void enable(void)
{
rs=0;
rw=0;
e=0;
delay1ms(3);
e=1;
}
/*************************************************
1602初始化
*************************************************/
void start1602()
{
P0=0X01;
enable();
P0=0X38;
enable();
P0=0X0c;
enable();
P0=0X06;
enable();
}
/*************************************************
1602位选择0X80:第一行,,,0XC0:第二行
*************************************************/
void checkbit(unsigned char address)
{
P0=address;
enable();
}
/*************************************************
1602显示
*************************************************/
void dis1602(unsigned char buf)
{
P0=buf;
rs=1;
rw=0;
e=0;
delay1ms(3);
e=1;
}
/******************
* 函数名称://延时函数
* 功 能:写函数
* 入口参数:dat
* 出口参数:无
*******************/
void Delay(uint num)
{
while( num-- );
}
/******************
* 函数名称:Init_DS18B20()
* 功 能:初始化18B20
* 入口参数:无
* 出口参数:无
*******************/
Init_DS18B20(void)
{
uchar x = 0;
DQ = 1; //DQ复位
Delay(8); //DQ复位
DQ = 0; //单片机将DQ拉低
Delay(80);
DQ = 1;
Delay(14);
x = DQ;
Delay(20);
}
/******************
* 函数名称:ReadOneChar()
* 功 能:读函数 //读一个字节
* 入口参数:无
* 出口参数:无
*******************/
ReadOneChar(void)
{
uchar i = 0;
uchar dat = 0;
for (i = 8; i > 0; i--)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
dat |= 0x80;
Delay(4);
}
return (dat);
}
/******************
* 函数名称:WriteOneChar()
* 功 能:写函数 //向1820写一个字节
* 入口参数:dat
* 出口参数:无
*******************/
WriteOneChar(unsigned char dat)
{
uchar i = 0;
for (i = 8; i > 0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay(5);
DQ = 1;
dat>>=1;
}
}
/******************
* 函数名称:Read_Disp_Temperature()
* 功 能://读取温度
* 入口参数:无
* 出口参数:无
*******************/
Read_Disp_Temperature(void)
{
uint a = 0, b = 0, c = 0,d=0x30,e=0xa0,t = 0;
i++;
Init_DS18B20();
WriteOneChar(0xCC); /*跳过读序号列号的操作*/
WriteOneChar(0x44); /* 启动温度转换 */
Init_DS18B20();
WriteOneChar(0xCC); /*跳过读序号列号的操作*/
WriteOneChar(0xBE); /*/读取温度寄存器 */
a = ReadOneChar();
b = ReadOneChar();
if((a&0x08)==0x08)/*有小数*/
d=0x35;
if((b&0xf8)==0xf8)/*温度为负*/
{
e=0x2d;
t=((~b+1)<<4)+((~a+1)>>4);
a=table[t/100];
b=table[(t%100)/10];
c=table[(t%100)%10];
if(i>2)
{
i=0;
checkbit(0xc0);
dis1602('t');
dis1602('e');
dis1602('m');
dis1602('p');
dis1602('_');
dis1602('_');
dis1602('_');
dis1602('_');
dis1602('_');
dis1602(':');
dis1602(e);
dis1602(a);
dis1602(b);
dis1602(c);
dis1602(0x2e);/*小数点*/
dis1602(d);
}
}
t=(b<<4)+(a>>4);
a=table[t/100];
b=table[(t%100)/10];
c=table[(t%100)%10];
if(i>2)
{
i=0;
checkbit(0xc0);
dis1602('t');
dis1602('e');
dis1602('m');
dis1602('p');
dis1602('_');
dis1602('_');
dis1602('_');
dis1602('_');
dis1602('_');
dis1602(':');
dis1602(e);
dis1602(a);
dis1602(b);
dis1602(c);
dis1602(0x2e);/*小数点*/
dis1602(d);
}
}
/******************
* 函数名称:main()
* 功 能:主函数
* 入口参数:无
* 出口参数:无
*******************/
void main(void)
{
start1602();
while(1)
{
Read_Disp_Temperature();
delay1ms(255);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -