;****************************资源分配times New Roman">************************** FLAG1 EQU 54H;是否检测到DS18B20标志位 FLAG2 EQU 00H COUNT EQU 63H CSA EQU P0.4 CSB EQU P0.3 RS EQU P0.2 RW EQU P0.1 E EQU P0.0 COM EQU 21H ;命令字 DAT EQU 22H ;显示数据 column EQU 23H ;列 pagef EQU 24h ;页 cpage EQU 25H ccolumn EQU 26H ;列(0-15) CODE EQU 27h column2 EQU 52H pagef2 equ 60h cpage2 EQU 61H ccolumn2 EQU 62H column3 EQU 2eH pagef3 equ 2fh cpage3 EQU 30H ccolumn3 EQU 31H column4 EQU 32H pagef4 equ 33h cpage4 EQU 34H ccolumn4 EQU 35H column5 EQU 36H pagef5 equ 37h cpage5 EQU 38H ccolumn5 EQU 39H ;*****************************主程序开始******************ORG 0000HLJMP START ORG 0003HLJMP INT0 ;外部中断 ORG 0030HSTART: MOV SP,#70H MOV P2,#0F0H CLR A CLR F0 ;清设置键 CLR FLAG2 ;清确认键 MOV COUNT,#0 ;中断次数计数 SETB IT0 SETB EX0 SETB EA LCALL INT ;LCD12864初始化子程序 LCALL CLEAR ;LDC12864清屏子程序 LCALL DISPLAY1 ;显示"温度自动控制系统" LCALL DISPLAY2 ;显示"设置温度" LCALL DISPLAY3 ;显示预设的温度 LCALL DISPLAY4 ;显示"实际温度" LCALL DISPLAY5 LCALL GET_TEMPER ;调用读温度子程序 ACALL DISPLAY5 ;调用显示M: LCALL GET_TEMPER LCALL DELAY1 MM: LCALL DISPLAY3MM1: JB F0,MM4 ;是否按上"设置"键 JNB F1,M ;是否按下"确认"键 MOV A,48H CJNE A,43H,MM5 MOV A,55H CJNE A,42H,MM5 MOV A,56H CJNE A,41H,MM5 LJMP MM8 MM4: MOV A,COUNT CJNE A,#1,MM2 LCALL DISPLAY8 LCALL DISPLAY8 LJMP MM MM2: CJNE A,#2,MM3 LCALL DISPLAY9 LCALL DISPLAY9MM3: CJNE A,#3,MM LCALL DISPLAY10 LCALL DISPLAY10 LJMP MM MM5: JC MM7 LJMP MM6 MM6: LCALL DISPLAY6 CLR P0.5 SETB P0.6 SETB P0.7 LJMP M MM7: LCALL DISPLAY7 SETB P0.5 CLR P0.6 SETB P0.7 LJMP M MM8: LCALL DISPLAY11 SETB P0.5 SETB P0.6 CLR P0.7 LJMP M ;***********************外部中断0子程序**************INT0: CLR EX0 INC COUNT ;中断计数器加1 CPL P3.0 MOV DPTR,#JS MOV A,P2 MOV P2,#0FH MOV 47H,P2 JNB ACC.4,E1 JNB ACC.5,E2 JNB ACC.6,E3 JNB ACC.7,E4 SETB EX0 RETI E1: MOV 20H,#0 LJMP KEYHE2: MOV 20H,#4 LJMP KEYHE3: MOV 20H,#8 LJMP KEYHE4: MOV 20H,#12 LJMP KEYH KEYH:MOV A,47H JNB ACC.0,D0 JNB ACC.1,D1 JNB ACC.2,D2 JNB ACC.3,D3 SETB EX0 RETI D0: MOV A,#0 ADD A,20H MOV 59H,A MOV B,#3 MUL AB JMP @A+DPTR D1: MOV A,#1 ADD A,20H MOV 59H,A MOV B,#3 MUL AB JMP @A+DPTR D2: MOV A,#2 ADD A,20H MOV 59H,A MOV B,#3 MUL AB JMP @A+DPTR D3: MOV A,#3 ADD A,20H MOV 59H,A MOV B,#3 MUL AB JMP @A+DPTR JS: LJMP LOOP0 LJMP LOOP1 LJMP LOOP2 LJMP LOOP3 LJMP LOOP4 LJMP LOOP5 LJMP LOOP6 LJMP LOOP7 LJMP LOOP8 LJMP LOOP9 LJMP LOOP10 LJMP LOOP11 LOOP0: ACALL SHIFT1 MOV P2,#0F0H SETB EX0 RETI LOOP1: ACALL SHIFT1 MOV P2,#0F0H SETB EX0 RETI LOOP2: ACALL SHIFT1 MOV P2,#0F0H SETB EX0 RETI LOOP3: ACALL SHIFT1 MOV P2,#0F0H SETB EX0 RETI LOOP4: ACALL SHIFT1 MOV P2,#0F0H SETB EX0 RETI LOOP5: ACALL SHIFT1 MOV P2,#0F0H SETB EX0 RETI LOOP6: ACALL SHIFT1 MOV P2,#0F0H SETB EX0 RETI LOOP7: ACALL SHIFT1 MOV P2,#0F0H SETB EX0 RETI LOOP8: ACALL SHIFT1 MOV P2,#0F0H SETB EX0 RETI LOOP9: ACALL SHIFT1 MOV P2,#0F0H SETB EX0 RETI LOOP10: SETB F0 ;按下设置键 MOV COUNT,#1 MOV P2,#0F0H SETB EX0 RETI LOOP11: ;按下"确认"键 CLR F0 SETB F1 MOV COUNT,#0 MOV P2,#0F0H SETB EX0 RETI SHIFT1: JB F0,LLL LJMP EXIT LLL: MOV A,COUNT CJNE A,#2,LLL1 MOV 48H,59H LJMP EXIT LLL1: CJNE A,#3,LLL2 MOV 55H,59H LJMP EXIT LLL2: CJNE A,#4,EXIT MOV 56H,59H SETB F1 CLR F0 EXIT: RET ;*************************显示子程序*************************DISPLAY1: ;显示"自动温度控制系统" 循环效果 mov column4,#48 mov pagef4,#0 ;温 mov code,#0 lcall writeright2 LCALL DELAY1 mov column4,#32 mov pagef4,#0 ;温 mov code,#0 lcall writeright2 mov column4,#48 mov pagef4,#0 ;度 mov code,#1 lcall writeright2 LCALL DELAY1 mov column4,#16 mov pagef4,#0 ;温 mov code,#0 lcall writeright2 mov column4,#32 mov pagef4,#0 ;度 mov code,#1 lcall writeright2 mov column4,#48 mov pagef4,#0 ;自 mov code,#2 lcall writeright2 LCALL DELAY1 mov column4,#0 mov pagef4,#0 ;温 mov code,#0 lcall writeright2 mov column4,#16 mov pagef4,#0 ;度 mov code,#1 lcall writeright2 mov column4,#32 mov pagef4,#0 ;自 mov code,#2 lcall writeright2 mov column4,#48 mov pagef4,#0 ;动 mov code,#3 lcall writeright2 LCALL DELAY1 mov column3,#48 mov pagef3,#0 ;温 mov code,#0 lcall writeleft2 mov column4,#0 mov pagef4,#0 ;度 mov code,#1 lcall writeright2 mov column4,#16 mov pagef4,#0 ;自 mov code,#2 lcall writeright2 mov column4,#32 mov pagef4,#0 ;动 mov code,#3 lcall writeright2 mov column4,#48 mov pagef4,#0 ;控 mov code,#4 lcall writeright2 LCALL DELAY1 mov column3,#32 mov pagef3,#0 ;温 mov code,#0 lcall writeleft2 mov column3,#48 mov pagef3,#0 ;度 mov code,#1 lcall writeleft2 mov column4,#0 mov pagef4,#0 ;自 mov code,#2 lcall writeright2 mov column4,#16 mov pagef4,#0 ;动 mov code,#3 lcall writeright2 mov column4,#32 mov pagef4,#0 ;控 mov code,#4 lcall writeright2 mov column4,#48 mov pagef4,#0 ;制 mov code,#5 lcall writeright2 LCALL DELAY1 mov column3,#16 mov pagef3,#0 ;温 mov code,#0 lcall writeleft2 mov column3,#32 mov pagef3,#0 ;度 mov code,#1 lcall writeleft2 mov column3,#48 mov pagef3,#0 ;自 mov code,#2 lcall writeleft2 mov column4,#0 mov pagef4,#0 ;动 mov code,#3 lcall writeright2 mov column4,#16 mov pagef4,#0 ;控 mov code,#4 lcall writeright2 mov column4,#32 mov pagef4,#0 ;制 mov code,#5 lcall writeright2 mov column4,#48 mov pagef4,#0 ;系 mov code,#6 lcall writeright2 LCALL DELAY1 mov column3,#0 mov pagef3,#0 ;温 mov code,#0 lcall writeleft2 mov column3,#16 mov pagef3,#0 ;度 mov code,#1 lcall writeleft2 mov column3,#32 mov pagef3,#0 ;自 mov code,#2 lcall writeleft2 mov column3,#48 mov pagef3,#0 ;动 mov code,#3 lcall writeleft2 mov column4,#0 mov pagef4,#0 ;控 mov code,#4 lcall writeright2 mov column4,#16 mov pagef4,#0 ;制 mov code,#5 lcall writeright2 mov column4,#32 mov pagef4,#0 ;系 mov code,#6 lcall writeright2 mov column4,#48 mov pagef4,#0 ;统 mov code,#7 lcall writeright2 LCALL DELAY1 RET DISPLAY2: ;显示"设置温度" mov column3,#16 ;设 mov pagef3,#2 mov code,#8 lcall writeleft2 LCALL DELAY1 mov column3,#32 ;置 mov pagef3,#2 mov code,#9 LCALL writeleft2 LCALL DELAY1 mov column3,#48 ;温 mov pagef3,#2 mov code,#0 lcall writeleft2 LCALL DELAY1 mov column4,#0 ;度 mov pagef4,#2 mov code,#1 lcall writeright2 LCALL DELAY1 RETDISPLAY3: mov column2,#16 mov pagef2,#2 mov code,#10 lcall writeright ;显示预设的温度 mov column2,#24 mov pagef2,#2 mov code,48H lcall writeright mov column2,#32 mov pagef2,#2 mov code,55H lcall writeright mov column2,#40 mov pagef2,#2 ;. mov code,#11 lcall writeright mov column2,#48 mov pagef2,#2 mov code,56H lcall writeright RET DISPLAY4: ;显示"实际温度" mov column3,#16 ;实 mov pagef3,#4 mov code,#10 lcall writeleft2 LCALL DELAY1 mov column3,#32 ;际 mov pagef3,#4 mov code,#11 lcall writeleft2 LCALL DELAY1 mov column3,#48 ;温 mov pagef3,#4 mov code,#0 lcall writeleft2 LCALL DELAY1 mov column3,#0 ;度 mov pagef3,#4 mov code,#1 lcall writeright2 LCALL DELAY1 RET DISPLAY5: ;显示实际的温度 MOV A,29H MOV C,40H ;28的位地址 RRC A MOV C,41H RRC A MOV C,42H RRC A MOV C,43H RRC A MOV 51H,A ANL 29H,#0FH MOV A,29H MOV B,#6 MUL AB MOV 50H,A mov a,51H mov b,#10 div ab mov 43H,a mov 42H,b MOV A,50H MOV B,#10 DIV AB MOV 41H,A MOV 40H,B mov column2,#16 mov pagef2,#4 mov code,#10 lcall writeright mov column2,#24 ;实际温度 mov pagef2,#4 mov code,43h lcall writeright mov column2,#32 mov pagef2,#4 mov code,42h lcall writeright mov column2,#40 mov pagef2,#4 ;. mov code,#11 lcall writeright mov column2,#48 mov pagef2,#4 mov code,41h lcall writeright RET DISPLAY6: mov column3,#24 mov pagef3,#6 ;状 mov code,#13 lcall writeleft2 LCALL DELAY1 mov column3,#40 mov pagef3,#6 ;态 mov code,#14 lcall writeleft2 LCALL DELAY1 mov column,#56 mov pagef,#6 ; : mov code,#10 lcall writeleft LCALL DELAY1 mov column4,#0 mov pagef4,#6 ;加 mov code,#15 lcall writeright2 LCALL DELAY1 mov column4,#16 mov pagef4,#6 ;热 mov code,#16 lcall writeright2 LCALL DELAY1 mov column4,#32 mov pagef4,#6 ; ! mov code,#19 lcall writeright2 LCALL DELAY1 RET DISPLAY7: mov column3,#24 mov pagef3,#6 ;状 mov code,#13 lcall writeleft2 LCALL DELAY1 mov column3,#40 mov pagef3,#6 ;态 mov code,#14 lcall writeleft2 LCALL DELAY1 mov column,#56 mov pagef,#6 ; : mov code,#10 lcall writeleft LCALL DELAY1 mov column4,#0 mov pagef4,#6 ;降 mov code,#17 lcall writeright2 LCALL DELAY1 mov column4,#16 mov pagef4,#6 ;温 mov code,#0 lcall writeright2 LCALL DELAY1 mov column4,#32 mov pagef4,#6 ;! mov code,#19 lcall writeright2 LCALL DELAY1 RETDISPLAY8: mov column2,#24 mov pagef2,#2 mov code,48H lcall writeright LCALL DELAY LCALL DELAY mov column2,#24 mov pagef2,#2 mov code,#12 lcall writeright RET DISPLAY9: mov column2,#32 mov pagef2,#2 mov code,55H lcall writeright LCALL DELAY LCALL DELAY mov column2,#32 mov pagef2,#2 mov code,#12 lcall writeright RETDISPLAY10: mov column2,#48 mov pagef2,#2 mov code,56H lcall writeright LCALL DELAY LCALL DELAY mov column2,#48 mov pagef2,#2 mov code,#12 lcall writeright RET DISPLAY11: mov column3,#24 mov pagef3,#6 ;状 mov code,#13 lcall writeleft2 LCALL DELAY1 mov column3,#40 mov pagef3,#6 ;态 mov code,#14 lcall writeleft2 LCALL DELAY1 mov column,#56 mov pagef,#6 ; : mov code,#10 lcall writeleft LCALL DELAY1 mov column4,#0 mov pagef4,#6 ;降 mov code,#20 lcall writeright2 LCALL DELAY1 mov column4,#16 mov pagef4,#6 ;温 mov code,#21 lcall writeright2 LCALL DELAY1 mov column4,#32 mov pagef4,#6 ;! mov code,#19 lcall writeright2 LCALL DELAY1 RET DISPLAY: mov column2,#24 mov pagef2,#2 mov code,48H lcall writeright mov column2,#32 mov pagef2,#2 mov code,55H lcall writeright mov column2,#40 mov pagef2,#2 ;. mov code,#11 lcall writeright mov column2,#48 mov pagef2,#2 mov code,56H lcall writeright MOV A,29H MOV C,40H ;28的位地址 RRC A MOV C,41H RRC A MOV C,42H RRC A MOV C,43H RRC A MOV 51H,A ANL 29H,#0FH MOV A,29H MOV B,#6 MUL AB MOV 50H,A mov a,51H mov b,#10 div ab mov 43H,a mov 42H,b MOV A,50H MOV B,#10 DIV AB MOV 41H,A MOV 40H,B mov column2,#24 ;实际温度 mov pagef2,#4 mov code,43h lcall writeright mov column2,#32 mov pagef2,#4 mov code,42h lcall writeright mov column2,#40 mov pagef2,#4 ;. mov code,#11 lcall writeright mov column2,#48 mov pagef2,#4 mov code,41h lcall writeright RET ;***********************DS18B20复位初始化子程序*********** INIT_1820: SETB P3.1 NOP CLR P3.1;主机发出延时537微秒的复位低脉冲 MOV R1,#3TSR1: MOV R0,#107 DJNZ R0,$ DJNZ R1,TSR1 SETB P3.1 ;然后拉高数据线 NOP NOP NOP MOV R0,#25HTSR2: JNB P3.1,TSR3 ;等待DS18B20回应 DJNZ R0,TSR2 LJMP TSR4 ; 延时TSR3: SETB FLAG1 ; 置标志位,表示DS1820存在 LJMP TSR5TSR4: CLR FLAG1 ; 清标志位,表示DS1820不存在 LJMP TSR7TSR5: MOV R0,#117TSR6: DJNZ R0,TSR6 ; 时序要求延时一段时间TSR7: SETB P3.1 RET ; 读出转换后的温度值 ;***********************读温度子程序***************** GET_TEMPER: SETB P3.1 LCALL INIT_1820;先复位DS18B20 JB FLAG1,TSS2 RET ; 判断DS1820是否存在?若DS18B20不存在则返回TSS2: MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#44H ; 发出温度转换命令 LCALL WRITE_1820;通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒 LCALL DISPLAY LCALL INIT_1820;准备读温度前先复位 MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820 LCALL READ_18200 RET ;*************************写命令子程序**********WRITE_1820: MOV R2,#8 CLR CWR1: CLR P3.1 MOV R3,#6 DJNZ R3,$ RRC A MOV P3.1,C MOV R3,#23 DJNZ R3,$ SETB P3.1 NOP DJNZ R2,WR1 SETB P3.1 RET ;***********************读命令子程序***********READ_18200: MOV R4,#2 MOV R1,#29HRE00: MOV R2,#8RE01: CLR C SETB P3.1 NOP NOP CLR P3.1 NOP NOP NOP SETB P3.1 MOV R3,#9RE10: DJNZ R3,RE10 MOV C,P3.1 MOV R3,#23RE20: DJNZ R3,RE20 RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 RET ;**********************左半屏写入数字子程序**************8writeleft: mov dptr,#table1push columnmov cpage,#2mov ccolumn,#0mov a,pagefanl a,#07horl a,#0b8h ;页地址,第0页mov com,alcall prm0 mov a,columnanl a,#3fhorl a,#40h ;列地址,第0列mov com,alcall prm0 mov a,codemov b,#16mul abadd a,dplmov dpl,amov a,baddc a,dphmov dph,a lp1:mov a,#00hmovc a,@a+dptrmov dat,alcall prm1inc ccolumnmov a,ccolumninc dptrcjne a,#8,lp1dec cpageinc pagefmov a,cpagejz over1mov a,pagefanl a,#07horl a,#0b8hmov com,alcall prm0pop columnmov a,columnanl a,#3fhorl a,#40hmov com,alcall prm0mov ccolumn,#0ljmp lp1over1:ret ;************右半屏写入数字子程序*******************writeright: mov dptr,#table1push column2mov cpage2,#2mov ccolumn2,#0mov a,pagef2anl a,#07horl a,#0b8hmov com,alcall prr0 mov a,column2anl a,#3fhorl a,#40hmov com,alcall prr0 mov a,codemov b,#16mul abadd a,dplmov dpl,amov a,baddc a,dphmov dph,a lp2:mov a,#00hmovc a,@a+dptrmov dat,alcall prr1inc ccolumn2mov a,ccolumn2inc dptrcjne a,#8,lp2dec cpage2inc pagef2mov a,cpage2jz over2mov a,pagef2anl a,#07horl a,#0b8hmov com,alcall prr0pop column2mov a,column2anl a,#3fhorl a,#40hmov com,alcall prr0mov ccolumn2,#0ljmp lp2over2:ret ;*****************左半屏写入汉字子程序*****************writeleft2: mov dptr,#table2push column3mov cpage3,#2mov ccolumn3,#0mov a,pagef3anl a,#07horl a,#0b8hmov com,alcall prm0 mov a,column3anl a,#3fhorl a,#40hmov com,alcall prm0 mov a,codemov b,#32mul abadd a,dplmov dpl,amov a,baddc a,dphmov dph,a lp3:mov a,#00hmovc a,@a+dptrmov dat,alcall prm1inc ccolumn3mov a,ccolumn3inc dptrcjne a,#16,lp3dec cpage3inc pagef3mov a,cpage3jz over3mov a,pagef3anl a,#07horl a,#0b8hmov com,alcall prm0pop column3mov a,column3anl a,#3fhorl a,#40hmov com,alcall prm0mov ccolumn3,#0ljmp lp3over3:ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;writeright2: ; 右半屏写入汉字子程序mov dptr,#table2push column4mov cpage4,#2mov ccolumn4,#0mov a,pagef4anl a,#07horl a,#0b8hmov com,alcall prr0 mov a,column4anl a,#3fhorl a,#40hmov com,alcall prr0 mov a,codemov b,#32mul abadd a,dplmov dpl,amov a,baddc a,dphmov dph,a lp4:mov a,#00hmovc a,@a+dptrmov dat,alcall prr1inc ccolumn4mov a,ccolumn4inc dptrcjne a,#16,lp4dec cpage4inc pagef4mov a,cpage4jz over4mov a,pagef4anl a,#07horl a,#0b8hmov com,alcall prr0pop column4mov a,column4anl a,#3fhorl a,#40hmov com,alcall prr0mov ccolumn4,#0ljmp lp4over4:ret
一周热门 更多>