当前位置:文档之家› 智能温控风扇实物报告

智能温控风扇实物报告

一、智能温控风扇的设计1.1单片机最小系统1.1.1单片机最小系统硬件电路晶振电路图1-1晶振电路复位电路图1-2复位电路下载电路电源电路P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T 014P3.7/RD17P3.6/WR 16P3.5/T 115U180C51C130pfC230pfC91nFX1CRYSTALV C CR110kV C CV C C123456789J552207-0985单片机最小系统图1-5连接电路1.1.2单片机最小系统焊接图1-6焊接实物1.2单片机应用系统1.2.1智能温控小风扇硬件电路按键电路2207-0985VCC1GND 2GND 3GND 4GND5P1577RST 8P179P1610ISP温度传感器接口电路P2.4123J452207-031912345678910111213141516J852207-1619VCCP2.4温度传感器接口图1-9温度传感器接口图1-10风扇焊接实物1.2.2智能温控小风扇控制程序/*************************************************************************************************************** 名称:智能温控键控小风扇功能:可通过按键调节设定值,通过数码管显示当前温度值和设定值,通过PWM技术来控制小风扇的转速,温差越大转速越快***************************************************************************************************************/ORG 0000HAJMP MAINORG 000BH ;定时器中断子程序入口,用以产生PWM高低电平 AJMP TIM0ORG 0200HMAIN: SETB EA ;中断初始化SETB ET0MOV TMOD,#01HMOV TL0,#00MOV TH0,#255SETB TR0MOV SP,#55HTEMP_H EQU 37H ;字定义伪指令TEMP_L EQU 36HTEMP_D EQU 35HTEMPV EQU 45HTEMSV EQU 50HTEMPV_S EQU 47HTEMPV_G EQU 46HTEMSV_S EQU 52HTEMSV_G EQU 51HBUS BIT P2.4 ;位定义伪指令SETB P1.3 ;用于产生PWM脉冲的端口MOV DPTR,#TABEL ;数码管显示段码首地址MOV TEMSV,#30 ;假定的设定值MOV R5,#191 ;用于PWM控制占空比参数的寄存器MOV R6,#255LOOP:LCALL TEMPC ;温度暂存器的读取子程序LCALL CHANGE ; 温度转换子程序LCALL DISPLAY ;温度显示子程序LCALL KEYSCAN ;按键扫描控制设定值子程序LCALL PWM ;PWM电机调速子程序SJMP LOOP/***************************************************名称:获取DS18B20温度暂存器数据子程序功能:将温度低字节存入35H寄存器,温度高字节存入36H寄存器***************************************************/TEMPC:LCALL RES ;初始化子程序MOV A,#0CCH ;写跳过rom命令字节ACALL WBMOV A,#44H ;写温度转换命令字节ACALL WBLCALL DELAY1S ;等待温度转换时间(等待时间用显示和按键扫描子程序填充)LCALL RES ;初始化子程序MOV A,#0CCH ;写跳过rom命令字节ACALL WBMOV A,#0BEH ;写读ram命令字节ACALL WBACALL RB ;读ram数据字节MOV TEMP_L,A ;将温度低8位放入36HACALL RB ;读ram数据字节MOV TEMP_H,A ;将温度高8位放入37HRET/************************************************名称:写字节子程序功能:将写入寄存器A中的字节送入DS18B20************************************************/WB:MOV R7,#8 ;一个字节8位CLR EA ;暂时关中断以防止定时器中断的影响WB1:RRC A ;带进位循环右移将字节的位依次移入c中方便后续操作 JC W11 ;判断为“1”转入写“1”子程序ACALL W0 ;不为“1”即为“0”进入写“0”子程序SJMP W00W11:ACALL W1W00:DJNZ R7,WB1 ;判断是否写8位,即一个字节SETB EA ;开中断继续pwm的定时器中断RET/************************************************名称:写“0”子程序功能:把0位写入DS18B20************************************************/W0:CLR BUS ;主机拉低总线让DS18B20检测写信号LCALL DELAY60 ;写周期至少60usSETB BUS ;释放总线RET/***********************************************名称:写“1”子程序功能:把1位写入DS18B20************************************************/W1:CLR BUS ;主机拉低总线让DS18B20检测写信号NOPNOPSETB BUS ;写“1”信号LCALL DELAY60 ;写周期至少60usSETB BUS ;释放总线RET/************************************************名称:读DS18B20数据字节子程序功能:将读出的DS18B20数据字节放入寄存器A中************************************************/RB:MOV R7,#8 ;读一个字节8位CLR EA ;暂时关中断以防止pwm定时中断的干扰RB1:ACALL RED ;调用读一位子程序RRC ADJNZ R7,RB1 ;判断是否读一个字节即8位SETB EA ;开中断继续pwm定时器中断RET/**********************************************名称:读DS18B20数据位子程序功能:将读出的位数据存入C中**********************************************/RED:CLR C ;清除将要使用的位寄存器CSETB BUSNOPNOPCLR BUSNOPNOPNOPSETB BUSMOV C,BUSMOV C,BUSMOV C,BUSMOV C,BUSACALL DELAY60 ;读周期至少60usRET/*********************************************名称:初始化子程序功能:建立主机和DS18B20间的握手*********************************************/RES:MOV R2,#8MOV R3,#12CLR BUS ;主机发出初始化信号ACALL DELAY512SETB BUSACALL DELAY15 ;延时15usC0:MOV C,BUS ;判断15--60us内是否有从器件应答JNC E0DJNZ R2,C0SJMP RES ;若无应答重新初始化E0:MOV C,BUS ;有应答则判断是否大于60us以防是其他的干扰信号 DJNZ R3,E1SJMP D0E1:JNC E0SJMP RES ;若不大于60us,应答失败,重新初始化D0:ACALL DELAY180 ;若应答信号大于60us,判断是否小于240us,以防其他原因造成的总线电平拉低MOV C,BUSJNC RES ;若应答信号时间大于240us,应答失败,重新初始化CLR P1.0;若应答成功,点亮小灯表示初始化成功RET/***********************************************名称:温度转换子程序功能:将获取的16位温度数据转换为温度数值用于数码管显示***********************************************/CHANGE:MOV A,TEMP_L ;保留温度低字节高四位ANL A,#0F0HSWAP AMOV TEMPV,A ;暂时存入温度值45HMOV A,TEMP_H ;保留温度高字节低四位ANL A,#0FHSWAP AORL A,TEMPV ;温度高字节低四位低字节高四位连接MOV TEMPV,A ;将转换完成的温度数据存入45H中MOV A,TEMP_LJNB Acc.3,CHANGE1 ;温度低字节低四位小数部分四舍五入MOV R0,#TEMPVINC @R0CHANGE1:MOV A,TEMPV ;将已转化温度的十位和个位分离MOV B,#10DIV ABMOV TEMPV_S,A ;已转化温度十位存入47HMOV TEMPV_G,B ;已转化温度个位存入46HMOV A,TEMSV ;将设定值的十位和个位分离MOV B,#10DIV ABMOV TEMSV_S,A ;设定值十位存入52HMOV TEMSV_G,B ;设定值个位存入51HRET/********************************************名称:数码管显示子程序功能:对温度值十位和个位及设定值十位和个位进行显示********************************************/DISPLAY:MOV P2,#0FEH ;位选温度值十位MOV A,TEMPV_S ;段选温度值十位MOVC A,@A+DPTRMOV P0,AACALL DELAY512MOV P2,#0FDH ;位选温度值个位MOV A,TEMPV_G ;段选温度值个位MOVC A,@A+DPTRMOV P0,AACALL DELAY512MOV P2,#0FBH ;位选设定值十位MOV A,TEMSV_S ;段选设定值十位MOVC A,@A+DPTRMOV P0,AACALL DELAY512MOV P2,#0F7H ;位选设定值个位MOV A,TEMSV_G ;段选设定值个位MOVC A,@A+DPTRMOV P0,AACALL DELAY512RET/*********************************************名称:按键扫描子程序功能:扫描P1.0口和P1.1口P1.0口按下设定值加1P1.1口按下设定值减1**********************************************/ KEYSCAN:SETB P1.0 ;I/O口做输入口使用要先置“1” SETB P1.1PUSH ACCPUSH PSWCLR RS0MOV C,P1.0 ;把P1.0口的值送入c中做判断使用 JNC DEB0 ;若按下则低电平,转入去抖操作SJMP JP1 ;若没按下则转检测P1.1口DEB0:MOV R7,#5 ;延时10ms去抖操作DELAY10MS0:ACALL DISPLAY ;调用显示子程序来减少闪烁DJNZ R7,DELAY10MS0MOV C,P1.0 ;延时10ms后再次检测P1.0JNC ADDR ;若依然为低电平则转入加1SJMP JP1 ;若为高电平误操作转入判断P1.1口ADDR:MOV C,P1.0 ;松手检测,若一直为低电平则一直检测直至松手为高电平JNC ADDRMOV R0,#TEMSV ;设定值加1INC @R0CJNE @R0,#40,JP1 ;设定值上限39度MOV TEMSV,#39JP1:MOV C,P1.1 ;检测P1.1口同上JNC DEB1SJMP LAST ;若无按下则转结束DEB1:MOV R7,#5DELAY10MS1:ACALL DISPLAYDJNZ R7,DELAY10MS1MOV C,P1.1JNC DECRSJMP LASTDECR:MOV C,P1.1JNC DECRMOV R0,#TEMSV ;设定值减1DEC @R0CJNE @R0,#19,LAST ;设定值下限20度MOV TEMSV,#20LAST:POP PSWPOP ACCRET/*****************************************************名称:pwm调制定时器参数产生子程序功能:根据当前值和设定值的差值64*(PV-SV)/(40-SV)来决定pwm控制参数的值即R5,R6的值*******************************************************/PWM:MOV R5,#191 ;用于PWM控制占空比参数的寄存器 MOV R6,#255CLR CMOV A,TEMPV ;温度值地址60HSUBB A,TEMSV ;设定值50H,当前温度值减去设定值JNC PWM1MOV A,#00HPWM1:MOV R4,A ;结果放入R4MOV A,#40SUBB A,TEMPV ;上限调节温度40减去设定值MOV B,AMOV A,#64DIV AB ;得到每单位温度代表的PWM参数值 MOV B,R4MUL AB ;当前温差下所产生的PWM参数值的变化量 MOV R4,AMOV A,R5ADD A,R4MOV R5,A ;当前温度下所产生的PWM新参数值R5MOV A,R6SUBB A,R4MOV R6,A ;当前温度下所产生的PWM新参数值R6RET/***********************************名称:定时器0中断服务子程序功能:高低电平的不停变换***********************************/TIM0:PUSH PSWCLR RS0JB P1.3,L0MOV TH0,R5SJMP LASTML0:MOV TH0,R6LASTM:CPL P1.3POP PSWRETITABEL:DB 0C0H,0F9H,0A4H,0B0H,99HDB 92H,82H,0F8H,80H,90H/*******************************************名称:延时1s子程序功能:延时1s用于ds18b20温度转换*******************************************/DELAY1S:SETB RS0CLR RS1MOV R0,#0FFHDL3:ACALL DISPLAYACALL KEYSCANACALL DISPLAYACALL KEYSCANACALL DISPLAYACALL KEYSCANDJNZ R0,DL3CLR RS0RET/******************************************* 名称:延时512us子程序功能:延时512us用于ds18b20温度传感器和主机握手初始化子程序*******************************************/ DELAY512:SETB RS0CLR RS1MOV R0,#0FFHDL0:DJNZ R0,DL0CLR RS0RET/******************************************* 名称:延时15us子程序功能:延时15us用于ds18b20温度传感器和主机握手初始化子程序*******************************************/ DELAY15:SETB RS0CLR RS1MOV R0,#5DL1:DJNZ R0,DL1CLR RS0RET/******************************************* 名称:延时60us子程序功能:延时60us用于ds18b20温度传感器读写指令和数据*******************************************/ DELAY60:ACALL DELAY15ACALL DELAY15ACALL DELAY15ACALL DELAY15RET/******************************************* 名称:延时180us子程序功能:延时180us用于ds18b20温度传感器和主机握手初始化子程序*******************************************/DELAY180:SETB RS0CLR RS1NOPMOV R0,#87DL2:DJNZ R0,DL2CLR RS0RETEND1.2.3总结“纸上得来终觉浅,绝知此事要躬行”,我们在学校学习的理论知识在实践过程中转化,这个过程是非常有必要的,通过智能温控小风扇的设计,我深刻的体会到在进行大型程序设计时一定要注意几个问题。

相关主题