10# 原野之狼
第一个C文件(作用是把DS18B20的温度读取,在液晶1602上显示)
#include <reg52.h>
#include "lcd.h"
#include "dsb.h"
#define uchar unsigned char
#define uint unsigned int
uchar date[4];
void main(void)
{
uchar i;
float Temp;
LCD_init();
Temp=ReadTemp();
date[3]=0x30+Temp/10; //十位
date[2]=0x30+((int)Temp%10); //个位
date[1]=0x2e; //小数点
Temp=Temp*10;
date[0]=0x30+(int)Temp%10; //小数部分第一位
for(i=3;i>0;i--)
{
write_dat(date);
}
第二个C(液晶1602)
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS=P1^4;
sbit RW=P1^5;
sbit E=P1^6;
void delay (uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_cmd(uchar cmd)
{
RS=0;
RW=0;
P0=cmd;
E=0;
delay(10);
E=1;
delay(5);
E=0;
delay(5);
}
void write_DATA(uchar DATA)
{
RS=1;
RW=0;
P0=DATA;
E=0;
delay(5);
E=1;
delay(5);
E=0;
delay(5);
}
void LCD_init()
{ delay(500);
write_cmd(0x38);//显示设置,16*2设置,5*7点阵,8位数据接口
delay(5);
write_cmd(0x0c);//开显示,显示光标,光标闪烁
delay(5);
write_cmd(0x06);//写入数据后地址加一,屏幕不移动
delay(5);
write_cmd(0x01);//清屏
delay(5);
write_cmd(0x80);//数据地址指向第一行,第一个位置
delay(5);
}
void main()
{
LCD_init();
write_DATA('A');
第一个H
#ifndef __LCD_H__
#define __LCD_H__
extern void LCD_init(void);
extern void write_dat(unsigned char dat);
#endif
}
第三个C(DS18B20)
#include <reg52.h>
sbit DQ=P2^0;
#define uchar unsigned char
#define uint unsigned int
unsigned char dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ;
void delay(uchar N)
{
while(N--);
}
void dat(int pos,uint d)
{P0=dis[d];
P1|=0x0f;
P1&=0xff-(0x01<<pos);
}
void display(float T)
{ uint Tem;
Tem=T*10;
dat(0,Tem/100);
delay(500);
dat(1,(int)(T)%10);
delay(500);
P1 |= 0x0f; //显示“.”
P1 &= 0xfb;
P0=0x7f;
delay(500);
dat(3,Tem%10);
delay(500);
}
void init_DS18b20()
{
uchar x=0;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(3);
x=DQ;
delay(20);
}
void write_ds(uchar dat)
{uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
}
uchar read_ds()
{ uchar i=0;
uchar dat=0;
for(i=0;i<8;i++)
{
DQ=0;
DQ=1;
dat>>=1;
if(DQ)
dat|=0x80;
delay(5);
}
return(dat);
}
float ReadTemp()
{
unsigned char a=0,b=0;
unsigned int t=0;
float tt;
init_DS18b20();
write_ds(0xcc);
write_ds(0x44);
init_DS18b20();
write_ds(0xcc);
write_ds(0xbe);
a=read_ds();
b=read_ds();
t=b;
t<<=8;
tt=t|a;
tt=tt*0.0625;
return(tt);
}
void main()
{
float Temp;
init_DS18b20();
Temp=ReadTemp();
while(1)
{
init_DS18b20();
Temp=ReadTemp();
display(Temp);
}
}
第二个H
#ifndef __DS18B20_H__
#define __DS18B20_H__
extern float ReadTemp(void);
#endif
}
|