学习情境三数字式温度计制作与调试说明书电子1034班组别:第四组组员:XXXXXX2012年3月8日目录一、工作任务.............................................................................................. - 3 -二、总体设计思路...................................................................................... - 3 -2.1整体功能说明 .................................................. - 3 -2.2总体框图 ...................................................... - 3 -三、硬件设计.................................................................................................. - 3 -3.1硬件模块组成 .................................................. - 3 -3.2各模块说明 .................................................... - 3 -1)主控制器......................................................................................................................... - 3 - 2)显示驱动与显示电路........................................................................................................... - 4 - 3)测温模块............................................................................................................................... - 4 - 4)报警电路............................................................................................................................... - 4 - 5)复位电路............................................................................................................................... - 5 -四、软件设计.................................................................................................. - 5 -4.1程序结构 ...................................................... - 5 -4.2各模块说明及流程图 ............................................ - 6 -1)主程序流程图 ......................................................................................................................... - 6 -2)读出温度子程序流程图....................................................................................................... - 6 - 3)显示数据刷新子程序流程图............................................................................................... - 7 - 4)计算温度子程序流程........................................................................................................... - 7 - 5)温度转换命令子程序流程图............................................................................................... - 8 -4.3程序清单 ...................................................... - 8 -五、调试过程................................................................................................ - 13 -5.1调试方法与步骤 ............................................... - 13 -5.2调试结果 ..................................................... - 13 -六、附件........................................................................................................ - 14 -一、工作任务开发完成一个简易的数字式温度计。
二、总体设计思路2.1整体功能说明开发完成一个简易的数字式温度计。
测温范围在-55~125℃,误差在±0.5℃以内。
温度测量间隔时间选择1~2s。
通过键盘扩展(行列式或独立式按键),有温度上下限值及温度报警功能。
在数字式温度计的制作中主要以51单片机(AT89C51)来控制,用温度传感器检测外界的温度,软件的显示子程序用四位一体数码管显示出来,精确到1位小数点,在超出测温范围时,进行报警功能。
2.2总体框图系统框图三、硬件设计3.1硬件模块组成本电路由单片机,测温电路,复位电路,报警电路,显示驱动与显示电路等组成了数字式温度计。
3.2各模块说明1)主控制器:单片机AT89C51具有低电压和小体积等特点,两个端口刚好满足系统的设计需要痕适合便携手持式产品的设计使用。
2)显示驱动与显示电路:采用共阳四位LED数码管,用三极管做驱动3)测温模块:DS18B20温度传感器是智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
4)报警电路:运用直流的蜂鸣器,发光二极管组成,用于电路在超限的情况下发出光报警,也可通过取反来实现电路的闪烁报警。
5)复位电路:采用按键手动复位电路,外接电容电阻与点动开关。
四、软件设计4.1程序结构软件设计分为主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和显示数据刷新子程序主程序定时报警按键显示测温A / D 转换定时1秒LED显示数据转换发送数据接收数据蜂鸣器报警独立式按键软件流程图4.2各模块说明及流程图 1)主程序流程图2)读出温度子程序流程图读出温度子程序的主要功能是读出 RAM 中的 9 字节。
在读出时须进行 CRC 校验,校验有错时不进行温度数据的改写。
说明:主程序的主要 功能是负责温度的实时显示、读出并处理 DS18B20 的测量温度值温度测量每1s 进行一次。
这样可以在1s 之内测量一次被测温度。
4)计算温度子程序流程显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。
计算温度子程序将RAM 中读取值进行BCD 码的转换运算,并进行温度值正负的判定。
4.3程序清单;****************************************************; 常数定义;*************************************************** TIMEL EQU 0E0H ;20MS,定时器0 时间常数TIMEH EQU 0B1H ;TEMPHEAD EQU 36H ;;***************************************************; 工作内存定义;*************************************************** BITST DA TA 20HTIME1SOK BIT BITST.1TEMPONEOK BIT BITST.2TEMPL DA TA 26HTEMPH DA TA 27HTEMPHC DA TA 28HTEMPLC DA TA 29H;*************************************************; 引脚定义;************************************************** TEMPDIN BIT P3.4;**************************************************ORG 0000HAJMP MAINORG 0003HAJMP INT_0ORG 000BH 温度转换命令子程序主要是发温度转换开始命令。
当采用 12 位分辨率时,转换时间约为 750 ms 。
在本程序设计中,采用 1s 显示程序延时法等待转换的完成。
AJMP T_BORG 0013HAJMP INT_1ORG 0030HMAIN:MOV TMOD,#00HMOV TH0,#63HMOV TL0,#18HMOV R5,#100SETB 07HSETB IT0SETB IT1SETB EX0SETB EX1SETB ET0SETB EASETB TR0LCALL READTEMPLOOP:LCALL CFLCALL DISAJMP LOOPT_B:MOV TH0,#63HMOV TL0,#18HDJNZ R5,LOOP8MOV R5,#100LCALL READTEMPLCALL READTEMP1CALL CONVTEMPLOOP8:RETIINT_0: CLR 05HINT_1: JB 05H,;*************************************** ; 子程序区;*************************************** ; RESET DS18B20;*************************************** INITDS1820: SETB TEMPDIN ;NOP ;NOP ;CLR TEMPDIN ;MOV R6, #0A0H ; DELAY 480usDJNZ R6, $MOV R6, #0A0HDJNZ R6, $ ;SETB TEMPDIN ;MOV R6, #32H ; DELAY 70usDJNZ R6, $ ;MOV R6,#3CHLOOP1820: MOV C, TEMPDIN ;JC INITDS1820OUT ;DJNZ R6,LOOP1820MOV R6, #064H ; DELAY 200usDJNZ R6, $ ;SJMP INITDS1820 ;RET ;INITDS1820OUT: SETB TEMPDIN ;RET ;;读DS18B20的程序, 从DS18B20中读出一个字节的数据READDS1820: MOV R7, #08H ;SETB TEMPDIN ;NOP ;NOP ;READDS1820LOOP: CLR TEMPDIN ;NOP ;NOP ;NOP ;SETB TEMPDIN ;MOV R6, #07H ; DELAY 15usDJNZ R6, $ ;MOV C, TEMPDIN ;MOV R6, #3CH ; DELAY 120usDJNZ R6, $ ;RRC A ;SETB TEMPDIN ;DJNZ R7, READDS1820LOOPMOV R6, #3CH ; DELAY 120usDJNZ R6, $ ;RET ;; 写DS18B20的程序, 从DS18B20中写一个字节的数据WRITEDS1820: MOV R7, #08H ;SETB TEMPDIN ;NOP ;NOP ;WRITEDS1820LOP: CLR TEMPDIN ;MOV R6, #07H ; DELAY 15usDJNZ R6, $ ;RRC A;MOV TEMPDIN, C ;MOV R6, #34H ; DELAY 104usDJNZ R6, $ ;SETB TEMPDIN ;DJNZ R7, WRITEDS1820LOPRET ;;******************************************; READ TEMP;****************************************** READTEMP: LCALL INITDS1820 ;MOV A, #0CCH ;LCALL WRITEDS1820 ; SKIP ROMMOV R6, #34H ; DELAY 104usDJNZ R6, $ ;MOV A, #44H ;LCALL WRITEDS1820 ; START CONVERSION MOV R6, #34H ; DELAY 104usDJNZ R6, $ ;RET ;READTEMP1:LCALL INITDS1820 ;MOV A, #0CCH ;LCALL WRITEDS1820 ; SKIP ROMMOV R6, #34H ; DELAY 104usDJNZ R6, $ ;MOV A, #0BEH ;LCALL WRITEDS1820 ; SCRA TCHPADMOV R6, #34H ; DELAY 104usDJNZ R6, $ ;MOV R5, #09H ;MOV R0, #TEMPHEAD ;MOV B,#00HREADTEMP2: LCALL READDS1820 ;MOV @R0, A ;INC R0 ;READTEMP21: LCALL CRC8CAL;DJNZ R5, READTEMP2 ;MOV A, B ;JNZ READTEMPOUT ;MOV A, TEMPHEAD + 0 ;MOV TEMPL, A ;MOV A, TEMPHEAD + 1 ;MOV TEMPH, A ;READTEMPOUT: RET ;Calculate CRC-8 Values. Uses The CCITT-8 Polynomial, Expressed As ; X^8 + X^5 + X^4 + 1 CRC8CAL: PUSH ACC ;MOV R7, #08H ; Number Bits In Byte CRC8LOOP1: XRL A, B ; Calculate CRCRRC A ; Move To CarryMOV A, B ; Get The Last CRC ValueJNC CRC8LOOP2 ; Skip If Data == 0 XRL A, #18H ; Update The CRC Value CRC8LOOP2: RRC A ; Position The New CRC MOV B, A ; Store The New CRCPOP ACC ; Get The Remaining BitsRR A ; Position The Next BitPUSH ACC ; Save The Remaining BitsDJNZ R7, CRC8LOOP1 ; Repeat For 8 BitsPOP ACCRET;;处理温度BCD 码子程序CONVTEMP: MOV A, TEMPH ;ANL A, #80H ;JZ TEMPC1 ;CLR C ;MOV A, TEMPL ;CPL A ;ADD A, #01H ;MOV TEMPL, A ;MOV A, TEMPH ; -CPL A ;ADDC A, #00H ;MOV TEMPH, A ; TEMPHC HI = 符号位MOV TEMPHC, #0BH ;SJMP TEMPC11 ;TEMPC1: MOV TEMPHC, #0AH ; + TEMPC11: MOV A,TEMPHCSWAP AMOV TEMPHC,AMOV A, TEMPL ;ANL A, #0FH ; 乘0.0625MOV DPTR, #TEMPDOTTAB ;MOVC A, @A + DPTR ; MOV TEMPLC, A ;TEMPLC LOW = 小数部分BCDMOV A, TEMPL ; 整数部分AN A, #0F0H ;SWAP A ;MOV TEMPL, A ;MOV A, TEMPH ;ANL A, #0FH ;SWAP A ;ORL A, TEMPL ;LCALL HEX2BCD1 ;MOV TEMPL, A ;ANL A, #0F0H ;SWAP A ;ORL A, TEMPHC ; TEMPHC LOW = 十位数BCDMOV TEMPHC, A ;MOV A, TEMPL ;ANL A, #0FH ;SWAP A ; TEMPLC HI = 个位数BCDORL A, TEMPLC ;MOV TEMPLC, A ;MOV A, R7 ;JZ TEMPC12 ;ANL A, #0FH ;SWAP A ;MOV R7, A ;MOV A, TEMPHC ; TEMPHC HI = 百位数BCDANL A, #0FH ;ORL A, R7 ;MOV TEMPHC, A ;TEMPC12: RET ;;**********************************************; 小数部分码表;********************************************** TEMPDOTTAB: DB 00H, 01H, 01H, 02H, 03H, 03H,04H, 04H, 05H, 06H DB 06H, 07H, 08H, 08H, 09H, 09H;*******************************************; 单字节16 进制转BCD;*****************************************HEX2BCD1: MOV B, #064H ; 16 进制-> BCDDIV AB ; B = A % 100MOV R7, A ; R7 = 百位数MOV A, #0AH ;XCH A, B ;DIV AB ; B = A % BSWAP A ;ORL A, B ;RET ;DIS:MOV R1,#70HMOV R2,#11111110BLD0:MOV P0,#00HMOV A,@R1MOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,AMOV A,R2JNB ACC.2,NBSETB P0.7AJMP BNNB:CLR P0.7BN:MOV P2,ALCALL DELAYINC R1MOV A,R2JNB ACC.3,LD1RL AMOV R2,AAJMP LD0LD1:RETORG 0A00H TABLE:DB 0c0HDB 0f9HDB 0a4HDB 0b0HDB 99HDB 92HDB 82HDB 0f8HDB 80HDB 90HDB 0FFHDB 0BFH;DB 36H;DB 0A1H;DB 86H;DB 8eHDELAY:MOV R3,#030H LOOP0:MOV R4,#00FH DJNZ R4,$DJNZ R3,LOOP0RETCF: MOV A,29HANL A,#0FHMOV 73H,AMOV A,29HANL A,#0F0HSWAP AMOV 72H,AMOV A,28HANL A,#0FHMOV 71H,AMOV A,28HANL A,#0F0HSWAP AMOV 70H,ARETEND五、调试过程5.1调试方法与步骤1、程序调试数字式温度计的源程序编写完之后,我们使用软件和Protel共同来调试源程序的争取与否。