main.c
#include#include #include uint count_temp=0;//温度刷新计数 uint temp=0; uchar table[]={0,0}; uchar table1[]={0,0}; uchar temper[]="temperature:"; void System_Init(); void Time0Init(); void Lcd_Display(); void main() { System_Init();//系统初始化 while(1) { Lcd_Display();//lcd显示 if(count_temp>749) { count_temp=0; temp=(float)ReadTemperature()*0.0625*100+0.5;//进行温度刷新 } } } void Time0Init() { TMOD=0x01; TL0 = 0x18; //设置定时初值 TH0 = 0xFC; TF0 = 0; TR0 = 1; ET0=1;//打开定时器中断 EA=1;//打开总中断 } void Time0() interrupt 1//定时为1ms,作为程序运行的时基 { TL0 = 0x18; //每次溢出之后要手动进行一次初始化。 TH0 = 0xFC; count_temp++; } void System_Init() { int i; for(i=0;i<79;i++) temp=(float)ReadTemperature()*0.0625*100+0.5;//温度初始化 Time0Init();//定时器初始化 init();//lcd初始化 } void Lcd_Display() { uint i; table[0]=temp/1000;//修改显示的值 table[1]=temp%1000/100; table1[0]=temp%1000%100/10; table1[1]=temp%10; write_com(0x80); for(i=0;i<12;i++) { write_data(temper[i]); delay(5); } write_com(0x80+0x40); write_data(table[0]+48); write_data(table[1]+48); delay(5); write_com(0x80+0x42); write_data('.'); write_data(table1[0]+48); write_data(table1[1]+48); delay(5); }
LCD.h
#ifndef __LCD_H__ #define __LCD_H__ #include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include #include void write_com(uchar com); void write_data(uchar dat); void init(); sbit RS=P3^1; sbit E=P3^2; #endif
LCD.c
#includevoid write_com(uchar com){ E=0; RS=0; P0=com; delay(5); E=1; delay(5); E=0; } void write_data(uchar dat){ E=0; RS=1; P0=dat; delay(5); E=1; delay(5); E=0; } void init(){ write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); }
ds18b20.h
#ifndef __DS18B20_H__ #define __DS18B20_H__ #include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include #define uchar unsigned char #define uint unsigned int sbit DQ=P1^4;//ds18b20 端口 unsigned int ReadTemperature(void); bit Init_DS18B20(void); unsigned char ReadOneChar(void); void WriteOneChar(unsigned char dat); void delay(ms); #endif
#include"ds18b20.h" void DelayUs2x(unsigned char t) { uchar i; for(i=0;i0;i--) { DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; DelayUs2x(3); // DelayUs2x(5); 换成5 10就初始化失败 温度显示0.063 25就 85度 } return(dat); } void WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; DelayUs2x(3); // DelayUs2x(5); 换成这个就初始化失败 温度显示0.063 DQ = 1; dat>>=1; } DelayUs2x(3); } unsigned int ReadTemperature(void) { unsigned char a=0; unsigned int b=0; unsigned int t=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的 *** 作 WriteOneChar(0x44); // 启动温度转换 delay(10); //DelayUs2x(25); Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的 *** 作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar(); //低位 b=ReadOneChar(); //高位 b<<=8; t=a+b; return(t); } void delay(ms){ uint i,j; for(i=0;i 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)