📄 c语言写的温度计程序.c
字号:
//DS1820温度计
/*测试通过*/
#include<reg52.h>
#include<intrins.h>
sbit DQ=P3^1;
bit ds1820;
//延时子程序
//延时时间为(timex2+2)us
void delaydis(int time)
{ int s;
for(s=0;s<time;s++);
}
//定义一个显示子程序
//显示数码由P0口输出,低电平有效,位选由P2口输出,也是低电平有效
void leddisplay(unsigned char ledcode[4])
{unsigned short int leddisplaycode[11]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,0xff};/*这是LED显示代码*/
unsigned short int i=0;
unsigned char displaybit;
displaybit=0x7f;
do
{P0=leddisplaycode[ledcode[i]];P2=displaybit;//显示I指向的代码
delaydis(300);//调用延时程序,延时1毫秒
//
displaybit=~displaybit;
displaybit=displaybit>>1;
displaybit=~displaybit;
i++;
}while(i<4);
}
//定义一个延时函数
//延时时间为10us+5xTIMEus
void delay(unsigned char time)
{while(time--);}
//定义一个WRITE函数
//低位先写,高位后写
void ds1820write(unsigned char writeval)
{unsigned char i;
for (i=0;i<8;i++)
{DQ=1;
_nop_();
_nop_();
DQ=0;
delay(1);//将数据线拉低15US
DQ=1;
DQ=(bit)(writeval&0x01);//写数据
delay(6);//等写时序结束
writeval=writeval>>1;//左移一位,准备再写
DQ=1;
}}
//定义一个读函数
unsigned char readds1820 (void)
{unsigned char readval=0;
unsigned char i;
for(i=0;i<8;i++)
{bit DQVAL;
DQ=1;
_nop_();
_nop_();
DQ=0;
_nop_();
_nop_();
_nop_();//将数据线拉低3微秒
DQ=1;
delay(1);//等待15微秒
DQVAL=DQ;//读数据,并将读得数据保存于DQVAL
readval=readval>>1;//左移一位,准备保存
readval=readval|(((unsigned char)DQVAL)<<7);//保存
delay(6);//等待读时序结束
}
return(readval);}//返回READVAL
//定义一个RESTART函数
void restart(void)
{unsigned char i;
DQ=1;
ds1820=1;
_nop_();
_nop_();
DQ=0;
delay(100);
DQ=1;
for(i=0;i<100;i++)
{while(DQ==0)ds1820=0;}
delay(150);
}
unsigned char templ;
unsigned char temph;
void longdelay(unsigned int time)
{while(time--);}
unsigned char codeled[4];
main()
{codeled[2]=10;
codeled[3]=10;
start:restart();
if(ds1820==1)goto start;
ds1820write(0xcc);
ds1820write(0x44);
longdelay(0);
leddisplay(codeled);
leddisplay(codeled);
leddisplay(codeled);
leddisplay(codeled);
leddisplay(codeled);
leddisplay(codeled);
restart();
if(ds1820==1)goto start;
ds1820write(0xcc);
ds1820write(0xbe);
templ=readds1820();
temph=readds1820();
templ=templ>>4;//低字节左移四位
temph=temph<<4;//高字节左移四位
templ=templ|temph;//高低两节字合并
codeled[1]=templ/10;//算得十位显示代码
codeled[0]=templ%10;//算得个显示代码
leddisplay(codeled);
leddisplay(codeled);
leddisplay(codeled);
leddisplay(codeled);
goto start;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -