C语言程序——数码管 1602液晶同时显示18b20采集到的温度
/********************************************************************
* *
* 单片机开发板 - 1602显示实验 *
* *
* *
* *
********************************************************************/
#include <reg51.h>
#include <intrins.h>
unsigned table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL ;
sbit rs = P3^6;
sbit rw = P3^5;
sbit ep = P3^4;
sbit clk=P2^0;
sbit AB=P2^1;
sbit com1=P2^2;
sbit com2=P2^3;
sbit dq=P3^3;
BYTE code dis1[] = {" NAN GENG KE JI"};
BYTE code dis2[] = {" Temp:"};
bit mark;
unsigned char temp=0;
unsigned char num,k,x,T,time_s,time;
void delay1()
{ int i,j,k;
for(i=0;i<1;i++)
for(j=0;j<7;j++)
for(k=0;k<100;k++);
}
void delay2(z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void timer0() interrupt 1
{
num++;
if(num==20)
{num=0;T=x;}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void delay_1ms(unsigned char time)
{
unsigned char a,b;
for(a=time;a>0;a--)
for(b=200;b>0;b--);
}
void delay2us(unsigned char t)
{
while(--t);
}
void fun(num)
{
int m;
for(m=0;m<8;m++)
{
clk=0;
AB=num&0x01;
num=num>>1;
clk=1;
}
}
bit ds18b20(void)
{
bit flag;
dq=1;
delay2us(10);
dq=0;
delay2us(200);
delay2us(200);
dq=1;
delay2us(50);
flag=dq;
delay2us(25);
return flag;
}
/*向18b20写入一个字节的数据*/
void write_dat(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
dq=0;
delay2us(2);
dq=dat&0x01;
delay2us(22);
dq=1;
dat>>=1;
}
}
/*读取18b20一个字节的数据*/
unsigned char read_dat(void)
{
unsigned char i,dat=0;
for(i=0;i<8;i++)
{
dq=0;
dat>>=1;
dq=1;
if(dq)
dat|=0x80;
delay2us(25);
}
return(dat);
}
/*读取温度*/
unsigned char get_temp()
{
unsigned char a[2]={0x00,0x00};
ds18b20();
write_dat(0xcc);
write_dat(0x44);
delay_1ms(2);
ds18b20();
write_dat(0xcc);
write_dat(0xbe);
a[0]=read_dat();
a[1]=read_dat();
temp=(((a[0]&0xf0)>>4))|((a[1]&0x0f)<<4);
return(temp);
/*********************温度数据处理程序段
if((b&0xf8)==0xf8)
{
mark=1;
b<<=8;
temp=((~(a+b))+1)*0.625;
}
else
{
mark=0;
b<<=8;
temp=(a+b)*0.625;
} */
}
/**********************************************/
/* 1602液晶显示模块 */
/**********************************************/
void delay(BYTE ms)
{ // 延时子程序
BYTE i;
while(m


