帮忙把这个proteus电路图给画出来

学习 时间:2026-03-30 10:26:06 阅读:322
帮忙把这个proteus电路图给画出来

最佳回答

炙热的手机

温柔的早晨

2026-03-30 10:26:06

这是程序:ORG 0000H ;单片机内存分配申明!TEMPER_L EQU 29H ;用于保存读出温度的低8位TEMPER_H EQU 28H ;用于保存读出温度的高8位FLAG1 EQU 38H ;是否检测到DS18B20标志位a_bit equ 20h ;数码管个位数存放内存位置b_bit equ 21h ;数码管十位数存放内存位置MAIN:LCALL GET_TEMPER ;调用读温度子程序 ;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度 ;显示范围00到99度,显示精度为1度 ;因为12位转化时每一位的精度为0。0625度,我们不要求显示小数所以可以抛弃29H的低4位 ;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度 ;瘴扌璩擞?。0625系数MOV A,29HMOV C,40H ;将28H中的最低位移入CRRC AMOV C,41HRRC AMOV C,42HRRC AMOV C,43HRRC AMOV 29H,ALCALL DISPLAY ;调用数码管显示子程序CPL P1。0AJMP MAININIT_1820:SETB P2。2 ; 这是DS18B20复位初始化子程序NOPCLR P2。2 ;主机发出延时537微秒的复位低脉冲MOV R1,#3TSR1:MOV R0,#107DJNZ R0,$DJNZ R1,TSR1SETB P2。2 ;然后拉高数据线NOPNOPNOPMOV R0,#25HTSR2:JNB P2。2,TSR3 ;等待DS18B20回应DJNZ R0,TSR2LJMP TSR4 ; 延时TSR3:SETB FLAG1 ; 置标志位,表示DS1820存在CLR P1。7 ;检查到DS18B20就点亮P1。7LEDLJMP TSR5TSR4:CLR FLAG1 ; 清标志位,表示DS1820不存在CLR P1。1LJMP TSR7TSR5:MOV R0,#117TSR6:DJNZ R0,TSR6 ; 时序要求延时一段时间TSR7:SETB P2。2RET ; 读出转换后的温度值GET_TEMPER:SETB P2。2LCALL INIT_1820;先复位DS18B20JB FLAG1,TSS2CLR P1。2RET ; 判断DS1820是否存在?若DS18B20不存在则返回TSS2:CLR P1。3 ;DS18B20已经被检测到!MOV A,#0CCH ; 跳过ROM匹配LCALL WRITE_1820MOV A,#44H ; 发出温度转换命令LCALL WRITE_1820;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒LCALL DISPLAYLCALL INIT_1820 ;准备读温度前先复位MOV A,#0CCH ; 跳过ROM匹配LCALL WRITE_1820MOV A,#0BEH ; 发出读温度命令LCALL WRITE_1820LCALL READ_18200 ; 将读出的温度数据保存到35H/36HCLR P1。4RET;写DS18B20的子程序(有具体的时序要求)WRITE_1820:MOV R2,#8 ;一共8位数据CLR CWR1:CLR P2。2MOV R3,#6DJNZ R3,$RRC AMOV P2。2,CMOV R3,#23DJNZ R3,$SETB P2。2NOPDJNZ R2,WR1SETB P2。2RET; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据READ_18200:MOV R4,#2 ; 将温度高位和低位从DS18B20中读出MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)RE00:MOV R2,#8 ;数据一共有8位RE01:CLR CSETB P2。2NOPNOPCLR P2。2NOPNOPNOPSETB P2。2MOV R3,#9RE10:DJNZ R3,RE10MOV C,P2。2MOV R3,#23RE20:DJNZ R3,RE20RRC ADJNZ R2,RE01MOV @R1,ADEC R1DJNZ R4,RE00RET;显示子程序display: mov a,29H;将29H中的十六进制数转换成10进制mov b,#10 ;10进制/10=10进制div abmov b_bit,a ;十位在amov a_bit,b ;个位在bmov dptr,#numtab ;指定查表启始地址mov r0,#4dpl1: mov r1,#250 ;显示1000次dplop: mov a,a_bit ;取个位数MOVC A,@A+DPTR ;查个位数的7段代码mov p0,a ;送出个位的7段代码clr p2。7 ;开个位显示acall d1ms ;显示1mssetb p2。7mov a,b_bit ;取十位数MOVC A,@A+DPTR ;查十位数的7段代码mov p0,a ;送出十位的7段代码clr p2。6 ;开十位显示acall d1ms ;显示1mssetb p2。6djnz r1,dplop ;100次没完循环djnz r0,dpl1 ;4个100次没完循环ret;1MS延时(按12MHZ算)D1MS: MOV R7,#80DJNZ R7,$RET;实验板上的7段数码管0~9数字的共阴显示代码numtab: DB 3fh,30h,6dh,79h,72h,5bh,5fh,31h,7fh,7bhend

