完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
![]() |
|
相关推荐
5个回答
|
|
ORG 0000H ; 0-125度的温度计
TEMPER_L EQU 41H ;用于保存读出温度的低8位 TEMPER_H EQU 40H ;用于保存读出温度的高8位 FLAG1 EQU 38H ;是否检测到DS18B20标志位 A_BIT1 EQU 30H ;数码管小数点位数存放内存位置 B_BIT1 EQU 31H ;数码管个位数存放内存位置 C_BIT1 EQU 32H ;数码管十位数存放内存位置 D_BIT1 EQU 33H ;数码管百位数存放内存位置 DQ EQU P3.7 ;30H,31H,32H,33H: 小数点位 个位 十位 百位 MOD7: MOV SP,#60H LCALL GET_TEMPER ;调用读温度子程序 LCALL TEMPCOV LCALL DISPLAY ;调用数码管显示子程序 AJMP MOD7 TEMP0: INC A AJMP TEMP1 TEMPCOV:MOV A,TEMPER_L ;数据处理子程序TEMPCOV MOV B,#10H DIV AB JB B.3,TEMP0 TEMP1: MOV 34H,A ;将TEMPER_L的高四位右移四位,存入34H中(温度值) MOV A,B ;将TEMPER_L的低四位X10/16得小数后一位数 MOV B,#0AH MUL AB MOV B,#10H DIV AB MOV 30H,A ;将小数后一位数.存入30H中 MOV A,TEMPER_H ;TEMPER_H中存放高8位数,权重16 MOV B,#10H MUL AB ADD A,34H ;34H中存入温度值的整数部分 MOV B,#0AH DIV AB MOV 31H,B ;个位存入31H中 MOV B,#0AH DIV AB MOV 32H,B ;十位存入32H中 MOV B,#0AH DIV AB MOV 33H,B ;百位存入33H中 MOV A,TEMPER_H MOV 34H,#10H JB ACC.7,EXIT7 MOV 34H,#00H EXIT7: RET; ;这是DS18B20复位初始化子程序 INIT_1820: SETB DQ NOP CLR DQ ;主机发出延时537微秒的复位低脉冲 MOV R1,#03H TSR1: MOV R0,#6BH DJNZ R0,$ DJNZ R1,TSR1 SETB DQ ;然后拉高数据线 NOP NOP NOP MOV R0,#25H TSR2: JNB DQ,TSR3 ;等待DS18B20回应 DJNZ R0,TSR2 LJMP TSR4 ;延时 TSR3: SETB FLAG1 ;置标志位,表示DS1820存在 LJMP TSR5 TSR4: CLR FLAG1 ;清标志位,表示DS1820不存在 LJMP TSR7 TSR5: MOV R0,#75H DJNZ R0,$ ;时序要求延时一段时间 TSR7: SETB DQ RET ;读出转换后的温度值 GET_TEMPER:SETB DQ LCALL INIT_1820 ;先复位DS18B20 JB FLAG1,TSS2 RET TSS2: MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820 MOV A,#44H ;发出温度转换命令 LCALL WRITE_1820 LCALL DISPLAY ;等待AD转换结束,12位的话750微秒 LCALL INIT_1820 ;准备读温度前先复位 MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ;发出读温度命令 LCALL WRITE_1820 LCALL READ_1820 ;将读出的温度数据保存到35H/36H RET ;写DS18B20的子程序(有具体的时序要求) WRITE_1820: MOV R2,#08H ;一共8位数据 CLR C WR1: CLR DQ MOV R3,#06H DJNZ R3,$ RRC A MOV DQ,C MOV R3,#17H DJNZ R3,$ SETB DQ NOP DJNZ R2,WR1 SETB DQ RET ;读DS18B20的程序,从DS18B20中读出两个字节的温度数据 READ_1820: MOV R4,#02H ;将温度高位和低位从DS18B20中读出 MOV R1,#TEMPER_L ;低位存入TEMPER_L(TEMPER_L),高位存入(TEMPER_H) RE00: MOV R2,#08H ;数据一共有8位 RE01: CLR C SETB DQ NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#09H DJNZ R3,$ MOV C,DQ MOV R3,#17H DJNZ R3,$ RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 RET ;显示子程序 DISPLAY: MOV DPTR,#TAB ;指定查表启始地址 MOV R0,#04H DPL1: MOV R1,#0FAH ;显示1000次 DPLOP: MOV A,A_BIT1 ;取小数点后位数 MOVC A,@A+DPTR ;查小数点后位数的7段代码 MOV P1,A ;送出小数点后位的7段代码 CLR P3.2 ;开小数点后位显示 ACALL D1MS ;显示1MS SETB P3.2 MOV DPTR,#TAB2 ;个位需要小数点点亮 MOV A,B_BIT1 ;取个位数 MOVC A,@A+DPTR ;查个位数的7段代码 MOV P1,A ;送出个位的7段代码 CLR P3.3 ;开个位显示 ACALL D1MS ;显示1MS SETB P3.3 MOV DPTR,#TAB ;重新为DPTR赋TAB值 MOV A,C_BIT1 ;取十位数 MOVC A,@A+DPTR ;查十位数的7段代码 MOV P1,A ;送出十位的7段代码 CLR P3.4 ;开十位显示 ACALL D1MS ;显示1MS SETB P3.4 MOV A,D_BIT1 ;取百位数 MOVC A,@A+DPTR ;查百位数的7段代码 MOV P1,A ;送出百位的7段代码 CLR P3.5 ;开百位显示 ACALL D1MS ;显示1MS SETB P3.5 MOV P1,#00H DJNZ R1,DPLOP ;小于100次循环 DJNZ R0,DPL1 ;小于4个100次循环 RET ;1MS延时(按12MHZ算) D1MS: MOV R7,#0FFH DJNZ R7,$ DJNZ R7,$ RET 实验板上的7段数码管0~9数字的共阴显示代码 TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH TAB2: DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH END 这个是代码,各位大神帮忙看看是哪里错了~~ |
|
|
|
大神有木有~~~快来帮帮我撒
|
|
|
|
你先看看你的硬件吧,你看看你的数码管上已经有高低电瓶的变化了,就说明可以显示了,即使是乱码,还有数码管最好不要引脚直接驱动!
|
|
|
|
你先把温度值给去掉,直接赋一个初始值给数码管看看能不能正常显示。现查数码管的显示先
|
|
|
|
数码管用三极管放大电路驱动,这样芯片的输出电流就不用那么多了,你试试吧
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
988 浏览 0 评论
645 浏览 0 评论
嵌入式学习-搭建自己的ubuntu系统之ubuntu网络设置
778 浏览 0 评论
龙芯中科胡伟武:3B6600 八核桌面 CPU 性能将达到英特尔中高端酷睿 12~13 代水平
842 浏览 0 评论
树莓派Pico 2发布,搭载RP2350双核RISC-V和Arm Cortex-M33微控制器!
795 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10763 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-20 02:23 , Processed in 0.572694 second(s), Total 84, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191