3、實訓進度安排
(1)第一天上午:布置任務、分組、確定題目。
(2)第一天下午和晚上:查找資料確定方案,畫出系統組成框圖、硬件電路圖、軟件流程圖。
(3)第二天上午:同步進行元件購買和軟件設計
(4)第二天下午和晚上:同步進行軟件設計與電路焊接
(5)第三天上午:同步進行軟件設計與電路焊接
(6)第三天下午和晚上:同步進行軟件仿真調試和電路調試
(7)第四天上午:軟硬件聯調
(8)第四天下午和晚上:軟硬件聯調,撰寫實訓報告(每組一份)
(9)第五天上午和下午:產品測試與答辯
通過本次課程設計的實踐,進一步學習、掌握單片機應用系統的有關知識,加深了解單片機的工作原理。也進一步掌握簡單單片機應用系統的設計、制作、調試的方法。同時還提高自身的動手實踐能力和科學的思維能力。
同時值得一提的是,在此設計過程中,就對時分之間的點閃爍體現是用查表輸出形式實現的,由于本系統設計是采用74LS164驅動數碼管,只有一個數據信號輸入口,所以不能對數碼管進行“位”控,只能對數碼管的整體顯示進行控制。所以每秒內至少需兩次數據輸出并顯示,第一次輸出顯示的數的小數點都不亮,第二次輸出顯示的數(數的值不變)中第三個數碼管的數的小數點亮,兩者交替輸出顯示,即可實現點時分之間的點閃爍。在具體實現過程中是用查表方式實現,即在第二次輸出顯示時,把R3的值加10,既R3查表所得的值是TAB表格中第二排數值(參看程序清單),而第二排數值所對應顯示的數都是小數點亮的,在此次輸出顯示完成后,再把R3減10,返回原來的值并繼續進行計時。另外在設計按鈕時,一開始遇到的難題是:按一下按鈕,時或分所加的數值并不為1,加的數為不確定值,最后經過研究,使設計程序在查詢P1.2,P1.3端口時,若檢測到高電平時需延遲20ms左右后,再進行二次檢測,以消除按鈕的抖動干擾,使之按一下能正確調節時分進行加1調整(參看程序清單)。最后值得總結的是,在程序設計過程中還存在很多細節上的問題,如因為沒有對進位標志位CY清零,在其他程序都正確的情況下卻始終調不出正確滿意的結果,最后費了很多時間精力去查找尋錯,才得以解決,這使我認識到在程序設計過程中,平時必須加強對一些細小環節的重視,這樣才能在真正程序設計時能做到正確快速的調試成功。總的說來,這次課程設計收益匪淺,通過認真思考、查找資料,以及和同學、老師的探討,解決了很多問題,同時也增長了很多在課堂上學不到的知識。
;中斷向量程序段 org 0000h ajmp start org 000bh ;定時器T0中斷向量地址 ajmp dingshi org 001bh ;定時器T0中斷向量地址 ajmp ds ;********************************************* ;初始化程序段 org 0030h start: mov sp,#30h mov tmod,#11h ;定時器設置 mov th0,#3ch ;定時1秒 mov tl0,#0b0h mov iE,#8ah ;打開定時中斷 mov p1,#00h setb tr0 ;********************************************* ;主程序段 main: mov p1,#00h mov a,p1 jb acc.3,proc3 ;查詢P1.3端口電壓 jb acc.2,proc2 ;查詢P1.2端口電壓 ajmp main ;********************************************* ;二次檢測P1.3,P1.2端口電平 proc3: acall delay0 ;延時20ms mov p1,#00h mov a,p1 jb acc.3,jiafen ret proc2: acall delay0 ;延時20ms mov p1,#00h mov a,p1 jb acc.2,jiashi ret ;********************************************* ;調節分子程序 jiafen: clr p1.3 mov ie,#00h clr tr0 inc r1 cjne r1,#0ah,xianshi0 ;十進位 mov r1,#00h inc r2 cjne r2,#06h,xianshi0 ;六進位 mov r2,#00h xianshi0:acall show mov ie,#8ah ;打開TO,T1中斷 setb tr0 ;使T0開始計時 ret ;********************************************* ; 調節時子程序 jiashi: clr p1.2 mov ie,#00h clr tr0 cjne r4,#02h,sjw ;判斷R4是否為2 ;******* ;二十四清零 inc r3 cjne r3,#04h,xianshi1 ;四進位 mov r3,#00h inc r4 cjne r4,#03h,xianshi1 ;三進位 mov r4,#00h ajmp xianshi1 ;******** sjw: inc r3 cjne r3,#0ah,xianshi1 ; 十進位 mov r3,#00h inc r4 cjne r4,#03h,xianshi1 ;三進位 mov r4,#00h xianshi1:acall show mov ie,#8ah ;打開TO,T1中斷 setb tr0 ;使T0開始計時 ret ;********************************************* ;TO產生中斷計時子程序 dingshi:mov th1,#0ffh ;T1賦初值(可任意值) mov tl1,#0feh mov th0,#3ch ;T0賦初值(定時0.1s) mov tl0,#0b0h inc r6 cjne r6,#0ah,dings0 ; 十進位 mov r6,#00h setb et1 setb tr1 inc r5 cjne r5,#3ch,dings4 ; 60進位 mov r5,#00h inc r1 cjne r1,#0ah,dings4 ; 十進位 mov r1,#00h inc r2 cjne r2,#06h,dings4 ; 六進位 mov r2,#00h cjne r4,#02h,sjw ;判斷R4是否為2 ;******* ;二十四清零 inc r3 cjne r3,#04h,dings4 ; 四進位 mov r3,#00h inc r4 cjne r4,#03h,dings4 ; 三進位 mov r4,#00h ajmp dings4 ;******* sjw: inc r3 cjne r3,#0ah,dings4 ; 十進位 mov r3,#00h inc r4 cjne r4,#03h,dings4 ; 三進位 mov r4,#00h dings4: acall show dings0: reti ;********************************************* ;T1中斷子程序 ds: clr tr1 acall delay ;延時約0.5s ;******* ;R3加10 mov a,#0ah add a,r3 mov r3,a acall show ;******* ; R3減10 mov a,r3 clr c ;特別注意在減法操作時應清除CY標志位 subb a,#0ah clr c mov r3,a reti ;********************************************* ;顯示子程序 show: mov dptr,#Tab mov 70h,#04h ; 顯示的位數 mov r0,#01h ;先輸出R0值 led: mov 71h,#08h mov a,@r0 movc a,@a+dptr setb p1.1 ;P1.1 時鐘信號 tart: rlc a nop mov p1.0,c ;P1.0 數據信號 nop clr p1.1 nop setb p1.1 djnz 71h,tart inc r0 ;進行加1,分別輸出R2,R3,R4的值 djnz 70h,led ret ;********************************************* ;延時約20ms子程序 delay0: mov 75h,#4eh loop01: mov 76h,#0ffh loop02: nop djnz 76h,loop02 djnz 75h,loop01 ret ;********************************************* ;延時約0.5S子程序 delay: mov 74h,#03h loop0: mov 73h,#0ffh loop1: mov 72h,#0ffh loop2: nop djnz 72h,loop2 djnz 73h,loop1 djna 74h,loop0 ret ;********************************************* ; 本表為顯示數據表 Tab: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;“0,1,2,3,4,5,6,7,8,9” db 0bfh,86h,0dbh,0cfh,0e6h,0edh,0fdh,87h,0ffh,0efh ;帶有小數點顯示的“0,1,2,3,4,5,6,7,8,9” ;********************************************* end