




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、;=;DS18B20温度计;采用4位LED共阳显示器显示测温值,显示精度0.1,测温范围-55+125;用AT89C51单片机,12MHz晶振;DS1302时钟芯片实现日历年月日时分秒的显示;=常数定义=TIMELEQU 0E0H ;20ms,定时器0时间常数TIMEHEQU 0B1HSECOND EQU 30HMINUTE EQU 31HHOUR EQU 32HDAY EQU 33HMONTH EQU 34HWEEK EQU 35HYEAR EQU 36HTEMPHEAD EQU 38HTEMP_UPPER EQU 2AHTEMP_LOWER EQU 2BH;=工作内存定义=BITST DA
2、TA 20HTIME1SOK BIT BITST.1TEMPL DATA 26HTEMPH DATA 27HTEMPHC DATA 28HTEMPLC DATA 29H;= 引脚定义=TEMPDIN BIT P3.7ALARMDIN BIT P1.6RST BIT P1.2CLK BIT P1.1IO BIT P1.0;= 中断向量区=ORG 0000HLJMP STARTORG 000BHLJMP T0IT;=系统初始化=ORG 0100HSTART: MOV SP,#60HCLSMEM: MOV R0,#20HMOV R1,#60HCLSMEM1:MOV R0,#00HINC R0DJNZ
3、 R1,CLSMEM1MOV TMOD,#00010001B ;定时器0工作方式1(16BIT)MOV TH0,#TIMEH MOV TL0,#TIMEL ;20msMOV SECOND,#00H MOV MINUTE,#00H MOV HOUR,#14H MOV DAY,#17HMOV MONTH,#01H MOV WEEK,#01H MOV YEAR,#13HMOV TEMP_UPPER,#0AH MOV TEMP_LOWER,#8AHSETB ET0SETBEAMOV PSW,#00H;=;= 主程序=;=LCALL SETDS1302START1: LCALL READ_TEMP;读出
4、温度值子程序LCALL CONVTEMP ;温度BCD码计算处理子程序LCALL REFBCD ;显示区BCD码温度值刷新子程序LCALL GETDS1302SETB TR0LCALL ALARM_JUDGEJNB F0,MAINLCALL ALARM_BEEP MAIN:LCALL DISP_TEMP ;调用显示子程序LCALL DISPLAY_TIME JNB TIME1SOK,MAINCLR TIME1SOK ;测温每1s一次MAIN1:LCALL DISP_TEMP ;调用显示子程序LCALL DISPLAY_DATE JNB TIME1SOK,MAIN1CLR TIME1SOK ;测
5、温每1s一次 LJMP START1;= 定时器0中断服务程序=T0IT:PUSH PSWMOV PSW,#10HMOV TH0,#TIMEHMOV TL0,#TIMELINC R7CJNE R7,#50,T0IT1MOV R7,#00HSETB TIME1SOK ;1s定时到标志T0IT1:POP PSWRETI;=;= 子程序区=;=;=初始化DS18B20=INITDS1820:SETB TEMPDINNOPNOPCLR TEMPDINMOV R6,#0A0H DJNZ R6,$MOV R6,#0A0HDJNZ R6,$SETB TEMPDINMOV R6,#32H DJNZ R6,$M
6、OVR6,#3CHLOOP1820:MOV C,TEMPDINJC INITDS1820OUTDJNZ R6,LOOP1820MOV R6,#064HDJNZ R6,$SJMP INITDS1820INITDS1820OUT:SETB TEMPDINRET;= 读DS18B20的程序,从DS18B20中读出一个字节的数据=READDS1820:MOV R7,#08HSETB TEMPDINNOPNOPREADDS1820LOOP:CLR TEMPDINNOPNOPNOPSETB TEMPDINMOV R6,#07H ;DELAY 15usDJNZ R6,$MOV C,TEMPDINMOV R6
7、,#3CH ;DELAY 120usDJNZ R6,$RRC ASETB TEMPDINDJNZ R7,READDS1820LOOPMOV R6,#3CH ;DELAY 120 usDJNZ R6,$RET;= 写DS18B20的程序,从DS18B20中写一个字节的数据=WRITEDS1820:MOV R7,#08HSETB TEMPDINNOPNOPWRITEDS1820LOP:CLR TEMPDINMOV R6,#07H ;DELAY 15usDJNZ R6,$RRC AMOV TEMPDIN,CMOV R6,#34H ;DELAY 104usDJNZ R6,$SETB TEMPDINDJ
8、NZ R7,WRITEDS1820LOPRET;= READ TEMP =READ_TEMP:LCALL INITDS1820MOV A,#0CCHLCALL WRITEDS1820 ;SKIP ROMMOV R6,#34H ;DELAY 104usDJNZ R6,$MOV A,#44HLCALL WRITEDS1820 ;START CONVERSIONMOV R6,#34H ;DELAY 104DJNZ R6,$READTEMP1:LCALLINITDS1820MOV A,#0CCHLCALL WRITEDS1820;SKIP ROMMOV R6,#34H ;DELAY 104usDJNZ
9、 R6,$MOV A,#0BEHLCALL WRITEDS1820 ;SCRATCHPADMOV R6,#34H ;DELAY 104usDJNZ R6,$MOV R5,#09HMOV R0,#TEMPHEADMOV B,#00HREADTEMP2:LCALL READDS1820MOV R0,AINC R0DJNZ R5,READTEMP2MOV A,TEMPHEAD+0MOV TEMPL,AMOV A,TEMPHEAD+1MOV TEMPH,AREADTEMPOUT:RET;= 处理温度BCD码子程序=CONVTEMP:MOV A,TEMPHANL A,#80HJZ TEMPC1CLR C
10、MOV A,TEMPLCPL AADD A,#01HMOV TEMPL,AMOV A,TEMPH ;-CPL AADDC A,#00HMOV TEMPH,A ;TEMPHC HI=符号位MOV TEMPHC,#0BHSJMP TEMPC11TEMPC1:MOV TEMPHC,#0AH ;+TEMPC11:MOV A,TEMPHCSWAP AMOV TEMPHC,AMOV A,TEMPLANL A,#0FH ;乘0.0625MOV DPTR,#TEMPDOTTABMOVC A,A+DPTRMOV TEMPLC,A ;TEMPLC LOW=小数部分BCDMOV A,TEMPL ;整数部分ANL A
11、,#0F0HSWAP AMOV TEMPL,AMOV A,TEMPHANL A,#0FHSWAP AORL A,TEMPLLCALL HEX2BCD1MOV TEMPL,AANL A,#0F0HSWAP AORL A,TEMPHC ;TEMPHC LOW=十位数BCDMOV TEMPHC,AMOV A,TEMPLANL A,#0FHSWAP A ;TEMPLC HI=个位数BCDORL A,TEMPLCMOV TEMPLC,AMOV A,R7JZ TEMPC12ANL A,#0FHSWAP AMOV R7,AMOV A,TEMPHC ;TEMPLC HI=百位数BCDANL A,#0FHORL
12、 A,R7MOV TEMPHC,ATEMPC12:RET;= 小数部分码表=TEMPDOTTAB:DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06HDB 06H,07H,08H,08H,09H,09H;= 刷新BCD码温度值子程序=REFBCD:MOV A,TEMPLCANL A,#0FHMOV 70H,AMOV A,TEMPLCSWAP AANL A,#0FHMOV 71H,AMOV A,TEMPHCANL A,#0FHMOV 72H,AMOV A,TEMPHCSWAPAANL A,#0FHMOV 73H,AMOV A,TEMPHCANL A,#0F0HCJ
13、NE A,#010H,REFBCD0SJMP REFBCD2REFBCD0:MOV A,TEMPHCANL A,#0FHJNZ REFBCD2;十位数是0MOV A,TEMPHCSWAP AANL A,#0FHMOV 73H,#0AH;符号位不显示MOV 72H,A;十位数显示符号REFBCD2:RET;= 即时温度显示子程序=;显示数据在70H73H单元内,用4位LED共阳数码管显示,P0口输出段码数据,;P3口做扫描控制,每个LED数码管亮1ms时间再逐位循环。;=DISP_TEMP:MOV R1,#70H;指向显示数据首址MOV R5,#0FEH;扫描控制字初值PLAY:MOV P0,#
14、0FFHMOV A,R5;扫描字放入AMOV P3,A;从P3口输出MOV A,R1;取显示数据到AMOV DPTR,#TAB;取段码表地址MOVC A,A+DPTR;查显示数据对应段码MOV P0,A;段码放入P0口MOV A,R5JB ACC.1,LOOP5;小数点处理CLR P0.7LOOP5:LCALL DL1MS;显示1msINC R1;指向下一地址MOV A,R5;扫描控制字放入AJNB ACC.3,ENDOUT;ACC.3=0时一次显示结束RL A;A中数据循环左移MOVR5,A;放回R5内AJMP PLAY;跳回PLAY循环ENDOUT:MOV P0,#0FFH;一次显示结束,
15、P0口复位MOV P3,#0FFH;P3口复位RET;子程序返回TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH;共阳段码表 “0”“1”“2”“3”“4”“5”“6”“7”“8”“9”“不亮”“-”DL1MS:MOV R6,#2;1ms延时程序,LED显示程序用DL:MOV R7,#250 DJNZ R7,$DJNZ R6,DLRET;= 单字节十六进制转BCD =HEX2BCD1:MOV B,#064H;十六进制->BCDDIV AB;B=A%100MOV R7,A;R7=百位数MOV A,#0AHXCH A,
16、BDIV AB;B=A%BSWAP AORL A,BRET;=判断报警子程序=ALARM_JUDGE: PUSH TEMPH PUSH TEMPL MOV A,TEMPL ANL A,#0F0H SWAP A MOV R2,A MOV A,TEMPH ANL A,#0FH SWAP A ORL A,R2 ;R2保存测得温度值 MOV R2,A MOV A,TEMP_UPPER LCALL CMPT MOV TEMP_UPPER,A MOV A,TEMP_LOWER LCALL CMPT MOV TEMP_LOWER,A CLR C MOV A,R2 SUBB A,TEMP_UPPER JNB
17、ACC.7,SETF0; CLR C; MOV A,R2; SUBB A,TEMP_LOWER ; JB ACC.7,SETF0 SJMP ALARMOUTSETF0: SETB F0ALARMOUT:POP TEMPL POP TEMPH RET ;=求补码子程序= CMPT: JNB ACC.7,CMPT_END MOV C,ACC.7 CPL A ADD A,#01H MOV ACC.7,CCMPT_END:RET;=报警子程序=ALARM_BEEP: CLR ALARMDINMOV R7,#0FFHALARM_DELAY:MOV R6,#0FFH ;延时DJNZ R6,$DJNZ R7
18、,ALARM_DELAY SETB ALARMDIN RET;= 日期显示子程序=DISPLAY_DATE: MOV DPTR ,#TABLE MOV A,DAYANL A,#0F0HSWAP ACLR P2.6MOVC A,A+DPTRMOV P0,ALCALL DELAYSETB P2.6MOV A,DAYANL A,#0FHCLR P2.7 MOVC A,A+DPTRMOV P0,ALCALL DELAYSETB P2.7CLR P2.5MOV P0,#40HLCALL DELAY SETB P2.5MOV A,MONTHANL A,#0F0HSWAP A CLR P2.3MOVC A,
19、A+DPTRMOV P0,ALCALLDELAY SETB P2.3MOV A,MONTHANL A,#0FHCLR P2.4MOVC A,A+DPTRMOV P0,ALCALL DELAYSETB P2.4CLR P2.2MOV P0,#40HLCALL DELAYSETB P2.2MOV A,YEARANL A,#0F0HSWAP ACLR P2.0MOVC A,A+DPTRMOV P0,ALCALL DELAYSETB P2.0MOV A,YEARANL A,#0FHCLR P2.1MOVC A,A+DPTRMOV P0,ALCALL DELAYSETB P2.1RET ;= 时间显示子
20、程序= DISPLAY_TIME: MOV DPTR ,#TABLE MOV A,SECOND ANL A,#0F0H SWAP A CLR P2.6 MOVC A,A+DPTR MOV P0,A LCALL DELAY SETB P2.6 MOV A,SECOND ANL A,#0FH CLR P2.7 MOVC A,A+DPTRMOV P0,ALCALL DELAYSETB P2.7CLR P2.5MOV P0,#40HLCALL DELAY SETB P2.5MOV A,MINUTEANL A,#0F0HSWAP A CLR P2.3MOVC A,A+DPTRMOV P0,ALCALLD
21、ELAY SETB P2.3MOV A,MINUTEANL A,#0FHCLR P2.4MOVC A,A+DPTRMOV P0,ALCALL DELAYSETB P2.4CLR P2.2MOV P0,#40HLCALL DELAYSETB P2.2MOV A,HOURANL A,#0F0HSWAP ACLR P2.0MOVC A,A+DPTRMOV P0,ALCALL DELAYSETB P2.0MOV A,HOURANL A,#0FHCLR P2.1MOVC A,A+DPTRMOV P0,ALCALL DELAYSETB P2.1RETTABLE: DB 3FH,06H,5BH,4FH,66
22、H DB 6DH,7DH,07H,7FH,6FHDELAY: MOV R6,#2D1: MOV R7,#250 DJNZ R7,$ DJNZ R6,D1 RET;=设置DS1302初始时间,并启动计时 =SETDS1302:CLR RSTNOPCLR CLKNOPSETB RSTNOPMOV B,#8FH ;写控制字LCALL INPUTBYTESETB CLKNOPCLR RST MOV R0,#SECOND MOV R1,#80H ;DS1302中的时间首地址 MOV R7,#7SETLOOP:CLR RST NOP CLR CLK NOP SETB RST NOP MOV B,R1 ;写命令字 LCALL INPUTBYTE MOV A,R0 MOV B,A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体检行业市场潜力分析:2025年体检机构服务模式创新报告
- 2025年上海市工程质量检测服务委托合同
- 2025华城湖监理合同
- 2025劳动合同书【北京范本】
- 铀矿资源分布变化与2025年核能产业战略调整研究报告
- 种业创新2025:农业生物技术应用突破与农业产业创新环境报告
- 年度保育员工作总结模版
- 高一年级第一次月考质量分析会发言稿模版
- 基层医疗机构信息化建设中的远程医疗应用研究报告
- 农业面源污染治理关键技术突破与2025年政策保障研究报告
- 八下可爱的四川教案
- 压覆矿产资源评估服务方案
- 外国画家作品介绍赏析
- 三联图书馆管理系统2013压缩版常见问题与解答
- 48V100A-储能-BMS规格书(带RS232 RS485 CAN通讯)
- 小学英语课程与教学论(小学教育专业)PPT完整全套教学课件
- 中药养护记录表
- 实验室安全自查表样表
- 《机械设计基础》复习备考题库(含答案)
- 安全生产责任书安全制度
- xk5036数控立式铣床总体及横向进给传动机构设计论文大学本科毕业论文
评论
0/150
提交评论