多级通信测温系统程序 河南理工单片机.docx

上传人:b****6 文档编号:2924898 上传时间:2022-11-16 格式:DOCX 页数:19 大小:18.36KB
下载 相关 举报
多级通信测温系统程序 河南理工单片机.docx_第1页
第1页 / 共19页
多级通信测温系统程序 河南理工单片机.docx_第2页
第2页 / 共19页
多级通信测温系统程序 河南理工单片机.docx_第3页
第3页 / 共19页
多级通信测温系统程序 河南理工单片机.docx_第4页
第4页 / 共19页
多级通信测温系统程序 河南理工单片机.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

多级通信测温系统程序 河南理工单片机.docx

《多级通信测温系统程序 河南理工单片机.docx》由会员分享,可在线阅读,更多相关《多级通信测温系统程序 河南理工单片机.docx(19页珍藏版)》请在冰豆网上搜索。

多级通信测温系统程序 河南理工单片机.docx

多级通信测温系统程序河南理工单片机

附1:

源程序代码

一、主机

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitbeep=P3^5;

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

ucharRecData;

uchartmp;

uintwei;

sbitH1=P3^6;

sbitL1=P0^5;

sbitL2=P0^6;

sbitL3=P0^7;

voidUART_int()

{TMOD=0X21;

TH1=0XFD;

TL1=0XFD;

SCON=0XD0;

TH0=(65535-45872)/256;

TL0=(65536-45872)%256;

EA=1;

TR1=1;

TR0=1;

ET0=1;

ES=1;

EA=1;

TI=0;

}

voiddelay(uintnum)

{

while(num--);

}

voidkey()

{H1=0;

if(L1==0)

delay(10);

if(L1==0)

{RecData='b';

wei=11;

}

while(!

L1);

if(L2==0)

delay(10);

if(L2==0)

{RecData='c';

wei=12;

}

while(!

L2);

}

voiddisplay(uinttemp)//显示程序

{

ucharA1,A2,A2t,A3;

A1=temp/100;

A2t=temp%100;

A2=A2t/10;

A3=A2t%10;

P1=table[wei];

P0=0XFE;

delay(50);

P1=table[A1];//显示十位

P0=0XFD;

delay(50);

P1=table[A2]|0x80;//显示个位

P0=0XFB;

delay(50);

 

P1=table[A3];//显示分位

P0=0XF7;

delay(50);

}

voidwarn(uints)

{uchari;

i=s;

beep=0;

P2=0x00;

while(i--)

{display(tmp);

}

beep=1;

P2=0xff;

i=s;

while(i--)

{display(tmp);

}

}

voiddeal(uintt)

{

if(t<=50)

{warn(10);

}

if(t>50&&t<=300)

{warn(50);

}

if(t>300)

{warn(10);

}

}

voidputc_to(ucharc)

{SBUF=c;

while(TI==0)

TI=0;

}

voidmain()

{

P1M0=0xff;

P1M1=0x00;

UART_int();

while

(1)

{key();

display(tmp);

TB8=1;

putc_to(RecData);

deal(tmp);

}

}

com_int(void)interrupt4

{if(RI)

{tmp=SBUF;

RI=0;

}

}

voidintt0()interrupt1

{ucharmiao,a,num;

TH0=(65535-45872)/256;

TL0=(65536-45872)%256;

num++;

if(num==20)

{num=0;

miao++;

if(miao==5)

{miao=0;

a++;

if(a==1)

{RecData='b';

wei=11;

}

if(a==2)

{RecData='c';

wei=12;

a=0;

}

}

}

}

2、B从机

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P2^2;

sbitbeep=P2^3;

sbitled=P2^0;

ucharRecData;

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

voiddelay(uintnum)

{

while(num--);

}

/******************************************************

  函数名称:

voidInit_DS18B20(void)

  返回值:

  参数:

  作用:

初始化18B20

  *******************************************************/

voidInit_DS18B20(void)

{

charx=0;

DQ=1;

delay(10);//稍作延时

DQ=0;

delay(800);//延时>480us540us

DQ=1;//拉高总线15-60us

delay(50);

x=DQ;//读总线状态为0复位成功,为1则不成功

delay(30);

DQ=1;//释放总线

}

/******************************************************

  函数名称:

ucharReadOneChar(void)

  返回值:

uchardat

  参数:

  作用:

读1820一个字节

  *******************************************************/

ucharReadOneChar(void)

{

uchari;

uchardat=0;

for(i=0;i<8;i++)

{

DQ=0;

dat>>=1;

DQ=1;//给脉冲

if(DQ){dat|=0x80;}//读1///读0右移处理

delay(20);//15us内读完一个数

}

return(dat);

}

/******************************************************

  函数名称:

voidWriteOneChar(uchardat)

  返回值:

  参数:

uchardat

  作用:

写1820一个字节

  *******************************************************/

/////****写DS18B20***///写060us读完,写130us内读完

voidWriteOneChar(uchardat)

{uinti;

ucharj;

bittestb;

for(j=1;j<=8;j++)

{

testb=dat&0x01;

dat=dat>>1;

if(testb)//write1

{

DQ=0;

i++;i++;i++;

DQ=1;

i=15;while(i>0)i--;

}

else

{

DQ=0;//write0

i=15;while(i>0)i--;

DQ=1;

i++;i++;i++;

}

}

}

/******************************************************

  函数名称:

intReadOneTemperature(void)

  返回值:

intt

  参数:

  作用:

读温度值

  *******************************************************/

voidtmpchange(void)//DS18B20beginchange

{

Init_DS18B20();

delay

(1);

WriteOneChar(0xcc);//addressalldriversonbus

WriteOneChar(0x44);//initiatesasingletemperatureconversion

}

intReadOneTemperature(void)////////***读取温度值***********/////每次读写均要先复位

{uinta,b,t;

floattep;

Init_DS18B20();

WriteOneChar(0xcc);//发跳过ROM命令

WriteOneChar(0xbe);//读寄存器,共九字节,前两字节为转换值

a=ReadOneChar();//a存低字节

b=ReadOneChar();//b存高字节

t=b;

t<<=8;//高字节转换为10进制

t=t|a;

tep=t*0.0625;//转换精度为0.0625/LSB

t=tep*10+0.5;//保留1位小数并四舍五入****后面除10还原正确温度值)

return(t);

}

voiddisplay(uinttemp)//显示程序

{

ucharA1,A2,A2t,A3;

A1=temp/100;

A2t=temp%100;

A2=A2t/10;

A3=A2t%10;

P1=table[11];

P0=0XFE;

delay(800);

P1=table[A1];//显示十位

P0=0XFD;

delay(800);

P1=table[A2]|0X80;//显示个位

P0=0XFB;

delay(800);

P1=table[A3];//显示分位

P0=0XF7;

delay

(1);

}

voidwarn(uints)

{uchari;

i=s;

beep=0;

led=0;

while(i--)

{display(ReadOneTemperature());

}

beep=1;

led=1;

i=s;

while(i--)

{display(ReadOneTemperature());

}

}

voiddeal(uintt)

{

if(t<=50)

{warn(10);

}

if(t>50&&t<=300)

{warn(50);

}

if(t>300)

{warn(10);

}

}

voidinit_com(void)

{TMOD=0X20;

PCON=0X00;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1