家用便攜式衣物烘干機(jī)系統(tǒng)設(shè)計(jì)(含CAD圖紙、說(shuō)明書(shū))
主程序:ORG 0000HLJMP MAIN ORG 0003HLJMP INTD0ORG 000BHLJMP TIME0ORG 0100HMAIN: MOV SP ,#60H ; 給堆棧賦初值 CLR PSW.3 ; 工作寄存器初始化CLR PSW.4 ;MOV 71H,#0AH ;相對(duì)濕度初始最小值10%MOV 72H,#62H ;相對(duì)濕度初始最大值98%MOV 73H,00H ;當(dāng)前相對(duì)濕度存儲(chǔ)單元清零MOV TMOD,#01H ;定時(shí)初始化MOV TL0,#0CEH ;晶振=12MHZ,定時(shí)=50msMOV TH0,#3CH ;SETB TR0 ;設(shè)置T0定時(shí)器SETB EX0 ;設(shè)置INTO中斷優(yōu)先SETB ET0 ;設(shè)置T0中斷SETB EA ;開(kāi)中斷LOP: ACALL KEY_SCAN ; 掃描按鍵是否按下CJNE A,#0DBH,LOP1; 判斷“標(biāo)準(zhǔn)”鍵是否按下,不是則跳AJMP NORMAL ; 若是“標(biāo)準(zhǔn)”鍵按下,則跳轉(zhuǎn)至“標(biāo)準(zhǔn)”LOP1:CJNE A,#0DDH,LOP2; 判斷“快速”鍵是否按下,不是則跳AJMP FAST ; 若是,則跳至“快速”模式工作LOP2:CJNE A,#0DEH,LOP ; 判斷“手動(dòng)”鍵是否按下,不是則跳AJMP MANUAL ; 若是,則跳至“手動(dòng)”模式工作標(biāo)準(zhǔn)模式:NORMAL:ACALL KEY_SCAN ; 掃描矩陣鍵盤(pán)CJNE A,#0F6H,$ ; “確定”鍵按下才開(kāi)始工作MOV 5FH,#5AH ; 高溫MOV 5BH,#14H ; 低速ACALL INTD0 ; 可控硅調(diào)節(jié)ACALL WET ; 濕度檢測(cè)MOV A,73H ;取出當(dāng)前相對(duì)濕度值CJNE A,#62H,NORMAL ; 判斷是否達(dá)到98%的濕度N1: MOV 5FH,#32H ; 低溫MOV 5BH,#5FH ;高速ACALL INTDO ;ACALL WET ;MOV A,73H ;CJNE A,#OAH,N1 ;判斷是否達(dá)到10%的濕度,若不是則跳轉(zhuǎn),繼續(xù)低溫高速工作SJMP LOP快速模式:FAST:ACALL KEY_SCAN ; 掃描矩陣鍵盤(pán)CJNE A,#0F6H,$ ; “確定”鍵按下才開(kāi)始工作MOV 5FH,#5AH ; 高溫MOV 5BH,#14H ; 低速ACALL INTD0 ; 可控硅調(diào)節(jié)ACALL WET ; 濕度檢測(cè)MOV A,73H ;取出當(dāng)前相對(duì)濕度值CJNE A,#62H,FAST ; 否達(dá)到98%的濕度F1: MOV 5FH,#5AH ; 高溫MOV 5BH,#5FH ; 高速ACALL INTDO ;ACALL WET ;MOV A,73H ;CJNE A,#OAH,F1 ;判斷是否達(dá)到10%的濕度,若不是則跳轉(zhuǎn),繼續(xù)低溫高速工作SJMP LOP手動(dòng)模式:MANUAL:MOV A,50H ; 從50H中取出時(shí)間值MOV R0,A ; ACALL DISPLAY ; 顯示初始化時(shí)間值TIME:ACALL KEY_SCAN ; 掃描矩陣鍵盤(pán)CJNE A,#0EBH,WEN ; 判斷“時(shí)間”鍵是否按下,不是則跳ACALL DISPLAY ; 數(shù)碼管顯示AJMP TIAO ; 跳轉(zhuǎn)至調(diào)節(jié)子程序MOV A,R0 ;把時(shí)間值存回50H單元MOV 50H,A ;WEN:ACALL KEY_SCAN ; 掃描鍵盤(pán)CJNE A,#0EDH,FENG ;判斷“溫度”鍵是否按下,沒(méi)有則跳MOV A,5FH ; 把初始溫度存入R0MOV R0,AACALL DISPLAYAJMP TIAOMOV A,R0MOV 5FH,A ; 把溫度值存回5FH單元FENG:ACALL KEY_SCAN ;CJNE A,#0EEH,TIME ; 判斷“風(fēng)量”鍵是否按下,沒(méi)有則重掃描MOV A,5BH ;把初始風(fēng)量存入R0MOV R0,AACALL DISPLAYAJMP TIAOMOV A,R0 ; 把風(fēng)量值存回5BH單元MOV 5BH,A ;ACALL KEY_SCAN; 掃描矩陣鍵盤(pán)CJNE A,#0F6H,$ ; “確定”鍵按下才開(kāi)始工作ACALL INTDO ; 可控硅調(diào)節(jié)ACALL DOUS ; 調(diào)用倒時(shí)子程序SJMP LOP可控硅過(guò)零調(diào)功調(diào)速子程序INTD0:PUSH ACC ; INTO中斷服務(wù)程序PUSH PSW ; 保護(hù)現(xiàn)場(chǎng)PUSH DPH ;PUSH DPL ;SETB 24H.0 ; INTO中斷置位,避免主程序修改參數(shù)WEN:MOV A,5FH ; 取n1值JZ TING1 ; n1=0,停止發(fā)熱控制DEC A ; 若n10,則n1-1MOV 5FH,A ; 把n1值存回5FHCJNE A,#00H,WEN ; 判斷n1值是否到零AJMP FEN ; 跳轉(zhuǎn)至風(fēng)速控制TING1:CLR P3.6 ; 停止對(duì)PTC發(fā)熱控制FEN:MOV A,5BH ; 取出n2 值JZ TING2 ;若n2=0,則停止電機(jī)控制DEC A ;若n20,則n2=n2-1MOV 5BH,A ;把n2 值存回5BHCJNE A,#00H,FEN ; 判斷n2值是否到零AJMP ZONG ;TING2:CLR P3.7 ; 停止對(duì)電機(jī)控制ZONG:MOV A,59H ; 取N值JZ KAI ; 若N=0,則可控硅未啟動(dòng)DEC A ; 若N0,說(shuō)明可控硅已啟動(dòng),則N-1后中斷返回MOV 59H,A ; 把N值存回59HCJNE A,#00H,ZONG ;AJMP EXIT ;KAI: 開(kāi)啟可控硅控制CLR 24H.0 ; 清INT0中斷標(biāo)志JB 26H.0,KAI2 ; 若26H.0=1,PTC控制未啟動(dòng)SETB P3.6 ; 開(kāi)啟對(duì)PTC控制KAI2:MOV A,66H ;JZ EXIT1 ; 若A=0,說(shuō)明未開(kāi)啟對(duì)電機(jī)控制SETB P3.7 ; 若A0,則開(kāi)啟對(duì)電機(jī)控制EXIT1:MOV 5FH,5AH ; 恢復(fù)原初始化數(shù)據(jù)MOV 5BH,66H ;MOV 59H,#100EXIT:POP DPL ; 恢復(fù)現(xiàn)場(chǎng)POP DPH ;POP PSW ;POP ACC ;RETI ; 中斷返回濕度檢測(cè)(A/D轉(zhuǎn)換)子程序WET:SETB P1.5 ; 啟動(dòng)A/D轉(zhuǎn)換LOOP:MOV A,P1 ; 讀取狀態(tài)信號(hào)ANL A,#80H ; 取出P1.7的值CJNE A,#00H,LOOP ; 若A=0則轉(zhuǎn)換結(jié)束,若0則跳轉(zhuǎn),繼續(xù)讀取狀態(tài)信號(hào)CLR P1.5 ; 轉(zhuǎn)換結(jié)束,轉(zhuǎn)換器進(jìn)入保持狀態(tài)L1:MOV A,P1 ; 讀出個(gè)位數(shù)值,讀入位選內(nèi)容ANL A,#10H ; 屏蔽其他位,只剩個(gè)位CJNE A,#10H,L1 ; 確定鎖存器上的BCD碼是否為個(gè)位MOV A,P3 ; 讀取個(gè)位的BCD碼ANL A,#0FH ; 屏蔽高位MOV 40H,A ; 將個(gè)位的BCD碼存入40H單元L2:MOV A,P1 ; 讀出十位數(shù)值A(chǔ)NL A,#08H ;CJNE A,#08H,L2 ;MOV A,P3 ;ANL A,#0FH ;MOV 41H,A ; 將十位的BCD碼存入41H單元L3:MOV A,P1 ; 讀出百位數(shù)值A(chǔ)NL A,#04H ;CJNE A,#04H,L3 ;MOV A,P3 ;ANL A,#0FH ;MOV 42H,A ; 將百位的BCD碼存入42H單元L4:MOV A,P1 ; 讀出千位數(shù)值A(chǔ)NL A,#02H ;CJNE A,#02H,L4 ;MOV A,P3 ;ANL A,#0FH ;MOV 43H,A ; 將千位的BCD碼存入43H單元L5:MOV A,P1 ; 讀出萬(wàn)位數(shù)值A(chǔ)NL A,#01H ;CJNE A,#01H,L5 ;MOV A,P3 ;ANL A,#0FH ;MOV 44H,A ; 將萬(wàn)位的BCD碼存入44H單元ZH:MOV A,40HORL A,41HMOV 73H,A ; 將當(dāng)前相對(duì)濕度存入73HRET顯示子程序:DISPLAY:MOV A,R0 ; 數(shù)值的顯示MOV B,#10 ;DIV A B ; 把要顯示的數(shù)的十位存放在A中,個(gè)位存放在B中ADD A,#10 ; 位選通十位MOV P0,A ; 顯示十位數(shù)字TI0:JNB P3.4 ,TT ;定時(shí)50ms是否到,是則跳,否則等待SJMP TI0TT:SETB P3.4MOV A,B ; 把個(gè)位的數(shù)值賦給AADD A,#20H ; 位選通顯示個(gè)位MOV P0,A; 顯示個(gè)位數(shù)值TI1:JNB P3.4 TT1SJMP TI1TT1:SETB P3.4矩陣鍵盤(pán)子程序:KEY_SCAN:MOV P2,#0F8H ; 置列線(xiàn)為0,行線(xiàn)為1MOV A,P2 ; 讀P2口ANL A,#0F8H ; 取出高三位MOV B,A ; 暫存到BMOV P2,#0C7H ; 置列線(xiàn)為1,行線(xiàn)為0MOV A,P2; 讀P2口ANL A,#0C7H ; 取出低三位ORL A,B ; 高三位與低三位進(jìn)行或運(yùn)算,重新組合CJNE A,#0FFH,KEY_IN1 ; 0FFH表示無(wú)按鍵按下,不相同則跳轉(zhuǎn)RET ; 結(jié)束,無(wú)按鍵按下KEY_IN1: 識(shí)別具體按鍵值子程序MOV B,A ; 將按鍵的特征編碼暫存于BMOV DPTR,#KEY_TABLEMOV R1,#0KEY_IN2:MOV A,R1MOVC A,A+DPTR ; 查表CJNE A,B,KEY_IN3 ; 比較,若不相同則跳轉(zhuǎn),若相同則找到按鍵的特征編碼MOV 30H,A ; 把特征編碼存入30H單元RETKEY_IN3:INC R1CJNE A,#0C0H,KEY_IN2 ; 若不是結(jié)束編碼則繼續(xù)核對(duì)下一個(gè)編碼RET ; 0C0H為結(jié)束碼KEY_TABLE:DB 0DBH , 0DDH , 0DEH ; 標(biāo)準(zhǔn),快速,手動(dòng)DB 0EBH , 0EDH , 0EEH ; 時(shí)間,濕度,風(fēng)量DB 0F3H , 0F5H , 0F6H ; ,確定DB 0C0H ; 結(jié)束碼“+”“”鍵調(diào)節(jié)子程序:TIAO:ACALL KEY_SCAN ; 掃描鍵盤(pán)UP:CJNE A,#F3H,DOWN ;判斷“+”鍵是否按下INC R0 ; 數(shù)值加1CJNE R0,#99,RIGHT ;判斷是否加到99MOV R0,#00H ; 若加到99,則從0開(kāi)始AJMP RIGHTDOWN:CJNE A,#0F5H,RIGHT ; 判斷“”鍵是否按下DEC R0 ; 數(shù)值減1CJNE R0,#00H.RIGHT ;判斷是否減到0MOV RO,#99 若減到0,則重新從99開(kāi)始RIGHT: ACALL DISPLAY ; 顯示數(shù)值SURE:ACALL KEY_SCANCJNE A,#0F6H,UP ;判斷“確定”鍵是否按下,不是則跳RET倒時(shí)子程序:DOUS:MOV R2,#1500; 為延時(shí)1分鐘而用MOV A,50H ; 取出設(shè)定好的時(shí)間MOV R0,ADS1:SETB P3.4 ; 啟動(dòng)定時(shí)ACALL DISPLAY ; 調(diào)用顯示程序DJNE R2,DS1 ; 延時(shí)1分鐘MOV R2,#1500;LCALL WET ; 檢測(cè)當(dāng)前濕度值MOV A,73H ; 將當(dāng)前濕度傳給ACJNE A,#0AH,DS2 ; 當(dāng)前濕度是否達(dá)到10%,不是則跳JMP DS3DS2:DJNE R0,DS1 ;設(shè)定的時(shí)間減1,繼續(xù)顯示DS3:RET時(shí)間中斷程序:TIMA:PUSH PSWPUSH ACCMOV TL0,#0CEH ; 重新賦值MOV TH0,#3CH ;CLR P3.4POP ACCPOP PSWRETI
收藏