1、任务二智能孵蛋控制系统制作智能孵蛋控制系统制作项目十 数字温度计制作任务二 智能孵蛋控制系统制作 1 2 3 4 5 任务书:任务书:11智能孵蛋控制系统描述及有关说明为了保证能更好的孵化鸡蛋,保持鸡蛋的温度,智能孵蛋控制系统可以根据室内的温度来调节灯光的强度,从而达到控温的效果;也可自行调节灯光强度来调节灯光强度。(1)显示:由8位数码管组成,实现DS18B20测得室温的显示和LED灯光的等级显示。(2)独立键盘:SB1:实现“启动/停止”功能;SB2:实现自动和手动模式的切换。SB3:实现“调节”功能。(3)DAC0832:用来控制温度表的孵化灯光的亮度(用LED0模拟孵化灯)。(4)DS
2、18B20:用来检测室温。(5)LED0:使用LED0模拟孵化灯。其作用为对室内控制加热,尽量营造一个恒温孵化环境。2系统控制要求系统上电,数码管不显示,按下“启动/停止”按键,数码管靠左两位显示室温XX,第三位显示C,表示摄氏度;靠右显示亮度等级,格式为:“LvX”,开始对室温进行实时检测。灯光等级范围:0-9。按下“自/手”动按键,可切换自动模式和手动模式。在自动模式下:当温度超过30时,灯光等级为0级;当温度超过或等于21度时,灯光等级为9级。当温度为22-30时,等级应根据温度的升高而降低,对应的变化范围为8-0。在手动模式下,按下“调节”按键,可对灯光亮度进行0-9级之间的调节。若再
3、按下“启动/停止”按键,则数码管不显示,停止测温工作,灯灯熄灭(0级),处于待机状态。2任务分析任务分析(1)DS18B20单总线数字式温度传感器(2)DS18B20 寄存器与EEPROM解读控制指令名称控制指令名称命令字命令字功能说明:功能说明:Read ROM33H读读ROM指令:这个命令允许单片机读到指令:这个命令允许单片机读到DS18B20的的64位位ROM。Match ROM55H指定匹配芯片指令:指定匹配芯片指令:这个指令后面紧跟着由单片机发出了这个指令后面紧跟着由单片机发出了64位序列号,当总线上有多只位序列号,当总线上有多只 DS18B20时,只有与控制发出的序列号相同的芯片才
4、可以做出反应,其它芯时,只有与控制发出的序列号相同的芯片才可以做出反应,其它芯片将等待下一次复位。这条指令适应单芯片和多芯片挂接。片将等待下一次复位。这条指令适应单芯片和多芯片挂接。Skip ROMCCH跳过跳过ROM编码指令:编码指令:这条指令使芯片不对这条指令使芯片不对ROM编码做出反应,在单总线的情况之下,为了节省时间则可以选用此指令。如果在多芯片挂接时使用此指令将会出现编码做出反应,在单总线的情况之下,为了节省时间则可以选用此指令。如果在多芯片挂接时使用此指令将会出现数据冲突,导致错误出现。数据冲突,导致错误出现。Search ROMF0H搜索芯片指令:在芯片初始化后,搜索指令允许总线
5、上挂接多芯片时用排除法识别所有器件的搜索芯片指令:在芯片初始化后,搜索指令允许总线上挂接多芯片时用排除法识别所有器件的64位位ROM。Alarm SearchECH报警芯片搜索指令:报警芯片搜索指令:在多芯片挂接的情况下,报警芯片搜索指令只对附合温度高于在多芯片挂接的情况下,报警芯片搜索指令只对附合温度高于TH或小于或小于TL报警条件的芯片做出反应。只要芯片不掉电,报警状态将被保持,报警条件的芯片做出反应。只要芯片不掉电,报警状态将被保持,直到再一次测得温度不达到报警条件为止。直到再一次测得温度不达到报警条件为止。Write Scratchpad4EH向向RAM中写数据指令:中写数据指令:这是
6、向这是向RAM中写入数据的指令,随后写入的两个字节的数据将会被存到中写入数据的指令,随后写入的两个字节的数据将会被存到RAM的第的第3字节(高温报警字节(高温报警TH)和第)和第4字节(低温报警字节(低温报警TL)。再次写入)。再次写入的一个字节存入第的一个字节存入第5字节中(配置寄存器字节中(配置寄存器CR)。写入过程中可以用复位信号中止写入。)。写入过程中可以用复位信号中止写入。Read ScratchpadBEH从从RAM中读数据指令:中读数据指令:此指令将从此指令将从RAM中读数据,从中读数据,从RAM的第的第1字节开始,一直可以读到第字节开始,一直可以读到第9字节,完成整个字节,完成
7、整个RAM数据的读出。芯片允许在读过程中用复位信号中止数据的读出。芯片允许在读过程中用复位信号中止读取,即可以不读后面不需要的字节以减少读取时间。读取,即可以不读后面不需要的字节以减少读取时间。Copy Scratchpad48H将将RAM数据复制到数据复制到EEPROM 中指令:中指令:此指令将此指令将RAM中的数据存入中的数据存入EEPROM中,以使数据掉电不丢失。此后由于芯片忙于中,以使数据掉电不丢失。此后由于芯片忙于EEPROM储存处理,当单片机发一个读时间隙时,总线上输储存处理,当单片机发一个读时间隙时,总线上输出出“0”,当储存工作完成时,总线将输出,当储存工作完成时,总线将输出“
8、1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持10MS,来维持芯片工作。,来维持芯片工作。Convert T44H开始温度转换指令:开始温度转换指令:收到此指令后芯片将进行一次温度转换,将转换的温度值放入收到此指令后芯片将进行一次温度转换,将转换的温度值放入RAM的第的第1、2地址。此后由于芯片忙于温度转换处理,当单片机发一个读时间地址。此后由于芯片忙于温度转换处理,当单片机发一个读时间隙时,总线上输出隙时,总线上输出“0”,当储存工作完成时,总线将输出,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出
9、此指令后立刻超用强上拉并至少保持。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持500mS(12位精度时),来维持芯片工作。位精度时),来维持芯片工作。Recall EEPROMB8H将将EEPROM 中的报警值复制到中的报警值复制到RAM指令。指令。Read Power SupplyB4H检测芯片电源状态指令:此指令发出后发出读时间隙,芯片会返回它的电源状态字,检测芯片电源状态指令:此指令发出后发出读时间隙,芯片会返回它的电源状态字,“0”为寄生电源状态,为寄生电源状态,“1”为外部电源状态。为外部电源状态。(3)DS18B20控制指令介绍(4)DS18B20控制程序编写-复位与
10、应答时序/DS18B20的复位函数如下所示。sbit DQ =P21;/映射温度传送数据IO口为P2.1unsigned char RST_DS18B20(void)unsigned char x=1;/默认设置为初始化失败 DQ=1;/释放总线 delay_s(20);/稍做延时20s DQ=0;/单片机将总线拉低 delay_s(720);/精确延时 480s-960s 我们取中间值720s DQ=1;/释放总线 delay_s(60);/延时1560s delay_s(150);/DS18B20应答信号60240s,取中间值150(4)DS18B20控制程序编写-写数据时序/DS18B2
11、0写数据函数如下所示:sbit DQ =P21;/映射温度传送数据IO口为P2.1void WriteOneChar(unsigned char dat)unsigned char i=0;for(i=8;i0;i-)DQ=0;/拉低总线,产生写信号 delay_s(15);/延时15s DQ=dat&0 x01;/把数据最低位输出给总线 delay_s(60);/延时60s DQ=1;/释放总线,等待总线恢复(4)DS18B20控制程序编写-读数据时序/DS18B20读数据函数如下所示:sbit DQ =P21;/映射温度传送数据IO口为P2.1unsigned char ReadOneCh
12、ar(void)unsigned char i=0;unsigned char dat=0;for(i=8;i0;i-)dat=1;/数据移1位 DQ=0;/拉低总线产生读信号号 delay_s(1);/延时1s,由于51单片机速度较低可以省去 DQ=1;/释放总线,准备读数据。(4)DS18B20温度采样范例程序/DS18B20温度采样范例程序sbit DQ =P21;/映射温度传送数据IO口为P2.1/*读取ds18b20当前温度*/void ReadTemp(void)unsigned char a=0;unsigned char b=0;if(!RST_DS18B20()/判断是否初始
13、化成功 WriteOneChar(0 xCC);/跳过读序号列号的操作 WriteOneChar(0 x44);/启动温度转换 delay_us(41667);/延时1秒,等待转换完成 if(!RST_DS18B20()/判断是否初始化成功 (5)DAC0832介绍及应用简介(5)DAC0832介绍及应用典型应用电路(5)DAC0832介绍及应用控制程序编写DAC0832可以通过单片机总线直接访问,其总线写入子程序如下:unsigned char xdata CS_DAC _at_ 0 xdfff;/(P25)void Write_DAC0832(unsigned char num)CS_DA
14、C=num;要使用DAC0832控制LED等具有09 共10个亮度等级,还需要对各个亮度等级DAC需要写入的数据进行运算。其运算公式为:3硬件电路的设计与搭建硬件电路的设计与搭建智能孵蛋控制系统模块接线图(YL-236单片机实训装置单片机实训装置)软件编程软件编程 4 1、主程序流程图2、参考程序/智能孵蛋控制系统参考程序#include reg52.h#define ON 1#define OFF 0bit set_mark=0;/自动和手动切换标志位 1:自动 0:手动bit RUN_or_STOP=OFF;/启动/停止标志位,ON:启动,OFF:停止unsigned char LV=0;
15、/LED灯亮度等级参数 默认为0级/*DAC0832*/unsigned char xdata CS_DAC _at_ 0 xdfff;/(P25)#define show_LED CS_DAC=(9-LV)*28.33#define extinguish_LED CS_DAC=255/*/*数码管*/unsigned char xdata DM _at_ 0 x7fff;/断码(P27)unsigned char xdata PX _at_ 0 xbfff;/片选(P26)unsigned char code M7G=/数码管字模 0 xc0,0 xf9,0 xa4,0 xb0,0 x99,
16、0 x92,0 x82,0 xf8,0 x80,0 x90,/09 0 xff,0 xc6,0 xc7,0 xe3,/灭,C,L,v;unsigned char str8=/数码管缓存 10,10,10,10,10,10,10,103、程序说明本程序主要通过DS18B20来读取温度并由按键来控制灯光亮度来达到恒温效果。其中定义了一个LV变量:用来控制LED灯光的亮度等级。位变量RUN_or_STOP:用来标志温度的采样启停。位变量set_mark:用来控制自动和手动的切换。KEY():用来启停温度采样、调节LED灯光等级亮度和自动手动的切换。Init_DS18B20():初始化DS18B20。
17、ReadOneChar():DS1820读一个字节子程序。WriteOneChar():DS1820写一个字节子程序。ReadTemp():读取DS18B20当前温度。auto_mode():自动模式下的等级调节。项目实施项目实施 5 1硬件电路连接:按照硬件电路接线图,选择所需的模块并进行布局,然后将电源模块、主机模块和数码管,LED显示模块、独立键盘和DAC0832等模块用导线进行连接。2打开keil软件,通过菜单新建立一个项目文件FDJ,然后再建一个文件名为FDJ.C的源程序文件并添加到项目中,将上面的参考程序输入并保存。3对源程序进行编译和链接,产生目标代码并烧录到单片机中。4接通电源,让单片机运行,通过对应按键操作检测系统工作是否正常。5进行扎线,整理。