为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

室内温度检测控制器

2017-09-30 38页 doc 130KB 33阅读

用户头像

is_591137

暂无简介

举报
室内温度检测控制器室内温度检测控制器 山东科技大学 课程: 单片微机原理 题目: 室内温度检测控制器 院 系: 信息工程系 专业班级: 电子信息科学与技术13-2班 学 号: 201323010230 学生姓名: 徐志宏 指导教师: 亓涛 许晋京 2015 年 12 月 31 日 成绩 评语: 指导教师 目录 一、课题设计思路 1.1 功能要求…………………………………………………. 1.2 设计原理及原理图…………………………………. 1.3 系统流程图………………………………………………. 二、硬件设计及软...
室内温度检测控制器
室内温度检测控制器 山东科技大学 课程: 单片微机原理 题目: 室内温度检测控制器 院 系: 信息工程系 专业班级: 电子信息科学与技术13-2班 学 号: 201323010230 学生姓名: 徐志宏 指导教师: 亓涛 许晋京 2015 年 12 月 31 日 成绩 评语: 指导教师 目录 一、课题设计思路 1.1 功能要求…………………………………………………. 1.2 设计原理及原理图…………………………………. 1.3 系统图………………………………………………. 二、硬件设计及软件编程 2.1 电路连线引脚图………………………………… 2.2 温度传感器 2.2.1 DS18B20工作原理……………………………. 2.2.2 硬件连接…………………………………… 2.2.3 软件程序设计……………………………… 2.3 时间存储器 2.3.1 DS1302工作原理………………………….. 2.3.2硬件连接…………………………………… 2.3.3软件程序设计………………………………. 2.4 EEPROM 2.4.1 24C16工作原理……………………………. 2.4.2硬件连接…………………………………… 2.4.3软件程序设计……………………………… 2.5 按键设计………………………………………… 三、整体文件工程…………………………………… 四、实训总结……………………………………… 一、课题设计思路 1.1 功能要求 实时检测室内环境温度,并通过继电器控制电加热器的开关,保持所处监测点温度保持在设定温度范围内。显示器实时显示实际温度值。超过温度设定值蜂鸣器报警与闪光三秒,并将超限值和超限时间保存在EEPROM中。温度值可人工随时设定、保存、查询显示功能。显示器的显示模式可通过键盘控制,显示模式有:实时温度,当前时间的月、日和时、分,设定的超温报警下限、电加热下限(低于报警下限启动电热器)、报警上限、风冷却上限(高于报警上限启动风扇)。可查询报警参数及时间(时、分)。 1.2 设计原理及系统原理图 ?温度传感器DS18B20将收集到温度数据传到单片机中经过数据处理在LED数码显示管中显示出来。 ?单片机和SPI总线存储器DS1302进行通信,单片机向存储器写入一串命令,然后,单片机读出时间数据进行显示。 ?设计两个按键实现二者的转换,键1实现显示温度,键2实现显示时间,另外设4个按键实现时间中小时数值的加减和分钟的加减以达到实现设定时间的目的。 ?将读出的温度与设定的数据(温度上下限)进行比较,若不在范围内则蜂鸣器报警、发光二极管闪烁;超过上限则通过继电器启动电风扇,超过下限则启动电热器 ?将超限值写入EEPROM中再读出,按键实现上下限以及超限值的显示。另外设两个按键实现上下限的加减以便达到自定义上下限的目的。系统原理图如下: 键盘键入 报警、灯闪烁 温度传感器 启动制冷系统 STC12C5A60S2 时钟存储器 启动制热系统 LED数码显示 EEPROM存储 1.3 系统流程图 二、硬件设计及软件编程 2.1电路连线引脚图 2.2 温度传感器 2.2.1 DS18B20工作原理 原理图如下图所示: +5V R14K7U1 23温度输出DQVCC+5V 1GND DS18B20GND DS18B20的一线工作流程是:初始化?ROM操作指令?存储器操作指令?数据传输,其工作时序包括初始化时序、写时序和读时序。DQ为数据输入/输出引脚、开漏单总线接口引脚,当被用着在寄生电源下,也可以向器件提供电源。温度测量范围为,55?,,125?,可编程为9位,12位A/D转换精度,测温分辨率可达0.0625?,被测温度用符号扩展的16位数字量方式串行输出。 以0.0625?/LSB形式达,其中S为符号位。例如,125?的数字输出为07D0H,,25.0625?的数字输出为0191H,,25.0625?的数字输出为FF6FH,,55?的数字输出为FC90H,所以在LED数码显示时要转化为十进制显示出来。 2.2.2硬件连接 P1.0接DS18B20温度传感器模块的OUT,P3.0、P3.1分别接静态数码管显示模块的RXD、TXD。 2.2.3软件程序设计 /*********18b20初始化函数*********/ uchar Init_DS18B20() { unsigned char x=0; DQ = 1; //DQ复位 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay(10);//等待器件做出反应 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(5); return x; } /***********读一个字节 ******************* unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--)//移动8次得到一个byte { DQ=1; DQ = 0; // 给脉冲信号 dat>>=1;//数据全部右移1位(把数据最高位空出来,用于接收新的单总线bit数据) DQ = 1; // 给脉冲信号 nops(); //DS18B20输出的数据在下降沿(下降沿产生读时隙)产生后15us后有效。 //以上就是产生一个读时隙 //在主机产生读时隙后,DS18B20开始发送0或1到总线上 if(DQ) //如果此时DQ为1则将数据暂存的最高位置1,否则忽略处理(不处理最高位为0) dat|=0x80; delay(5);//所有的读时隙必须至少有60us的持续时间 //数据被右移8次后,形成了一个完整byte(8个bit)数据 } return(dat);//送回读出的数据 } /*********写一个字节*********************/ // dat-要写入单总线的数据 void WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--)//循环8次,连续送出8个bit { DQ=1; _nop_(); DQ = 0;//拉低单总线 DQ = dat&0x01;//将dat数据最低位放到数据总线上 delay(5);//延时等待DS18b20器件读取该位数据 DQ = 1;//释放总线 dat>>=1;//数据右移一位 } delay(5);//延时稳定 } /**********读取温度********************/ unsigned int ReadTemperature(void) { unsigned int a=0; unsigned int b=0; unsigned int t=0; Init_DS18B20(); //DS18B20初始化(判断器件是否存在) //不需要写while(Init_DS18B20()) //因为它一直初始化,肯定初始化会成功 WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 delay(200); //等待转换结束 Init_DS18B20(); //每次通信前都要初始化 WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar();//读出DS18B20温度数据低8位MSB b=ReadOneChar();//读出DS18B20温度数据的高8位LSB(内部寄存器编号自加) b<<=8; t=b+a; return(t);//返回温度整数部分的数值 } /**********串行显示程序********************/ void dis_led() { uint k; uchar i; k=ReadTemperature()*62.5; digit[0]=k%10; digit[1]=k%100/10; digit[2]=k%1000/100; digit[3]=k%10000/1000; digit[4]=k/10000; SCON=0;//选择串口工作方式0 for(i=0;i<6;i++) { if(i!=3) { SBUF=table[digit[i]];//断码送入串行口收发缓冲器 } else SBUF=(table[digit[i]])|0x08; while(TI==0);//判断是否传送完毕 TI=0;//软件清0 } } 2.3 时间存储器 2.3.1 DS1302工作原理 原理图如下图所示: DS1302的引脚排列,其中Vcc2为主电源,VCC1为后备电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据传送的方法。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在 Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST 置为高电平。I/O为串行数据输入输出端(双向),SCLK为时钟输入端。 2.3.2 硬件连接 单片机P1.5、P1.6、P1.7分别与DS1302模块的RST、I/O、SCLK相连;P3.0、 P3.1分别与静态数码管的RXD、TXD相连。 2.3.3 软件程序设计 //*==============写入地址,再写入数据=============*1 void write(uchar addr,uchar shu) { uchar temp,i; temp=addr; RST=0;//VCC>=2.5V之前RST为0. SCLK=0;//只有在SCLK=0时,RST才能置为高电平. RST=1;//允许数据传输. for(i=0;i<8;i++) { if(temp&0x01==1)//取temp的最低位 { data_io=1; } else data_io=0; SCLK=1;//数据输入时SCLK上升沿有效. SCLK=0;//再次置0. temp>>=1;//右移一位 } temp=shu; for(i=0;i<8;i++) { if(temp&0x01==1)//取temp的最低位 { data_io=1; } else data_io=0; SCLK=1;//数据输入时SCLK上升沿有效. SCLK=0;//再次置0. temp>>=1;//右移一位 } } //*========写入一个地址,然后从中读出数据======== uchar read(uchar addr) { //*============写入地址============*1 uchar temp,i; RST=0;//VCC>=2.5V之前RST为0. SCLK=0;//只有在SCLK=0时,RST才能置为高电平. RST=1;//允许数据传输. temp=addr; for(i=0;i<8;i++) { SCLK=0;//先置0. if(temp&0x01==1) { data_io=1; } else data_io=0; SCLK=1;//数据输入时SCLK上升沿有效. temp=temp>>1; } //*===========从地址中读出数据==========*1 temp=0; for(i=0;i<8;i++) { if(data_io==1) { temp=temp|0x80; } else temp=temp&0x7f; SCLK=1; SCLK=0;//SCLK的电平一高一低把下一位从寄存器中送到i/o线上 temp=temp>>1; } return temp;//返回读出的数据给uchar read(uchar addr). } //*===========串行显示程序==========*1 void dis_led1(void) { uchar i; digit1[0]=miao&0x0f; miao=miao>>4; digit1[1]=miao&0x0f; digit1[2]=fen&0x0f; fen=fen>>4; digit1[3]=fen&0x0f; digit1[4]=shi&0x0f; shi=shi>>4; digit1[5]=shi&0x0f; digit1[6]=ri&0x0f; ri=ri>>4; digit1[7]=ri&0x0f; SCON=0;//选择串口工作方式0. for(i=0;i<6;i++) { SBUF=table[digit1[i]];//断码送入串行口收发缓冲器. while(TI==0);//判断是否传送完毕. TI=0;//软件清0. } } void dushijian() //读时间的程序 { do { miao=read(0x81); fen=read(0x83); shi=read(0x85); ri=read(0x87); anshijian(); dis_led1(); delayms(500); }while(key1==1); } 2.4 EEPROM 2.4.1 24C16工作原理 原理图如下图: 24C16是一个16K位串行CMOSEEPROM,内部含有2048个8位字节,有一个16字节页写缓冲器,该器件通过IIC总线接口进行操作,有一个专门的写保护功能。电可擦除可编程ROM,可自定时擦写周期,有写保护功能,保存数据时间长。EEPROM的擦除不需要借助于其它设备,它是以电子信号来修改其内容的,而且是以Byte为最小修改单位,不必将全部洗掉才能写入,彻底摆脱了EPROM Eraser和编程器的束缚。EEPROM在写入数据时,仍要利用一定的编程电压,属于双电压芯片。 2.4.2 硬件连接 EEPROM模块的SDA、SCL分别接单片机的P0.6、P0.7,P3.0、P3.1分别接静态数码管显示模块的RXD、TXD。 2.4.3 软件程序设计 //=============IIC开始时序========================== //FUNCTION:ROUTES TO PROVIDE A START SIGNAL void start(void) { SCL=0;SDA=1;NOP; SCL=1;SDA=0;NOP; SCL=0; } //==============IIC停止时序========================= //FUNCTION:ROUTES TO PROVIDE A STOP SIGNAL void stop(void) { SCL=0;SDA=0;NOP; SCL=1;SDA=1;NOP; SCL=0; } //===================================== //FUNCTION:ROUTES TO PROVIDE ACK SINGAL void ack(void) { SCL=0;SDA=0;NOP; SCL=1;NOP;SCL=0; } //===================================== //FUNCTION:ROUTES TO RELEASE THE SDA TO RECEIVE A ACK SIGNAL // OR TO PROVIDE A NO_ACK SIGNAL //type=1等待应答信号 //type=0 产生无应答信号 void nack(uchar type) { SCL=0;SDA=1;NOP; SCL=1;IFACK=SDA;NOP; SCL=0; if(type) { if(IFACK) //如果无应答信号,则置标志位NO_ACK,程序中止 { NO_ACK=1; //用户可以加入自己的异常处理程序 //while(1); } else NO_ACK=0; } } //======================================================= //FUNCTION:THE IIC DEVICE SHIFT OUT A BYTE TO THE MASTER uchar inbyte(void) { //从IIC器件中读出数据 SDA=1; SCL=1;a7=SDA;NOP;SCL=0; SCL=1;a6=SDA;NOP;SCL=0; SCL=1;a5=SDA;NOP;SCL=0; SCL=1;a4=SDA;NOP;SCL=0; SCL=1;a3=SDA;NOP;SCL=0; SCL=1;a2=SDA;NOP;SCL=0; SCL=1;a1=SDA;NOP;SCL=0; SCL=1;a0=SDA;NOP;SCL=0; return(bbyte); } //======================================================= //FUNCTION:THE IIC DEVICE SHIFT IN A BYTE FROM THE MASTER void outbyte(uchar outdata) //将数据写放IIC器件 { bbyte=outdata; SDA=a7;SCL=1;NOP;SCL=0; SDA=a6;SCL=1;NOP;SCL=0; SDA=a5;SCL=1;NOP;SCL=0; SDA=a4;SCL=1;NOP;SCL=0; SDA=a3;SCL=1;NOP;SCL=0; SDA=a2;SCL=1;NOP;SCL=0; SDA=a1;SCL=1;NOP;SCL=0; SDA=a0;SCL=1;NOP;SCL=0; } /*****写函数:入口参数:add为读起始地址,ptr数据保存指针,writelen为写出数据长度**/ void writebyteseq(uchar page_addr,uchar byte_address,uchar *ptr,uchar writelen) { uchar temph; uchar i; uchar x; x=(page_addr<<1); temph=(x|IIC_WRITE); start(); outbyte(temph); nack(1); outbyte(byte_address); nack(1); for(i=0;i #include #define uchar unsigned char #define uint unsigned int /***************定义一个8us的延时 ************************/ #define nop() {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_n op_();} #define ulong unsigned long uchar table[10]={0x77,0x14,0xb3,0xb6,0xd4,0xe6,0xe7,0x34,0xf7,0xf6}; uchar code table1[11]={0x77,0x14,0xb3,0xb6,0xd4,0xe6,0xe7,0x34,0xf7,0xf6,0x00}; uchar digit[8]={0,0,0,0,0,0,0,0}; uchar digit1[8]={0,0,0,0,0,10,10,10};//数码管只显示后六位 uchar digit2[8]={0,0,0,0,0,0,10,0};//新数组存放温度上下限 uchar miao,fen,shi,ri; sbit RST=P1^5; sbit data_io=P1^6; sbit SCLK=P1^7; sbit DQ=P1^0; sbit fm=P1^1; sbit led=P1^2; sbit jidianqi=P1^3; sbit key1=P0^0;//温度 sbit key2=P0^1;//日期 /*******************延时时间约为9-10us ************************/ void delay(unsigned int i)//延时函数 { unsigned char a,b; for(;i>0;i--) { for(b=13;b>0;b--) for(a=3;a>0;a--); } } void nops(void) //延时8us;误差 0us { unsigned char a,b; for(b=3;b>0;b--) for(a=14;a>0;a--); } /**************18b20初始化函数****************/ uchar Init_DS18B20() { unsigned char x=0; DQ = 1; //DQ复位 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay(10);//等待器件做出反应 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(5); return x; } /***********读一个字节 *******************/ unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--)//移动8次得到一个byte { DQ=1; DQ = 0; // 给脉冲信号 dat>>=1;//数据全部右移1位(把数据最高位空出来,用于接收新的单总线bit数据) DQ = 1; // 给脉冲信号 nops(); //DS18B20输出的数据在下降沿(下降沿产生读时隙)产生后15us后有效。 //以上就是产生一个读时隙 //在主机产生读时隙后,DS18B20开始发送0或1到总线上 if(DQ) //如果此时DQ为1则将数据暂存的最高位置1,否则忽略处理(不处理最 高位为0) dat|=0x80; delay(5);//所有的读时隙必须至少有60us的持续时间 //数据被右移8次后,形成了一个完整byte(8个bit)数据 } return(dat);//送回读出的数据 } /**********写一个字节, dat-要写入单总线的数据********************/ void WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--)//循环8次,连续送出8个bit { DQ=1; _nop_(); DQ = 0;//拉低单总线 DQ = dat&0x01;//将dat数据最低位放到数据总线上 delay(5);//延时等待DS18b20器件读取该位数据 DQ = 1;//释放总线 dat>>=1;//数据右移一位 } delay(5);//延时稳定 } /********读取温度, 返回:当前温度整数部分数值*****************/ unsigned int ReadTemperature(void) { unsigned int a=0; unsigned int b=0; unsigned int t=0; Init_DS18B20(); //DS18B20初始化(判断器件是否存在) WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 delay(200); //等待转换结束 Init_DS18B20(); //每次通信前都要初始化 WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar();//读出DS18B20温度数据低8位MSB b=ReadOneChar();//读出DS18B20温度数据的高8位LSB(内部寄存器编号自加) b<<=8; t=b+a; return(t);//返回温度整数部分的数值 } unsigned int dis_led(void) { int t; uint k; uchar i; k=ReadTemperature()*62.5; digit[0]=k%10; digit[1]=k%100/10; digit[2]=k%1000/100; digit[3]=k%10000/1000; digit[4]=k/10000; SCON=0;//选择串口工作方式0 t=digit[0]*10+digit[1]; for(i=0;i<6;i++) { if(i!=3) { SBUF=table1[digit[i]];//断码送入串行口收发缓冲器 } else SBUF=(table1[digit[i]])|0x08; while(TI==0);//判断是否传送完毕 TI=0;//软件清0 } return (t); } /*时钟程序*/ //*==============延时1ms程序=============*1 void delayms(uint a) { uint i,j; for(i=0;i=2.5V之前RST为0. SCLK=0;//只有在SCLK=0时,RST才能置为高电平. RST=1;//允许数据传输. for(i=0;i<8;i++) { if(temp&0x01==1)//取temp的最低位 { data_io=1; } else data_io=0; SCLK=1;//数据输入时SCLK上升沿有效. SCLK=0;//再次置0. temp>>=1;//右移一位 } temp=shu; for(i=0;i<8;i++) { if(temp&0x01==1)//取temp的最低位 { data_io=1; } else data_io=0; SCLK=1;//数据输入时SCLK上升沿有效. SCLK=0;//再次置0. temp>>=1;//右移一位 } } //*========写入一个地址,然后从中读出数据======== uchar read(uchar addr) { //*============写入地址============*1 uchar temp,i; RST=0;//VCC>=2.5V之前RST为0. SCLK=0;//只有在SCLK=0时,RST才能置为高电平. RST=1;//允许数据传输. temp=addr; for(i=0;i<8;i++) { SCLK=0;//先置0. if(temp&0x01==1) { data_io=1; } else data_io=0; SCLK=1;//数据输入时SCLK上升沿有效. temp=temp>>1; } //*===========从地址中读出数据==========*1 temp=0; for(i=0;i<8;i++) { if(data_io==1) { temp=temp|0x80; } else temp=temp&0x7f; SCLK=1; SCLK=0;//SCLK的电平一高一低把下一位从寄存器中送到i/o线上 temp=temp>>1; } return temp;//返回读出的数据给uchar read(uchar addr). } //*===========串行显示程序==========*1 void dis_led1(void) { uchar i; digit1[0]=miao&0x0f; miao=miao>>4; digit1[1]=miao&0x0f; digit1[2]=fen&0x0f; fen=fen>>4; digit1[3]=fen&0x0f; digit1[4]=shi&0x0f; shi=shi>>4; digit1[5]=shi&0x0f; digit1[6]=ri&0x0f; ri=ri>>4; digit1[7]=ri&0x0f; SCON=0;//选择串口工作方式0. for(i=0;i<6;i++) { SBUF=table[digit1[i]];//断码送入串行口收发缓冲器. while(TI==0);//判断是否传送完毕. TI=0;//软件清0. } } void anshijian() //键盘选择程序部分 { uchar keyc,shi1,fen1; P0=0xff; //置P0口输入状态 keyc=P0; //读入P0口状态 if(keyc!=0xff) //判断是否有按键按下 { delayms(10); //去抖动 if(keyc!=0xff) { if(keyc==0xdf) //时加 { if(shi==0x23) shi=0; else shi=shi+0x01; // shi1=shi&0x0f; if((shi1)==0x0a) { shi1=shi&0xf0; shi=shi1+0x10; } } else if(keyc==0xef) //时减 { if(shi==0) shi=0x23; else if((shi&0x0f)==0&&(shi&0xf0)!=0) { shi=(shi&0xf0)-0x10+0x09; } else shi=shi-0x01; } else if(keyc==0xf7) // 分增 { if(fen==0x59) fen=0; else fen=fen+0x01; fen1=fen&0x0f; if(fen1==0x0a) { fen1=fen&0xf0; fen=fen1+0x10; } } else if(keyc==0xfb) // 分减 { if(fen==0) fen=0x59; else if((fen&0x0f)==0&&(fen&0xf0)!=0) { fen=(fen&0xf0)-0x10+0x09; } else fen=fen-0x01; } write(0x8e,0x00);//wp置1,解除写入保护. write(0x80,miao); //秒寄存器的最高位置0,开启振荡 write(0x82,fen); write(0x84,shi); } } while(P0!=0xff); } void dushijian() { do { miao=read(0x81); fen=read(0x83); shi=read(0x85); ri=read(0x87); anshijian(); dis_led1(); delayms(500); }while(key1==1); } void main()//主程序 { uint p; miao=0x55; //定义时钟初值 fen=0x49; shi=0x07; write(0x8e,0x00);//wp置1,解除写入保护. write(0x80,miao); //秒寄存器的最高位置0,开启振荡 write(0x82,fen); write(0x84,shi); while(1) { dis_led(); p=ReadTemperature()*62.5/1000; if(p>25||p<14) { fm=0; led=0; delayms(3000); fm=1; led=1; delayms(3000); } if(!key2) { delayms(500); while(!key2) dushijian(); } if(!key1) { delayms(500); while(!key1) dis_led(); } } } 四(实训总结 这次实训虽然并没有按时将检测控制器的全部功能完成,但是仍然有巨大的收获。它将这一学期所学到的只是融会贯通,体现在其中,使我对于单片机的认识和使用更加深刻和熟练。 整个过程,我们团队分工配合。主要解决了定时器,eeprom,,蜂鸣器,18B20,LED数码管,LED灯,键盘控制,51单片机等一系列问题,其中我们没有继电器,风扇,还有加热器等一些外部器件,我们采用了LED代替的方法。通过网上查资料,翻阅课本,请教老师,团队协作,最终将其实现,整个过程一波三折。 最后,就是怎样利用程序将其实现。我们选用了较为简单的C语言,做了一些简短的程序,分块将其实现然后整合在一起,最终实现室温检测控制器的功能。
/
本文档为【室内温度检测控制器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索