專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

我的第一個(gè)單片機(jī)程序—簡(jiǎn)易秒表

作者:fkede125   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2010年06月02日   【字體:


          程序做得很粗糙,功能還算齊全,也還沒進(jìn)行優(yōu)化,所以我只讓它保存15個(gè)數(shù)據(jù),如果能優(yōu)化一下數(shù)據(jù)結(jié)構(gòu),應(yīng)該可以保存更多數(shù)據(jù),分兩種模式,0和1模式。也沒有計(jì)算誤差,每次暫停會(huì)有少于1MS的誤差,開始計(jì)時(shí)也有少于1MS誤差。

           寫了好幾天,往往都是因?yàn)槠渲幸粋(gè)單詞寫錯(cuò),害得我弄上他幾個(gè)小時(shí),比如就因?yàn)槲野袹C寫成了JB,害得我從昨天中午開始一直弄到今天,把程序改來改去,到最后才知道原來也就差一個(gè)單詞,今天做好了,不想改了,也不用優(yōu)化了,簡(jiǎn)易秒表嘛,要求也不是很高的,做出來,交給老師檢查,希望過關(guān)

        說一下功能吧,最左邊復(fù)位鍵復(fù)位,中間鍵開始鍵,在復(fù)位被點(diǎn)后中間鍵沒被點(diǎn)前,右邊鍵改模式(0和1兩種模式,0是單人模式,記錄啟動(dòng)后開始鍵點(diǎn)擊間隔,就是這次點(diǎn)擊減去上次點(diǎn)擊記錄下來,1模式是多人模式,記錄啟動(dòng)后每次點(diǎn)擊開始鍵時(shí)間),開始鍵是啟動(dòng)秒表的按鍵,在秒表啟動(dòng)后是記錄時(shí)間的按鍵。啟動(dòng)后,右邊鍵為暫停鍵,暫停后可以點(diǎn)中間鍵繼續(xù)計(jì)時(shí)。暫停后也可以再點(diǎn)暫停鍵查看記錄的數(shù)據(jù)。只能記錄15個(gè)數(shù)據(jù)哦!

 

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP DING
ORG 0030H
MAIN: MOV R7,#28H;定時(shí)器中斷40次,記下一個(gè)時(shí)間單位1次是250US,
MOV SP,#30H
MOV R0,#40H
MOV R1,#32H
MOV R5,#00H
QING0: MOV @R0,#00H
INC R0
DJNZ R1,QING0
MOV IE,#82H
MOV TMOD,#02H
MOV TH0,#06H;定時(shí)器值
MOV TL0,#06H
SETB TR0
CLR IE.7
CLR 00H
CLR 01H
CLR 02H
CLR 03H

XIAN: MOV P1,#0FFH
MOV A,P1
JB ACC.0,JIANGPAN
MOV A,50H
CJNE A,#00H,NONG
LCALL AN1
NONG: MOV 50H,#32H;定義鍵盤延時(shí),延時(shí)時(shí)間為顯示程序運(yùn)行一次所需時(shí)間*定義數(shù)值
JIANGPAN: MOV A,50H
CJNE A,#00H,NONG2
SJMP NONG3
NONG2: DEC 50H
NONG3: MOV A,P1
JB ACC.1,JIANPAN1
MOV A,51H
CJNE A,#00H,NONG1
LCALL AN2
NONG1: MOV 51H,#32H;定義鍵盤延時(shí),延時(shí)時(shí)間為顯示程序運(yùn)行一次所需時(shí)間*定義數(shù)值
JIANPAN1:MOV A,51H
CJNE A,#00H,NONG8
SJMP NONG9
NONG8: DEC 51H

NONG9: MOV R3, #02H
MOV R0,40H
MOV R2,#0FEH
CLR   00H
MOV R4,#00H
XIAN1: MOV A,R0
MOV B,#0AH
DIV AB
MOV R0,A
MOV A,R2
RR A
MOV R2,A
MOV A,B
MOV DPTR,#TAB
JNB 00H,XIAN2
CLR 00H
ADD A,#0AH
XIAN2: MOVC A,@A+DPTR
MOV P0,#0FFH
MOV P2,R2
CPL A
MOV P0,A
INC R4
DJNZ R3,XIAN1

