有proteus仿真,要吗?
图,程序都有了,你自己参考下,就可以了。
动手还要你自己。
已发请查收!
程序-电路仿真+和周到的服务
一起来学习吧
你的问题已经解决了
我给你一个我开发板上做的温度计,我用的是8位数码管动态显示,程序绝对好用,我实物仿真试过。我把我开发板得电路图给你,程序是我自己写的。 807065214
这是专为你的那个电路图写的程序,绝对好用,我没在软件上仿真,但我在我硬件开发板上运行的很好。
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^5;
sbit we1=P2^1;
sbit we2=P2^0;
uint temp;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//*************************ds18b20温度传感器程序**************************************************************************//
void aaa()
{
uchar i,j;
for(i=0;i<20;i++)
for(j=0;j<30;j++);
}
void delay(uint x)//大延时
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
void delay1( uint a)//小延时
{
while(--a);
}
void write(uchar dat)//写数据
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay1(5);
DQ=1;
dat>>=1;
}
}
uchar read()//读数据
{
uchar i,dat=0;
DQ=1;
_nop_();
for(i=0;i<8;i++)
{
DQ=0;
_nop_();
_nop_();
dat>>=1;
DQ=1;
_nop_();
_nop_();
if(DQ)
dat|=0x80;
delay1(30);
DQ=1;
}
return dat;
}
void disp(uchar num)
{
uchar shi,ge;
shi=num/10;
ge=num%10;
if(shi==0x00) P0=0x00;
else P0=table[shi];
we1=0;
we2=1;
aaa();//********显示十位*********************************// 1111 1011
P0=(table[ge]);
we1=1;
we2=0;
aaa();//******显示个位**********************************// 1111 0111
}
void start()
{
DQ=1;
delay1(8);
DQ=0;
delay1(90);
DQ=1;
_nop_();
_nop_();
delay1(100);
DQ=1;
}
uchar read_tu()
{uchar a,b;
start();
write(0xcc);
write(0x44);
start();
write(0xcc);
write(0xbe);
a=read();
b=read();
b=((b&0x03)<<4)+((a&0xf0)>>4);
return b;
}
void main()
{delay(30);
while(1)
{
temp=read_tu();
disp(temp);
}
}