最新回答共有2条回答

  • 自然的招牌
    回复
    2026-03-30 10:26:06

    这是程序:ORG 0000H ;单片机内存分配申明!TEMPER_L EQU 29H ;用于保存读出温度的低8位TEMPER_H EQU 28H ;用于保存读出温度的高8位FLAG1 EQU 38H ;是否检测到DS18B20标志位a_bit equ 20h ;数码管个位数存放内存位置b_bit equ 21h ;数码管十位数存放内存位置MAIN:LCALL GET_TEMPER ;调用读温度子程序 ;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度 ;显示范围00到99度,显示精度为1度 ;因为12位转化时每一位的精度为0。0625度,我们不要求显示小数所以可以抛弃29H的低4位 ;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度 ;瘴扌璩擞?。0625系数MOV A,29HMOV C,40H ;将28H中的最低位移入CRRC AMOV C,41HRRC AMOV C,42HRRC AMOV C,43HRRC AMOV 29H,ALCALL DISPLAY ;调用数码管显示子程序CPL P1。0AJMP MAININIT_1820:SETB P2。2 ; 这是DS18B20复位初始化子程序NOPCLR P2。2 ;主机发出延时537微秒的复位低脉冲MOV R1,#3TSR1:MOV R0,#107DJNZ R0,$DJNZ R1,TSR1SETB P2。2 ;然后拉高数据线NOPNOPNOPMOV R0,#25HTSR2:JNB P2。2,TSR3 ;等待DS18B20回应DJNZ R0,TSR2LJMP TSR4 ; 延时TSR3:SETB FLAG1 ; 置标志位,表示DS1820存在CLR P1。7 ;检查到DS18B20就点亮P1。7LEDLJMP TSR5TSR4:CLR FLAG1 ; 清标志位,表示DS1820不存在CLR P1。1LJMP TSR7TSR5:MOV R0,#117TSR6:DJNZ R0,TSR6 ; 时序要求延时一段时间TSR7:SETB P2。2RET ; 读出转换后的温度值GET_TEMPER:SETB P2。2LCALL INIT_1820;先复位DS18B20JB FLAG1,TSS2CLR P1。2RET ; 判断DS1820是否存在?若DS18B20不存在则返回TSS2:CLR P1。3 ;DS18B20已经被检测到!MOV A,#0CCH ; 跳过ROM匹配LCALL WRITE_1820MOV A,#44H ; 发出温度转换命令LCALL WRITE_1820;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒LCALL DISPLAYLCALL INIT_1820 ;准备读温度前先复位MOV A,#0CCH ; 跳过ROM匹配LCALL WRITE_1820MOV A,#0BEH ; 发出读温度命令LCALL WRITE_1820LCALL READ_18200 ; 将读出的温度数据保存到35H/36HCLR P1。4RET;写DS18B20的子程序(有具体的时序要求)WRITE_1820:MOV R2,#8 ;一共8位数据CLR CWR1:CLR P2。2MOV R3,#6DJNZ R3,$RRC AMOV P2。2,CMOV R3,#23DJNZ R3,$SETB P2。2NOPDJNZ R2,WR1SETB P2。2RET; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据READ_18200:MOV R4,#2 ; 将温度高位和低位从DS18B20中读出MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)RE00:MOV R2,#8 ;数据一共有8位RE01:CLR CSETB P2。2NOPNOPCLR P2。2NOPNOPNOPSETB P2。2MOV R3,#9RE10:DJNZ R3,RE10MOV C,P2。2MOV R3,#23RE20:DJNZ R3,RE20RRC ADJNZ R2,RE01MOV @R1,ADEC R1DJNZ R4,RE00RET;显示子程序display: mov a,29H;将29H中的十六进制数转换成10进制mov b,#10 ;10进制/10=10进制div abmov b_bit,a ;十位在amov a_bit,b ;个位在bmov dptr,#numtab ;指定查表启始地址mov r0,#4dpl1: mov r1,#250 ;显示1000次dplop: mov a,a_bit ;取个位数MOVC A,@A+DPTR ;查个位数的7段代码mov p0,a ;送出个位的7段代码clr p2。7 ;开个位显示acall d1ms ;显示1mssetb p2。7mov a,b_bit ;取十位数MOVC A,@A+DPTR ;查十位数的7段代码mov p0,a ;送出十位的7段代码clr p2。6 ;开十位显示acall d1ms ;显示1mssetb p2。6djnz r1,dplop ;100次没完循环djnz r0,dpl1 ;4个100次没完循环ret;1MS延时(按12MHZ算)D1MS: MOV R7,#80DJNZ R7,$RET;实验板上的7段数码管0~9数字的共阴显示代码numtab: DB 3fh,30h,6dh,79h,72h,5bh,5fh,31h,7fh,7bhend

上一篇 理想 流沙河的理解

下一篇 No matter where you go I will love you always是什么意思