📄 hongwai1.c
字号:
/* =========================================
函数名称:红外发送程序
函数功能:红外发送数据
说明:共阳数码管显示温度 //实验室开发板
P0段选 P1位选
P2_0为数据输入端
P3_2为发送控制端
时间:2008.8.15
licansong
===========================================*/
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//uchar code bb[4]={0xf7,0xfb,0xfd,0xfe};
uchar data str[5];
uchar data dat[5];
sbit P3_2=P3^2;
sbit P2_0=P2^0;
sbit DQ=P2^2; //单口线说明
bit T_sign=0; //温度正负符号
#define T_cont 0.0625 //温度转换常数
#define uchar unsigned char
#define uint unsigned int
float temp1=0;
unsigned char sdata,t_bai=0,t_shi=0,t_ge=0,t_feng=0,t_miao=0;
/**********************************************************************************************
函数名称:初始化函数
函数功能:串口初始化函数
说明:
**********************************************************************************************/
void init(void)
{
TMOD=0x20; //定时器1工作在方式2
PCON=0x00; //波特率不增倍
SCON=0x50; //串行工作方式3
TH1=0xFD; //SMOD=0时的初值
TL1=0xFD;
TR1=1;
}
/**********************************************************************************************
函数名称:存储函数
函数功能:将温度数据存储在str[]
说明:
**********************************************************************************************/
void save()
{
// str[0]=0xff;
str[0]=t_shi;
str[1]=t_ge;
str[2]=t_feng;
str[3]=t_miao;
}
/**********************************************************************************************
函数名称:发送函数
函数功能:将数组中的温度数据通过串口发送
说明:
**********************************************************************************************/
void send_str()
// 传送字串
{
uchar i;
for(i=0;i<4;i++)
{
SBUF = str[i];
while(!TI); // 等特数据传送
TI = 0; // 清除数据传送
}
}
/**********************************************************************************************
函数名称:读取温度函数
函数功能:读取DS18B20的转换温度值
说明:
**********************************************************************************************/
void ReadTemperature() //获取温度源程序
{
void delay(unsigned int delay_time);
void DS18B20_init();
void DS18B20_send(unsigned char out_data);
uchar DS18B20_read(void);
unsigned int y=0;
uchar a=0;
uchar b=0;
// unsigned char k;
DS18B20_init(); //初始化DS18B20
DS18B20_send (0xcc);
DS18B20_send (0x44); //启动温度转换
delay(125);
DS18B20_init();
DS18B20_send (0xcc);
DS18B20_send (0xbe); //读取温度寄存器
a=DS18B20_read(); //读取低位
b=DS18B20_read(); //读取高位
//k=b&0X08;
//if(k==0x08) T_sign=1; //温度是负数
//else T_sign=0;
if(b>0x7f)
{
a=~a;b=~b+1; //补码转换,取反加一
T_sign=1; //温度为负时flag=0
}
sdata=a/16+b*16;
t_bai=sdata/100;
t_shi=sdata/10;
t_ge=sdata%10;
t_feng=(a&0x0f)*10/16;
t_miao=(a&0x0f)*100/16%10;
}
/**********************************************************************************************
函数名称:延时函数
函数功能:转换延时和显示延时
说明:LCM1602_Delay()是液晶显示延时,delay()是温度转换延时
**********************************************************************************************/
void delay(unsigned int delay_time) // 延时程序
{
while(delay_time--);
}
void Delay1(uchar count)
{
uchar i;
while(--count!=0)
{for(i=0;i<250;i++);}
}
/**********************************************************************************************
函数名称:初始化函数
函数功能:对DS18B20进行初始化
说明:
**********************************************************************************************/
void DS18B20_init() //初始化DS18B20
{
unsigned char i=0;
DQ=1;
delay(8);
DQ=0;
delay(85); //精确延时484 us
DQ=1;
delay(14); //精确延时34us
i=DQ;
delay(20);
}
/**********************************************************************************************
函数名称:写函数
函数功能:向DS18B20写命令
说明:
**********************************************************************************************/
void DS18B20_send(unsigned char out_data) //主机发送一字节到DS18B20
{
unsigned char i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=out_data&0x01; //数据从低位送出
delay(5); //精确延时61us
DQ=1;
out_data>>=1;
}
delay(4);
}
/**********************************************************************************************
函数名称:读函数
函数功能:从DS18B20读取数据
说明:
**********************************************************************************************/
uchar DS18B20_read(void)//主机从DS18B20中读取一字节
{
unsigned char i,in_data;
in_data=0;
for(i=8;i>0;i--)
{
DQ=1;
delay(1);
DQ=0; //给脉冲信号
in_data>>=1;
DQ=1; //给脉冲信号
if(DQ)
in_data|=0x80;
delay(4);
}
return(in_data);
}
/**********************************************************************************************
函数名称:显示函数
函数功能:显示函数
说明:
**********************************************************************************************/
void display()
{
P1=0xfe;
P0=tab[t_shi];
Delay1(4);
P1=0xfd;
P0=tab[t_ge]|0x80;
Delay1(4);
P1=0xfb;
P0=tab[t_feng];
Delay1(4);
P1=0xf7;
P0=tab[t_miao];
Delay1(4);
P1=P2|0x0f;
P0=0x00;
}
/**********************************************************************************************
函数名称:主函数
函数功能:主函数
说明:
**********************************************************************************************/
void main()
{
int i,j;
// P1=0x00;
// P0=0x00;
EA=1;
ES=1;
init();
while(1)
{
ReadTemperature();
display();
save();
if(P3_2==0)
{
for(i=0;i<2;i++)
for(j=200;j>0;j--);
if(P3_2==0)
{
send_str();
while(P3_2==0);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -