机电课程设计-------温度巡回检测仪
JNC LP3 ;无进位转移
INC R0 ;有进位则高八位加一 CLR C LP3:
MOV R1, A ;保存低八位 DJNZ R2, LP4 ;循环8次
MOV R2, #03H ;需要循环右移3次,即除以8
LP5; MOV A, R0 ;取高八位
RRC A ;高8位右移一位,即除以2 MOV R0, A ;保存高八位 MOV A, R1 ;取低八位 RRC A ;低八位右移一位 MOV R1, A ;保存低八位
DJNZ R2, LP5 ;循环右移三次,即除以8 MOV 30H, #01H ;30H置1
MOV 31H, R1 ;采样得到的温度值入31H保存 RET
4.5温度数值的转化
开始采样得到十六进制温度值(在31H)十六进制数×100÷255十进制温度值拆分成百位、十位、个位、小数点后一位分别存在73H,72H,71H,70H75H存通道值显示 温度转化程序:
MOV A, 31H
;温度数值转化
MOV B,#20 MUL AB
温度巡回检测仪 26 机电课程设计-------温度巡回检测仪
MOV B,#51 DIV AB
MOV R1,A MOV A,B MOV B,#10 MUL AB MOV B,#51 DIV AB MOV 32H,A MOV 31H,R1
;小数后一位放于32H ;结果存放31H
MOV B,#100 MOV A,31H DIV AB
MOV 73H,A ;温度的百位 MOV A,B MOV B,#10 DIV AB
MOV 72H,A ;温度的十位 MOV 71H,B MOV 70H, 32H MOV 75H, 30H
;温度的个位
;温度的十分位 ;通道数
4.6温度的显示 程序:
MOV DPTR, #7FFFH ;选择控制存储器地址
MOV DPTR, #7FFDH ;DPTR←B口地址
MOV A, #80H ;写入方式0控制字到A,A口和B口均为输出 MOVX @DPTR,A ;芯片初始化,设置8255控制字
MOV A, #0FEH ;选LED右数第一位(十分位) MOVX @DPTR, A ;PB口赋值
MOV DPTR, #TAB1 ;选不带小数点共阴极数码段编码 MOV A, 70H ;A←70H单元中温度的十分位数值 MOVC A, @A+DPTR ;查到70H单元中所对应的数码值 MOV DPTR, #7FFCH ;选PA口地址
温度巡回检测仪 27 机电课程设计-------温度巡回检测仪
MOVX @DPTR, A ;PA赋值显示 LCALL DELAY
MOV DPTR, #7FFDH ;DPTR←B口地址
MOV DPTR, #7FFDH ;DPTR←B口地址
MOV A, #0FBH ;选LED右数第三位(十位) MOV A, #0FDH ;选LED右数第二位(个位) MOVX @DPTR, A ;PB口赋值
MOV DPTR, #TAB2 ;选带小数点共阴极数码段编码 MOV A, 71H ;A←71H单元中温度的个位数值 MOVC A, @A+DPTR ;查到71单元中所对应的数码值 MOV DPTR, #7FFCH ;选PA口地址 MOVX @DPTR, A ;PA赋值显示 LCALL DELAY
MOVX @DPTR, A ;PB口赋值
MOV DPTR, #7FFDH ;DPTR←B口地址
MOV A, #0F7H ;选LED右数第四位(百位) MOVX @DPTR, A ;PB口赋值
MOV DPTR, #TAB1 ;选不带小数点共阴极数码段编码 MOV A, 73H ;A←73H单元中温度的百位数值 MOVC A, @A+DPTR ;查到73单元中所对应的数码值 MOV DPTR, #7FFCH ;选PA口地址
MOV DPTR, #TAB1 ;选不带小数点共阴极数码段编码 MOV A, 72H ;A←72H单元中温度的十位数值 MOVC A, @A+DPTR ;查到72单元中所对应的数码值 MOV DPTR, #7FFCH ;选PA口地址 MOVX @DPTR, A ;PA赋值显示 LCALL DELAY
MOVX @DPTR, A ;PA赋值显示
MOV DPTR, #7FFDH ;DPTR←B口地址
LCALL DELAY
MOV A, #0DFH ;选LED右数第六位(通道位)
温度巡回检测仪 28 机电课程设计-------温度巡回检测仪
MOVX @DPTR, A ;PB口赋值
MOV A, 30H ;A←30H单元中通道数
JZ LP3 ;判断返回键是否按下,是则30H为零, AJMP SHOWTEM ;绝对转移到时钟程序
LP3: LJMP LP1 ;判断返回键是否按下,否则继续温度显示循环 TAB1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH ;0-9不带小数点共阴极数码段编码 MOV DPTR, #TAB1 ;选不带小数点共阴极数码段编码 MOV A, 75H ;A←75H单元中通道数值 MOVC A, @A+DPTR ;查到75单元中所对应的数码值 MOV DPTR, #7FFCH ;选PA口地址 MOVX @DPTR, A ;PA赋值显示 LCALL DELAY
TAB2: DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H
DB 0FFH,0EFH ;0-9带小数点共阴极数码段编码
5.任务分工
略 6.小结
通过本次课程设计,我们充分了解到了单片机的学习不仅仅是编程这么简单,外部电路的设计,各种芯片的选择搭配都是非常重要的。同时我们对单片机有了更深一步的了解,比如硬件接口、地址分配,编程的技巧得到了提高。
总的来说,课程设计中遇到了很多困难,比如时钟芯片DS1302的功能使用和汇编程序,十六进制转化成十进制等等,我们通过网络查阅了大量资料,查参考书了解了许多单片机专业开发人员的经验,觉得获益非浅。在设计的过程中,不但丰富了知识、锻炼了能力,而且养成了好的思维习惯,一种严谨的治学态度。
7.参考文献
1.李广弟 《单片机基础》 北京航空航天大学出版社 2.杨旭方 《单片机控制与应用实训教程》 电子工业出版社 3. 张迎新 《单片机初级教程》 北京航空航天大学出版社 4. 杨汝清 《机电控制技术》 科学出版社
温度巡回检测仪 29 机电课程设计-------温度巡回检测仪
七.附录: 总程序:
T_CLK Bit P3.4 ;实时时钟时钟线引脚 T_IO Bit P3.5 ;实时时钟数据线引脚 T_RST Bit P3.1 ;实时时钟复位线引脚 SECOND EQU 50H ;秒寄存器 MINUTE EQU 51H ;分寄存器 HOUR EQU 52H ;时寄存器 ORG 0000H SJMP START ORG 0003H AJMP INTR0 ORG 0040H
START: MOV A,#0C7H ;开放行(行输出全为0)
MOV P1,A CLR P3.3
CLR IT0 ;电平触发 MOV IE,#81H ;开放INT0中断 MOV SECOND,#00H MOV HOUR,#12H LCALL SET1302 LCALL GET1302 LCALL DISPLAY
;工作方式1
MOV 30H, #00H ;设定时钟初值 MOV MINUTE,#00H
MAIN: MOV R5,#25 MOV TMOD,#01H MOV TL0,#0C0H SETB TR0
LP1: MOV A, 30H JNZ SHOWTEM
JBC TF0,LP2 ;查询计数溢出
;重新置定时器初值
SJMP LP1 ;未到40 ms继续计数 LP2: MOV TH0,#63H MOV TL0,#0C0H
温度巡回检测仪 30 MOV TH0,#63H ;置定时器初值(定时40ms)
;启动定时器0