高小果3
用DS18B20做的电子温度计,非常简单。#include <> #include\"\"#include <>#include <>//********************************************************#define Seck (500/TK) //1秒中的主程序的系数#define OffLed (Seck*5*60) //自动关机的时间5分钟!//********************************************************#if (FHz==0) #define NOP_2uS_nop_()#else #define NOP_2uS_nop_();_nop_()#endif//**************************************#define SkipK 0xcc //跳过命令#define ConvertK 0x44 //转化命令#define RdDs18b20K 0xbe //读温度命令//*******************************************extern LedOut(void);//*************************************************sbit PNP1=P3^4;sbit PNP2=P3^5;sbit BEEP=P3^2;//***********************************#defineDQ PNP2 //原来的PNP2 BEEP//***********************************static unsigned char Power=0;//************************************union{ unsigned char Temp[2]; //单字节温度 unsigned int Tt; //2字节温度}T;//***********************************************typedef struct{ unsigned char Flag; //正数标志 0;1==》负数 unsigned char WenDu; //温度整数 unsigned int WenDuDot; //温度小数放大了10000}WENDU; //***********************************************WENDU WenDu;unsigned char LedBuf[3];//----------------------------------//功能:10us 级别延时// n=1===> 6Mhz=14uS 12MHz=7uS//----------------------------------void Delay10us(unsigned char n){ do{ #if (FHz==1) NOP_2uS;NOP_2uS; #endif }while(--n);}//-----------------------------------//功能:写18B20//-----------------------------------void Write_18B20(unsigned char n){ unsigned char i; for(i=0;i<8;i++){ DQ=0; Delay10us(1);//延时13us 左右 DQ=n & 0x01; n=n>>1; Delay10us(5);//延时50us 以上 DQ=1; }}//------------------------------------//功能:读取18B20//------------------------------------unsigned char Read_18B20(void){ unsigned char i; unsigned char temp; for(i=0;i<8;i++){ temp=temp>>1; DQ=0; NOP_2uS;//延时1us DQ=1; NOP_2uS;NOP_2uS;//延时5us if(DQ==0){ temp=temp&0x7F; }else{ temp=temp|0x80; } Delay10us(5);//延时40us DQ=1; } return temp;}//-----------------------------------void Init (void){ DQ=0; Delay10us(45);//延时500us DQ=1; Delay10us(9);//延时90us if(DQ){ //0001 1111b=1f Power =0; //失败0 }else{ Power++; DQ=1; }}//----------------------------------void Skip(void){ Write_18B20(SkipK); Power++;}//----------------------------------void Convert (void){ Write_18B20(ConvertK); Power++;}//______________________________________void Get_Ds18b20L (void){ [1]=Read_18B20(); //读低位 Power++;}//______________________________________void Get_Ds18b20H (void){ [0]=Read_18B20(); //读高位 Power++;}//------------------------------------//规范化成浮点数// sssss111;11110000// sssss111;1111()//------------------------------------void ReadTemp (void){ unsigned char i; unsigned intF1=0; char j=1; code int Code_F[]={6250,1250,2500,5000}; ; if ([0] >0x80){ //负温度 =~; //取反+1=源吗 +符号S ; } <<= 4; //左移4位 [0]; // 温度整数 //************************************************** [1]>>=4; //--------------------------- for (i=0;i<4;i++){ //计算小数位 F1 +=([1] & 0x01)*Code_F; [1]>>=1; } ; //温度的小数 Power=0;}//----------------------------------void Delay1S (void){ static unsigned int i=0; if (++i==Seck) {i=0ower++;}}//----------------------------------void ReadDo (void){ Write_18B20(RdDs18b20K); Power++;}/**********************************函数指针定义***********************************/code void (code *SubTemp[])()={ Init,Skip,Convert,Delay1S,Init,Skip,ReadDo,Get_Ds18b20L, Get_Ds18b20H,ReadTemp};//**************************************void GetTemp(void){ (*SubTemp[Power])();}//---------------------------------------------------//将温度显示,小数点放大了 GetBcd(void){ LedBuf[0]= / 10; LedBuf[1]= % 10 +DotK; LedBuf[2]=()%10; if(LedBuf[0]==0)LedBuf[0]=Black; if() return; if(LedBuf[0] !=Black){ LedBuf[2]=LedBuf[1]; LedBuf[1]=LedBuf[0]; LedBuf[0]=Led_Pol; //'-' }else{ LedBuf[0]=Led_Pol; //'-' }}/*//---------------------------------------------------void JbDelay (void){ static long i; if (++i>=OffLed){ P1=0xff; P2=0xff; PCON=0x02; }}*//*****************************************************主程序开始1:2002_10_1 设计,采用DS18B20测量2:采用函数数组读取数码管显示正常!3:改变FHz可以用6,12MHz工作!******************************************************/code unsigned char Stop[3] _at_ 0x3b;void main (void){ P1=0xff; ; while (1){ GetTemp(); GetBcd(); // JbDelay(); LedOut(); }}复制代码 20091012_8b1ef92155560c13b5807ZmoDVSacjwD[1].jpg (12 KB) 2009-10-21 23:21 上传下载次数:0
默然回首千百度
你好,我有你需要的设计!需要的联系回答者 目 录 一、引言 4 二、设计内容及性能指标 5 三、系统方案论证与比较 5 (一)、方案一 5 (二)、方案二 6 四、系统器件选择 7 (一)、 单片机的选择 7 1、 89S51 引脚功能介绍 8 (二)、温度传感器的选择 10 1、 DS18B20 简单介绍: 10 2、 DS18B20 使用中的注意事项 12 3、 DS18B20 内部结构 12 4、DS18B20测温原理 16 5、提高DS1820测温精度的途径 17 (三)、显示及报警模块器件选择 18 五、硬件设计电路 18 (一)、主控制器 19 (二)、显示电路 19 (三)、 温度检测电路 20 (四)、温度报警电路 25 六、 软件设计 26 (一)、 概述 26 (二)、主程序模块 26 (三)、各模块流程设计 27 1、 温度检测流程 28 2、报警模块流程 28 3、 中断设定流程 29 七、总结和体会 31 八、致谢 31 参考文献32
小麻烦ly
我做的课程设计,用的数码管,也做了protues仿真,你有需要的话,我邮箱是。希望对你有帮助,#include<>sbit P11=P1^1;sbit P12=P1^2;sbit P13=P1^3;sbit P14=P1^4;/////数码管1断码控制///////////////sbit P15=P1^5;sbit P16=P1^6;sbit P17=P1^7;sbit P32=P3^2;/////数码管2段码控制////////////////sbit up=P3^7;sbit down=P3^6; ////按键操作端口//////////////////sbit P35=P3^5; ////////控制晶闸管端口/////////sbit DQ =P3^3; ///////温度传感器端口///////// #define THCO 0xee#define THLO 0x00unsigned char code duan[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,}; //////////////////////////////////////////int b=0;char pwm=0;int k;char r=0,q=0;static char wendu_1;char hao=20;//////////////////////////////////////////////void delay(unsigned int i){while(i--);}//////////////////////////////////////////Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时 大于 480usDQ = 1; //拉高总线delay(14);x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败delay(20);}////////////////////////////////////////////ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(4);}return(dat);}////////////////////////////////////////////////WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}//delay(4);}/////////////////////////////////////////////////DS18B20程序读取温度ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;t<<=8;t=t|a;tt=t*;return(t);}xianshi(){/////////////////当前温度显示///////////////////////////// P11=1; P0=duan[wendu_1/1000]; for(k=0;k<1000;k++); P1=0;P12=1; P0=duan[wendu_1/100%10]; for(k=0;k<1000;k++); P1=0;P13=1; P0=duan[wendu_1%100/10]; for(k=0;k<1000;k++); P1=0;P14=1; P0=duan[wendu_1%10]; for(k=0;k<1000;k++); P1=0; ///////////////////////////目标电压显示/////////////// P15=1; P2=duan[hao/1000]; for(k=0;k<1000;k++); P1=0;P16=1; P2=duan[hao/100%10]; for(k=0;k<1000;k++); P1=0;P17=1; P2=duan[hao%100/10]; for(k=0;k<1000;k++); P1=0;P32=1; P2=duan[hao%10]; for(k=0;k<1000;k++); P32=0;////////////////////////////////////////////////////////// }/////////////////////////////////////////////////////////// main(void){ P11=0; P12=0; P13=0; P14=0; P15=0; P16=0; P17=0; P32=0; P35=0; /////////////////////////////////////////////////////////// while(1){ wendu_1=ReadTemperature()/16;//读温度 xianshi(); ///显示系统数据/////////////////////////////////////操作函数//////////////////////////////////// if(down==0) {hao--;} if(up==0){hao++;} ///////////////////////////////////////////////////////////////////hao为理想温度/////wendu_1为实际环境温度/////////////////////////////////////////////////////////////////P35为高时 led灯工作///////////////////////////////////// P35=0; pwm=hao-wendu_1; if(pwm>0) {P35=1;} if(pwm<0) {P35=0;} if(pwm==0) {P35=0;}///////////////////////////////////////////////////////////////// }}
用DS18B20做的电子温度计,非常简单。#include #include\"AscLed.h\"#include #include //*****
用DS18B20做的电子温度计,非常简单。#include #include\"AscLed.h\"#include #include //*****
其实不难。18B20是一个三极管样子的,程序挺简单的。至于其他的功能,一个个实现就得了,。
数控车床智能控制系统的研究 摘要:针对目前现有数控车削加工过程中加工、测量、编程相互分离,导致生产效率低,智能化和自动化程度不高以 及对机床操作人员要求较高的现
生活方面:在一定温度条件下,空气相对湿度越小,人体汗液蒸发越快,人的感觉越凉快。北京地区冬季和春季白天一般湿度为 20% 左右,夜晚一般在 70% 左右,由于冬