多级通信测温系统程序 河南理工单片机.docx
- 文档编号:2924898
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:19
- 大小:18.36KB
多级通信测温系统程序 河南理工单片机.docx
《多级通信测温系统程序 河南理工单片机.docx》由会员分享,可在线阅读,更多相关《多级通信测温系统程序 河南理工单片机.docx(19页珍藏版)》请在冰豆网上搜索。
多级通信测温系统程序河南理工单片机
附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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多级通信测温系统程序 河南理工 单片机 多级 通信 测温 系统 程序 河南 理工