流程圖:
本實(shí)驗(yàn)所有資料打包下載:
單片機(jī)實(shí)驗(yàn).rar
(55.34 KB, 下載次數(shù): 7)
2016-4-7 01:08 上傳
點(diǎn)擊文件名下載附件
實(shí)驗(yàn)報(bào)告論文如下:
單片機(jī)實(shí)驗(yàn)報(bào)告 ―自動報(bào)時(shí)系統(tǒng)設(shè)計(jì)實(shí)驗(yàn) 院系:電信學(xué)院自動化0106 姓名:王建冬 學(xué)號:200182012
一. 設(shè)計(jì)任務(wù) 1.時(shí)間顯示功能。用6位數(shù)碼管顯示時(shí),分,秒。 2.利用鍵盤可以設(shè)定當(dāng)前時(shí)間(時(shí),分,秒) 3.2個(gè)LED指示燈L1,L2來表示輸出狀態(tài) 4.作息時(shí)間表存于ROM中,時(shí)間表如下: 08:00開始工作 L1亮2s后滅,L2滅; 11:30 午休 L1亮2s后滅,L2亮一個(gè)小時(shí)后滅; 12:30下午工作開始 L1亮2s后滅,L2滅; 17:00下班 L1亮2s后滅,L2亮十分鐘后滅; 二. 硬件連線圖 (附錄1) 三. 程序流程圖 (附錄2) 四. 程序 (附錄3) 五. 操作說明 系統(tǒng)上電顯示“LLLLLLLL”后,立即從初始時(shí)間7:56:30開始運(yùn)行。當(dāng)按下鍵盤last鍵后,進(jìn)入修改模式,此時(shí)數(shù)碼管對應(yīng)小時(shí)的位置閃爍,時(shí)間不停,再按一下last,退出修改模式,顯示正常。 在修改模式下:按下next鍵,轉(zhuǎn)換要修改的位置,由數(shù)碼管相應(yīng)的位置閃爍,可知將要修改的是小時(shí),分鐘,還是秒,此時(shí)間也不停止;按下shift鍵,時(shí)間停止,相應(yīng)的位置加一,如果指向秒的位置則清零,實(shí)現(xiàn)修改時(shí)間的功能。修改完畢,再按一下last,退出修改模式,顯示正常。 六. 心得 通過實(shí)驗(yàn),更好得理解了MCS-51單片機(jī)的硬件系統(tǒng)與指令系統(tǒng),有了在ADEK51實(shí)驗(yàn)設(shè)備上開發(fā)單片機(jī)的能力,同時(shí)對鍵盤掃描/顯示芯片8279有了一定的了解,并能熟練應(yīng)用8279。 由于本實(shí)驗(yàn)有一定的復(fù)雜性及應(yīng)用性,所以更強(qiáng)調(diào)系統(tǒng)的設(shè)計(jì)步驟、方法,在實(shí)驗(yàn)中還要不斷的修改,以使程序盡可能的合理與簡化,此次實(shí)驗(yàn)增加了自己的開發(fā)經(jīng)驗(yàn),為以后打下堅(jiān)實(shí)的基礎(chǔ)。
程序: - ;附錄3:源程序
- ;說明:
- ;R0指向30,31,32的地址指針,初始值為30 全局
- ;R1函數(shù)toram的入口,指向20的地址指針 全局
- ;R2定時(shí)一秒的常數(shù) 全局
- ;R3接受按鍵 全局
- ;R4報(bào)警標(biāo)志位 全局 r3,r4是函數(shù)toram用到的寄存器 局部
- ;R5計(jì)時(shí)器狀態(tài)標(biāo)志 全局 r5=00 計(jì)時(shí)器go r5=11 計(jì)時(shí)器stop
- ;R6修改狀態(tài)標(biāo)志 全局 r6=00 按鍵無效 r6=ff 進(jìn)入修改狀態(tài),
- ;R7函數(shù)toram的入口,全局 一個(gè)壓縮BCD碼
- ;20H開始的8個(gè)數(shù)據(jù)單元存放時(shí)間的BCD碼
- ;30H,31H,32H依次存放小時(shí),分,秒的壓縮BCD碼
-
- Z8279 EQU 0FF82H
- D8279 EQU 0FF80H
- LEDMOD EQU 10H
- LEDFEQ EQU 38H
- LEDCLS EQU 0D1H
- LEDWRO EQU 90H
- KEY1 EQU 28H ;修改狀態(tài)改變
- KEY2 EQU 29H ;修改位置改變
- KEY3 EQU 2AH ;數(shù)值改變
- ORG 0000H
- AJMP START
- ORG 000BH
- AJMP T0INT
- ORG 0040H
- START:
- MOV SP,#60H
- MOV R1,#20H
- MOV R2,#08H
- MOV A,#00H
- MOV 30H,#07H
- MOV 31H,#56H
- MOV 32H,#30H
- MOV DPTR,#Z8279
- MOV A,#LEDCLS
- MOVX @DPTR,A
- LCALL DELAY
- MOV A,#LEDMOD
- MOVX @DPTR,A
- MOV A,#LEDFEQ
- MOVX @DPTR,A
- LOOP22:
- MOV @R1,A
- INC R1
- DJNZ R2,LOOP22
- LCALL INIT8279
- ;------------------------初始化
- CLR P1.0
- CLR P1.1
-
- MOV R6,#00H
- MOV R0,#30H
- MOV R2,#14H
- mov R5,#00h
- MOV R4,#00H ;清標(biāo)志位 -報(bào)警
- MOV R7,#00H
- MOV 22H,#00H
- MOV 25H,#00H
- CLR TF0
- MOV TMOD,#01H
- MOV TH0,#4BH
- MOV TL0,#0FCH
- MOV IE,#82H
- SETB TR0
- ;---------------------修改時(shí)間
- MODIFY:
- MOV DPTR,#Z8279
- MOVX A,@DPTR
- ANL A,#0FH
- JZ KEY_OUT ;沒有按鍵 跳出
- MOV A,#40H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOVX A,@DPTR ;A接受按鍵
- MOV R3,A
- CJNE R3,#KEY1,POSITION ;判斷按鍵是不是key1, 不是跳轉(zhuǎn)
- CJNE R6,#00H,PRESS_SEC ;第一次按key1進(jìn)入修改狀態(tài),(顯示閃爍),時(shí)間不停
- MOV R6,#0FFH ;置標(biāo)志位
- SJMP KEY_OUT ;跳出
- PRESS_SEC:
- MOV R6,#00H ;第二次按key1跳出修改狀態(tài) (不閃爍)
-
- CJNE R5,#00H,MODIFY_OK ;如果計(jì)時(shí)停止,恢復(fù)計(jì)時(shí)
- SJMP KEY_OUT
- MODIFY_OK:
- SETB TR0 ;啟動定時(shí)器
- SJMP KEY_OUT
- POSITION:
- CJNE R3,#KEY2,VALUE ;判斷是否為key2,不是跳轉(zhuǎn)
- CJNE R6,#0FFH,KEY_OUT ;若未進(jìn)入修改狀態(tài),跳轉(zhuǎn)
- INC R0 ;若進(jìn)入修改狀態(tài),則移位
- CJNE R0,#33H,JJJ
- MOV R0,#30H
- JJJ:
- SJMP KEY_OUT
- VALUE:
- CJNE R3,#KEY3,KEY_OUT ;判斷是否為key3,不是跳出
- CJNE R6,#0FFH,KEY_OUT ;判斷是否進(jìn)入修改狀態(tài),沒有-跳出
- CLR TR0 ;若已進(jìn)入,停止計(jì)時(shí),準(zhǔn)備修改
- MOV R5,#11H ;標(biāo)記置位,表明計(jì)時(shí)停止
- CJNE R0,#32H,WWW
- MOV @R0,#00H
- SJMP KEY_OUT
- WWW:
- MOV A,@R0 ;在相應(yīng)的位置加一
- ADD A,#01H
- DA A
- MOV @R0,A
- MOV A,R0
- CJNE A,#30H,SIXTY ;如果不是小時(shí),加到60,
- CJNE @R0,#24H,KEY_OUT ;是小時(shí),加到24
- MOV @R0,#00H
- SJMP KEY_OUT
- SIXTY:
- CJNE @R0,#60H,KEY_OUT
- MOV @R0,#00H
- SJMP KEY_OUT
- KEY_OUT:
- CJNE R6,#0FFH,NODIS ;如果已進(jìn)入修改狀態(tài),進(jìn)入閃爍顯示狀態(tài)
- LCALL FLASHON
- NODIS:
- LCALL SIREN ;調(diào)用報(bào)警程序
- AJMP MODIFY ;循環(huán)
- ;------------------------子程序-------------------------
- FLASHON:
- CJNE R0,#30H,JUMP31 ;如果指針指向小時(shí),則小時(shí)位閃爍
- MOV R1,#26H
- MOV A,@R0
- MOV R7,A
- LCALL TORAM ;將小時(shí)的BCD碼送到26H,27H
- MOV DPTR,#Z8279 ;閃爍
- MOV A,#86H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,#00H
- MOVX @DPTR,A
- MOV DPTR,#Z8279
- MOV A,#87H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,#00H
- MOVX @DPTR,A
- LCALL DELAY
- MOV DPTR,#Z8279 ;將小時(shí)的值顯示出來
- MOV A,#86H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,26H
- MOVX @DPTR,A
- MOV DPTR,#Z8279 ;將小時(shí)的值顯示出來
- MOV A,#87H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,27H
- MOVX @DPTR,A
- LCALL DELAY
- RET ;顯示完畢,跳出
- JUMP31:
- CJNE R0,#31H,JUMP32 ;如果指針指向 分,則分鐘的位置閃爍
- MOV R1,#23H
- MOV A,@R0
- MOV R7,A
- LCALL TORAM
- MOV DPTR,#Z8279
- MOV A,#83H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,#00H
- MOVX @DPTR,A
- MOV DPTR,#Z8279
- MOV A,#84H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,#00H
- MOVX @DPTR,A
- LCALL DELAY
-
- MOV DPTR,#Z8279
- MOV A,#83H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,23H
- MOVX @DPTR,A
- MOV DPTR,#Z8279
- MOV A,#84H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,24H
- MOVX @DPTR,A
- LCALL DELAY
- RET
- JUMP32:
- CJNE R0,#32H,QIUT ;如果指針指向秒,則秒位閃爍
- MOV R1,#20H
- MOV A,@R0
- MOV R7,A
- LCALL TORAM
- MOV DPTR,#Z8279
- MOV A,#80H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,#00H
- MOVX @DPTR,A
- MOV DPTR,#Z8279
- MOV A,#81H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,#00H
- MOVX @DPTR,A
- LCALL DELAY
-
- MOV DPTR,#Z8279
- MOV A,#80H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,20H
- MOVX @DPTR,A
- MOV DPTR,#Z8279
- MOV A,#81H
- MOVX @DPTR,A
- MOV DPTR,#D8279
- MOV A,21H
- MOVX @DPTR,A
- LCALL DELAY
- QIUT: RET
- SIREN:
- PUSH ACC
- MOV A,#00H ;讀取時(shí)間t1,與現(xiàn)在時(shí)間比較,
- MOV DPTR,#TIMETABLE ;若相等,置報(bào)警位,輸出報(bào)警信號
- MOVC A,@A+DPTR ;不等,跳轉(zhuǎn)---比較表中的下一個(gè)時(shí)間
- CJNE A,30H,NEXT1
- MOV A,#01H
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,31H,NEXT1
- MOV A,#02H
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,32H,NEXT1
- MOV R4,#0FFH
- SETB P1.0 ;燈1亮2s,燈2滅
- POP ACC
- RET
- NEXT1: ;讀取時(shí)間t2,與現(xiàn)在時(shí)間比較
- MOV A,#03H ;若相等,置報(bào)警位,輸出報(bào)警信號
- MOV DPTR,#TIMETABLE ;不等,跳轉(zhuǎn)---比較表中的下一個(gè)時(shí)間
- MOVC A,@A+DPTR
- CJNE A,30H,NEXT2
- MOV A,#04H
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,31H,NEXT2
- MOV A,#05H
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,32H,NEXT2
- MOV R4,#0FFH
- SETB P1.0 ;燈1亮2s,燈2亮
- SETB P1.1
- POP ACC
- RET
- NEXT2: ;;讀取時(shí)間t3,與現(xiàn)在時(shí)間比較
- MOV A,#06H
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,30H,NEXT3
- MOV A,#07H
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,31H,NEXT3
- MOV A,#08H
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,32H,NEXT3
- MOV R4,#0FFH
- SETB P1.0 ;燈1亮2s,燈2滅
- CLR P1.1
- POP ACC
- RET
-
- NEXT3: ;讀取時(shí)間t4,與現(xiàn)在時(shí)間比較
- MOV A,#09H ;若相等,置報(bào)警位,輸出報(bào)警信號
- MOV DPTR,#TIMETABLE ;不等,跳轉(zhuǎn)---比較表中的下一個(gè)時(shí)間
- MOVC A,@A+DPTR
- CJNE A,30H,NEXT4
- MOV A,#0AH
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,31H,NEXT4
- MOV A,#0BH
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,32H,NEXT4
- MOV R4,#0FFH
- SETB P1.0 ;燈1亮2s,燈2亮
- SETB P1.1
- POP ACC
- RET
- NEXT4: ;;讀取時(shí)間t3,與現(xiàn)在時(shí)間比較
- MOV A,#0CH
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,30H,NEXT5
- MOV A,#0DH
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,31H,NEXT5
- MOV A,#0EH
- MOV DPTR,#TIMETABLE
- MOVC A,@A+DPTR
- CJNE A,32H,NEXT5
- MOV R4,#0FFH
- SETB P1.0
- CLR P1.1 ;燈1亮2s,燈2滅
- NEXT5:
- POP ACC
- RET
-
- INIT8279:
- PUSH ACC
- PUSH R2
- PUSH R1
- MOV R1,#20H
- MOV R2,#08H
- MOV DPTR,#Z8279
- MOV A,#LEDWRO
- MOVX @DPTR,A
- MOV DPTR,#D8279
- LOOP33: MOV A,@R1
- MOVX @DPTR,A
- INC R1
- DJNZ R2,LOOP33
- POP R1
- POP R2
- POP ACC
- RET
-
- DELAY: PUSH 00H
- PUSH 01H
- MOV R0,#00H
- DELAY1:MOV R1,#00H
- DJNZ R1,$
- DJNZ R0,DELAY1
- POP 01H
- POP 00H
- RET
-
- TORAM: PUSH ACC
- PUSH R3
- PUSH R4
- MOV A,R7
- MOV R3,A
- MOV R4,A
- MOV A,#0FH
- ANL A,R3
- MOV DPTR,#LEDSEG
- MOVC A,@A+DPTR
- MOV @R1,A
- INC R1
- MOV A,#0F0H
- ANL A,R4
- SWAP A
- MOV DPTR,#LEDSEG
- MOVC A,@A+DPTR
- MOV @R1,A
- POP R4
- POP R3
- POP ACC
- RET
- ;---------------------------------中斷服務(wù)程序----------
- T0INT:
- MOV TH0,#4BH
- MOV TL0,#0FCH
- DJNZ R2,LOOP4
- MOV R2,#14H
- MOV A,32H ;加一
- ADD A,#01H
- DA A
- MOV 32H,A
- CJNE A,#60H,TRANS
- MOV 32H,#00H
- MOV A,31H
- ADD A,#01H
- DA A
- MOV 31H,A
- CJNE A,#60H,TRANS
- MOV 31H,#00H
- MOV A,30H
- ADD A,#01H
- DA A
- MOV 30H,A
- CJNE A,#24H,TRANS
- MOV 30H,#00H
-
- TRANS: ;拆分送入20H開始的數(shù)據(jù)段
- MOV R1,#20H
- MOV R7,32H
- LCALL TORAM
- MOV R1,#23H
- MOV R7,31H
- LCALL TORAM
- MOV R1,#26H
- MOV R7,30H
- LCALL TORAM
- ;CJNE R6,#00H,LOOP4
- LCALL INIT8279 ;顯示
-
- CJNE R4,#00H,PPP ;如果無報(bào)警,燈滅
- CLR P1.0
- SJMP LOOP4
- PPP: INC R4 ;有報(bào)警,r4加一,計(jì)時(shí)
- LOOP4: RETI
- LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
- DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
- TIMETABLE: DB 08H,00H,00H
- DB 11H,30H,00H
- DB 12H,30H,00H
- DB 17H,00H,00H
- DB 17H,10H,00H
- END
復(fù)制代碼
|