编辑: gracecats | 2018-11-15 |
点后面的精度为0.5 LCALL DISPLAY ;
调用数码管显示子程序 LJMP MAIN DISPLAY: MOV A,29H ;
将29H中的十六进制数转换成10进制 MOV B,#100 DIV AB ;
除以100把百位数据除掉剩下个位与 ;
十位,这条指令可要可不要 MOV A,B ;
把余数给 A MOV B,#10 DIV AB ;
所得的数除以10 MOV a_bit,A ;
十位在A MOV a_bit,B ;
个位在B MOV A,29H ;
把新组成的字节的数给A SUBB A,#33 ;
把新组成的字节的数与33相减 JC swcz ;
如果Cy为1说明温度低于33度,要跳到 ;
升温操作上去 CLR C MOV A,29H ;
把新组成的字节的数给A SUBB A,#37 ;
把新组成的字节的数与37相减 JNC jwcz ;
如果Cy为0说明温度高于37度,要跳到 ;
降温操作上去 SETB P3.0 ;
如果在33度与37度之间说明不用做任何 ;
操作 SETB P3.1 LJMP ll1 swcz: CLR P3.1 ;
升温操作P3.1复位 SETB P3.0 ;
升温操作P3.0置位 LJMP ll1 jwcz: CLR P3.0 ;
降温操作P3.0复位 SETB P3.1 ;
降温操作P3.1置位 ll1: MOV DPTR,#TAB ;
指定查表启始地址 MOV R0,#10 dpl1: MOV R1,#120 ;
设置循环的次数 dplop: MOV A,38H ;
取小数位数 MOVC A,@A+DPTR ;
查个位数的7段代码 MOV P1,A ;
送出小数的7段代码 MOV P2,#00000100B ;
开小数位显示 ACALL D1MS ;
显示1ms MOV P2,#00000000B ;
关小数位显示 MOV A,a_bit ;
取个位数 MOVC A,@A+DPTR ;
查个位数的7段代码 ADD A,#80h ;
使个位后有小数点 MOV P1,A ;
送出个位的7段代码 MOV P2,#00000010B ;
开个位显示 ACALL D1MS ;
显示1ms MOV P2,#00000000b ;
关个位显示 MOV DPTR,#TAB MOV A,b_bit ;
取十位数 MOVC A,@A+DPTR ;
查十位数的7段代码 MOV P1,A ;
送出十位的7段代码 MOV P2,#00001000B ;
开十位显示 ACALL D1MS ;
显示1ms MOV P2,#00000000B ;
关十位显示 DJNZ R1, dplop DJNZ R0,dpl1 ;
1200次没循环完 RET D1MS: MOV R7,#80 ;
1MS延时(按12MHZ算) DJNZ R7,$ RET TAB: DB 3FH,06H,5BH,4FH,66H,6DH,07DH,07H,7FH,6FH END