CJNE R4,#06H,XIAN3
MOV R3,#02H
MOV R0,43H
SJMP XIAN4
XIAN3: JNC WEI
MOV R3,#02H
CJNE R4,#04H,XIAN111
MOV R0,42H
SJMP XIAN4
XIAN111: MOV R0,41H
XIAN4: 
SETB 00H
LJMP XIAN1
WEI:LJMP  XIAN

AN1: JB 01H,AN11
SETB 01H
SETB 02H
MOV 40H,45H
MOV 41H,46H
MOV 42H,47H
MOV 43H,48H

SETB IE.7
LJMP AN12
AN11: 
SETB 02H

CLR C
MOV A,#0EH
SUBB A,4AH
JC MEINVA
SJMP MEINVA1
MEINVA: LJMP AN12

MEINVA1: MOV A,4AH
MOV B,#03H
MUL AB
ADD A,#52H
MOV R0,A
MOV @R0,40H
INC R0
MOV @R0,41H
INC  R0
MOV @R0,42H
MOV R1,#48H
CJNE @R1,#01H,MMMMG
LJMP DDDD
MMMMG: MOV A,4AH
CJNE A,#00H,MMMM
LJMP DDDD

MMMM: DEC R0
DEC R0
MOV A,R0
MOV R1,A
MOV R0,#45H
MOV R4,#64H
MOV A,@R0
MOV R3,A
MOV A,@R1
LCALL JIANFA
MOV @R1,A
JNC MMMM1
INC R1
MOV R3,#01H
MOV A,@R1
MOV R4,#3CH
LCALL JIANFA
MOV @R1,A
DEC R1
JNC MMMM1
INC R1
INC R1
MOV R3,#01H
MOV A,@R1
LCALL JIANFA
MOV @R1,A
DEC R1
DEC R1

MMMM1: INC R1
INC R0
MOV R4,#3CH
MOV A,@R0
MOV R3,A
MOV A,@R1
LCALL JIANFA
MOV @R1,A
JNC MMMM18
INC R1
MOV R3,#01H
MOV A,@R1
LCALL JIANFA
MOV @R1,A
DEC R1

MMMM18: INC R1
INC R0
MOV A,@R0
MOV R3,A
MOV A,@R1
LCALL JIANFA
MOV @R1,A

DDDD: 
MOV 45H,40H
MOV 46H,41H
MOV 47H,42H
INC 4AH
AN12: RET


JIANFA: CLR C
MOV 4FH,R3
CJNE A,4FH,JIANDA12
NOP
JIANDA12: JC JIANDA1
SUBB A,R3
SJMP JIANFA2
JIANDA1: ADD A,R4
SUBB A,R3
SETB C
JIANFA2: RET

AN2: JNB 01H,AN21
CLR IE.7
MOV 45H,40H
MOV 46H,41H
MOV 47H,42H
CLR 01H
MOV R5,#01H
LJMP AN22

AN21: JB 02H,AN23
MOV A,#01H
XRL A,43H
MOV 43H,A
MOV 48H,A
LJMP AN22

AN23: MOV 43H,R5
MOV A,R5
MOV B,#03H
MUL AB
ADD A,#4FH
MOV R1,A
MOV 43H,R5
MOV 40H,@R1
INC R1
MOV 41H,@R1
INC R1
MOV 42H,@R1
MOV A,R5
CJNE A,4AH,AN24
MOV R5,#00H
AN24: INC R5
AN22: RET

DING:  
PUSH 00H
PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
DJNZ R7,DINGSHI1
MOV R0,#40H
MOV R7,#28H;定時(shí)器中斷40次,記下一個(gè)時(shí)間單位1次是250US,
INC @R0
CJNE @R0,#64H,DINGSHI1
MOV @R0,#00H
INC R0
INC @R0
CJNE @R0,#3CH,DINGSHI1
MOV @R0,#00H
INC R0
INC @R0
CJNE @R0,#3CH,DINGSHI1
MOV @R0,#00H
DINGSHI1: POP DPL
POP DPH
POP PSW
POP ACC
POP 00H
RETI
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
     DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
END


關(guān)閉窗口

相關(guān)文章