提問者:angelandlo2014-01-01 00:00
我的畢業設計題目,不懂編程,懇請幫忙
READ EQU 0 ;讀93C46 WRITE EQU 2 ;寫入93C46 EWEN EQU 4 ;93C46寫入使能 EWDS EQU 6 ;93C46寫入禁止 ADR46 EQU 21H ;93C46地址 顯示 顯示 啟動定時器進入工作狀態 時分值送顯示緩存區 K1 有按鍵嗎? 清分單元 顯示 分值加1 置校分標志 K3 有按鍵嗎? K1 有按鍵嗎? 是60 分嗎? THIGH EQU 0F8H TLOW EQU 5FH TIMENEQU 30 ;打鈴持續時間(30秒) CS BIT P3.7 ;93C46CS CLK BIT P3.6 ;93C46CLK DI BIT P3.5 ;93C46DI DO BIT P3.4 ;93C46DO ORG 0000H ;主程序起始地址 AJMP START ;跳至主程序 ORG 000BH ;TIMER0中斷起始地址 AJMP TIM0 ;跳至TIMER0中斷子程序 START:MOV SP,#60H ;設置堆棧在60H MOV 28H,#00 ;顯示寄存器初值為00 MOV R6,#12H ; “時”寄存器值為12H MOV R5,#00H ;;“分”寄存器值為00H MOV R4,#00H ;“秒”寄存器值為00H MOV TMOD,#01H ;設TIMER0為MODE1 MOV TH0,#THIGH ;計時中斷為4000微秒 MOV TL0,#TLOW MOV IE,#82 ;TIMER中斷使能 MOV R2,#250 ;中斷250次 SETB TR0 ;啟動TIMER0 2.鍵值處理程序: LOOP: SETB P0.5 ;工作模式 CLR P0.6 CLR P0.7 JB P0.0,N1 ;K1(模式選擇鍵)按了?不是則跳至N1 ACALL DELAY ;消除抖動 JNB P0.0,$ ;K1(模式選擇鍵)放開了? ACALL DELAY ;消除抖動 AJMP SET ;轉到定時模式SET N1: MOV 2FH,R6 ;將時鐘數據載入2FH中 MOV 2EH,R5 ;將分鐘數據載入2EH中 MOV ADR46,#00 ;把93C46地址置0 SETB RS0 ;將工作寄存器組選擇1區 LOOP1: MOV A,#READ ;讀93C46 ACALL TO93c46 MOV A,R3 ;取出定時器的狀態 ANL A,#01H CJNE A,#01H,N2 ;定時器為關閉,則跳轉至N2 MOV A,R4 ;取出定時器分鐘數據 CJNE A,2FH,N2 ;定時器分鐘數據與時鐘分鐘不同則轉至N2 MOV A,R5 ;取出定時器時鐘數據 CJNE A,2EH,N2 ;定時器時鐘數據與時鐘時鐘不同則轉至N2 SETB P2.1 ;定時器時間到,打鈴 MOV A,ADR46 ;將93C46地址載入A中 N2: CJNE A,#1EH,N3 ;到定時器數據表表尾?沒到轉至N3 MOV ADR46,#00 ;到表尾,置93C46地址為表頭 AJMP LOOP1 ;轉至LOOP1 N3: INC ADR46 ;93C46地址加2 INC ADR46 AJMP LOOP1 ;轉至LOOP1 SET: CLR P0.5 ;校時模式 SETB p0.6 CLR P0.7 LOOPS: JB P0.0,N11 ;K1(模式選擇鍵)按了?不是則跳至N11 ACALL DELAY ;消除抖動 JNBP0.0,$ ;K1(模式選擇鍵)放開了? ACALL DELAY ;消除抖動 AJMP SETTIME ;轉至SETTIME N11: JB P0.1,N13 ;K2(時鐘加1鍵)按了?不是則跳至N13 ACALL DELAY ;消除抖動 MOV A,R6 ;將時寄存器的值載入A ADD A,#01H ;A內容加1 DA A ;做十進制調整 MOV R6,A ;將A的值存入時寄存器 CJNE A,#24H,N12 ;是否超過24時?不是則跳至N12 MOV R6,#00H ;是則清除時寄存器的值為00 N12: JNB P0.1,$ ;K2(時鐘加1鍵)放開了? ACALL DELAY ;消除抖動 N13: JB P0.2,N15 ;K3(分鐘加1鍵)按了?不是則跳至N15 ACALL DELAY ;消除抖動 MOV A,R5 ;將分寄存器的值載入A ADD A,#01 ;A內容加1 DA A ;做十進制調整 MOV R5,A ;將A的值存入分寄存器 CJNE A,#60H,N14 ;是否超過60分?不是則跳至N14 MOV R5,#00H ;是則清除分寄存器的值為00 N14: JNB P0.2,$ ;K3(分鐘加1鍵)放開了? ACALL DELAY ;消除抖動 N15: JB P0.3,N17 ;K4(秒鐘加1鍵)按了?不是則跳至N17 ACALL DELAY ;消除抖動 MOV A,R4 ;將秒寄存器的值載入A ADD A,#01 ;A內容加1 DA A ;做十進制調整 MOV R4,A ;將A的值存入秒寄存器 CJNE A,#60H,N16 ;是否超過60秒?不是則跳至N16 MOV R4,#00 ;是則清除分寄存器的值為00 N16: JNB P0.3,$ ;K4(秒鐘加1鍵)放開了? ACALL DELAY ;消除抖動 N17: AJMP LOOPS ;轉至LOOPS SETTIME:CLR P0.5 ;定時模式 CLR P0.6 SETB P0.7 MOV ADR46,#00H MOV A,#READ ;讀93C46地址為ADR46中的數據 ACALL TO9346 LOOPB:ACALL DISP ;調用DISP JB P0.0,N21 ;K1(模式選擇鍵)按了?不是則跳至N21 ACALL DELAY ;消除抖動 JNB P0.0,$ ;K1(模式選擇鍵)放開了? ACALL DELAY ;消除抖動 AJMP LOOP ;轉至LOOP N21: JB P0.1,N22 ;K2(定時器組加1鍵)按了?不是則跳至N22 ACALL DELAY ;消除抖動 MOV A,ADR46 ;將地址載入A CLR C ;清除進位位 RRC A ;A右移1位 ADD A,#01H ;地址加1 MOV R6,A ;將A存入R6 CLR C ;清除進位位 RLC A ;A左移1位 MOV ADR46,A ;將A中地址存入ADR46 MOV A,#READ ;讀93C46地址為ADR46中的數據 ACALL TO9346 JNB P0.1,$ ;K2(定時器組加1鍵)放開了? ACALLDELAY ;消除抖動 N22: JB P0.2,N24 ;K3(定時器分鐘加1鍵)按了?不是則跳至N24 ACALLDELAY ;消除抖動 MOV A,R4 ;將定時器分寄存器的值載入A ADD A,#01 ;A內容加1 DA A ;做十進制調整 MOV R4,A ;將A的值存入定時器分寄存器 CJNE A,#60H,N23 ;是否超過60分?不是則跳至N16 MOV R4,#00H ;是則清除分寄存器的值為00 N23: JNB P0.2,$ ;K3(定時器分鐘加1鍵)放開了? ACALL DELAY ;消除抖動 N24: JB P0.3,N26 ;K4(定時器時鐘加1鍵)按了?不是則跳至N26 ACALL DELAY ;消除抖動 MOV A,R5 ;將定時器時寄存器的值載入A ADD A,#01H ;A內容加1 DA A ;MOV R5,A ;將A的值存入定時器時寄存器 CJNE A,#24H,N25 ;是否超過24時?不是則跳至N25 MOV R5,#00 ;是則清除分寄存器的值為00 N25:JNB P0.3,$ ;K4(定時器時鐘加1鍵)放開了? ACALL DELAY ;消除抖動 N26:JB P0.4,N27 ;K5(改變定時器狀態存儲鍵)按了?不是則跳至N27 ACALL DELAY ;消除抖動 INC R3 ;改變R3最低位的值(表示定時器的狀態,1表示開,0 表示關) MOV A,#WRITE ;將A的值寫入93C46地址為ADR46中 ACALL TO9346 JNB P0.4,$ ;K5(改變定時器狀態存儲鍵)放開了? ACALL DELAY ;消除抖動 N27:AJMP LOOPB ;轉至LOOPB做十進制調整 3.中斷程序: TIM0:MOV TH0,#THIGH ;重設計時4000微秒 MOV TL0,#TLOW PUSH ACC ;將A的值存入堆棧 PUSH PSW ;將PSW的值存入堆棧 CLR RS0 ;設置工作寄存器為0區 DJNZ R2,X2 ;計時1秒 MOV R2,#250 ACALL CLOCK ;調用計時子程序CLOCK ACALL DISP ;調用顯示子程序 X2:ACALL SCAN ;調用掃描子程序 POP PSW POP ACC RETI 顯示器驅動程序: SCAN:MOV R0,#28H ;(28H)為掃描指針 INC @R0 ;掃描指針加1 CJNE @R0,#6,X3 ;掃描完6個顯示器?不是跳至X3 MOV @R0,#00 ;是則掃描指針為0 X3:MOV A,@R0 ;掃描指針載入A ADD A,#20 ;A加常數20H(顯示寄存器地址)=各時間顯示區地址 ;存入R1=各時間顯示地址 MOV R1,A ;掃描指針存入A MOV A,@R0 ;將A高低4位交換(P1高4位為掃描值, SWAP A ;低4位為顯示數據值) ORL A,@R1 ;掃描值+顯示值 MOV R1,A ;輸出至P1 RET 計時程序: CLOCK:MOV A,R4 ;R4為秒寄存器 ADD A,#01 ;加1 DA A ;做十進制調整 MOV R4,A ;存入秒寄存器 CJNE A,#TIMEN,X4 ;是否超過打零連續時間?不是則跳至X4 CLR P2.0 ;關鈴 X4:CJNE A,#60H,X5 ;是否超過60秒?不是則跳至X5 MOV R4,#00 ;是則清除為0 MOV A,R5 ;R5為分寄存器 ADD A,#01 ;加1 DA A ;做十進制調整 MOV R5,A ;存入分寄存器 CJNE A,#60H,X5 ;是否超過60分?不是則跳至X5 MOV R5,#00 ;是則清除為0 MOV A,R6 ;R6為時寄存器 ADD A,#01 ;加1 DA A ;做十進制調整 MOV R6,A ;存入時寄存器 CJNEA,#60H,X5 ;是否超過24時?不是則跳至X5 MOV R6,#00 ;是則清除為0 X5:RET 5.顯示程序: DISP:MOVR1,#20 ;(20H)為顯示寄存器,R1=20H MOV A,R6 ;將時寄存器的內容存入A MOV B,#01H ;設B累加器的值為10H DIV AB ;A/B,商(十位數)存入A,余數(個位數)存入B MOV @R1,B ;將B的內容存入(20H) INC R1 ;R1=21H MOV @R1,A ;將A的內容存入(21H) INC R1 ;R1=22H MOV A,R5 ;將分寄存器的內容存入A MOV B,#01H ;設B累加器的值為10H DIV AB ;A/B,商(十位數)存入A,余數(個位數)存入B MOV @R1,B ;將B的內容存入(22H) INC R1 ;R1=23H MOV @R1,A ;將A的內容存入(23H) INC R1 ;R1=24H MOV A,R4 ;將秒寄存器的內容存入A MOV B,#01H ;設B累加器的值為10H DIV AB ;A/B,商(十位數)存入A,余數(個位數)存入B MOV @R1,B ;將B的內容存入(24H) INC R1 ;R1=25H MOV @R1,A ;將A的內容存入(25H) RET END
回答者:q8349230242016-01-01 00:00
是用51自身做計時嗎?? 用中斷計時會好一些吧 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;系統名稱: 數字鐘 ;創健人:濟南, 日期:2005.6.19
提問者:dik4243702013-07-02
打開地圖,向所標示的地點進發即可。 boss攻略: No.1(雙頭龍) 第一個boss主角的攻擊對其是無效的,只有怪獸的攻擊對其有效首先關心boss的弱點頭部(會換位置)在哪里其次只要在角落,等待其攻擊瞬間跳躍至畫
提問者:pqjmhydk2013-03-17
我拉過2年的京儀爐子,等徑過程中液面晃主要還是熱場有問題,1。一般是石英鍋與導流筒有擦邊2.三瓣鍋使用時間長,與石英鍋接觸不好3.還有托干螺絲要上好,檢測是不是轉動時在一個中心點。4.檢查爐內水平5.還有每次裝熱場裝石英
提問者:Miko____戇2013-09-07
最大優點外形大氣時尚,肌肉感十足,內飾設計新穎,空間充裕,動力均衡,底盤扎實,操控性較好,性價比較高,后期養護方便。最大缺點內飾做工有待提高,低配車型配置較差,異響、抖動、噪音等問題網友詬病較多。
提問者:Turboboost2015-01-31
看來要大修,你這估計是個二手貨
提問者:2015-10-06
檢插剎車盤58車
提問者:sophiachou232015-10-01