;程序說明 ;所用RAM內存單元說明: ; 個 十 百 千 - L/P ;P|50 |51 |52 |53 |54 |55 |56 |57 |58 |59 |5A |5B |5C |5D |5E |5F | ;L|60 |61 |62 |63 |64 |65 | | | | | | | | | | | ; |十進制區 |LED碼 |計數區(56~59 | ;5A:存放當前狀態(55或65);5B:存放當前閃爍段(50~53或60~63) ;5C:計數1 5D:計數2
;按鈕組: ; P3.0(左移) P3.1(右移) P3.2(加1) P3.3(減1) ; P3.4(狀態切換) P3.5(啟動/停止)
;顯示數碼管:(6段 共陽極) ;P0.0~P0.7(A~DP) P2.0~P2.5(COM1~COM6)
;程序源碼開始處: org 0000h jmp start org 30h start:
;初始化數據 MOV 50H,#8H MOV 51H,#1H MOV 52H,#8H MOV 53H,#0H MOV 54H,#0BFH MOV 55H,#47H
MOV 60H,#9H MOV 61H,#9H MOV 62H,#9H MOV 63H,#9H MOV 64H,#0BFH MOV 65H,#0CH
MOV 5AH,#55H MOV 5BH,#50H MOV 5CH,#50h MOV 5DH,#30h
;初始化電機端口 mov p1,#0ffh mov 70h,#25 ;初始化按鈕端口 setb p3.0 setb p3.1 setb p3.2 setb p3.3 setb p3.4 setb p3.5
clr p2.0 clr p2.1 clr p2.2 clr p2.3 clr p2.4 clr p2.5 setb p2.6
;按鍵掃描子程 zc_key: key_p30:lcall zc_xs jb p3.0,key_p31 lcall zc_xsys jb p3.0,key_p31 mov a,5bh anL a,#00001111b ;取低4位 cjne a,#3h,key_l jmp key_p31 key_l: inc 5bh mov 5ch,#50 mov 5dh,#50
key_p31:lcall zc_xs jb p3.1,key_p32 lcall zc_xsys jb p3.1,key_p32 mov a,5bh anL a,#00001111b cjne a,#0h,key_r jmp key_p32 key_r: dec 5bh mov 5ch,#50 mov 5dh,#50
key_p32:lcall zc_xs jb p3.2,key_p33 lcall zc_xsys jb p3.2,key_p33 mov r0,5bh mov a,@r0 cjne a,#9,key_inc jmp key_p33 key_inc: inc @r0
key_p33:lcall zc_xs lcall zc_xsys jb p3.3,key_p34 lcall zc_xsys jb p3.3,key_p34 mov r0,5bh mov a,@r0 cjne a,#0,key_dec jmp key_p34 key_dec: dec @r0
key_p34:lcall zc_xs lcall zc_xsys jb p3.4,key_p35 lcall zc_xsys jb p3.4,key_p35 jnb p3.4,$ mov a,5ah cjne a,#55h,key_zh mov 5ah,#65h mov 5bh,#60h jmp key_p35 key_zh:mov 5ah,#55h mov 5bh,#50h
key_p35:lcall zc_xs jb p3.5,key_ret lcall zc_xsys jb p3.5,key_ret jnb p3.5,$ mov 5ah,#65h ;到根數計數狀態 mov 5bh,#60h mov 56h,50h mov 57h,51h mov 58h,52h mov 59h,53h lcall zc_motor key_ret: jmp key_p30
;顯示掃描子程 zc_xs: mov dptr,#TABLE led_x5: mov r0,5ah setb p2.5 mov p0,@r0 lcall zc_ys clr p2.5
led_x4: dec r0 setb p2.4 mov p0,@r0 lcall zc_ys clr p2.4
led_x3: dec r0 mov a,5bh anl a,#00001111b cjne a,#3,$+9 djnz 5ch,led_x2 lcall zzc_dec5d setb p2.3 mov a,@r0 movc a,@a+dptr mov p0,a lcall zc_ys clr p2.3
led_x2: dec r0 mov a,5bh anl a,#00001111b cjne a,#2,$+9 djnz 5ch,led_x1 lcall zzc_dec5d setb p2.2 mov a,@r0 movc a,@a+dptr mov p0,a lcall zc_ys clr p2.2
led_x1: dec r0 mov a,5bh anl a,#00001111b cjne a,#1,$+9 djnz 5ch,led_x0 lcall zzc_dec5d setb p2.1 mov a,@r0 movc a,@a+dptr mov p0,a lcall zc_ys clr p2.1
led_x0: dec r0 mov a,5bh anl a,#00001111b cjne a,#0,$+9 djnz 5ch,led_ret lcall zzc_dec5d setb p2.0 mov a,@r0 movc a,@a+dptr mov p0,a lcall zc_ys clr p2.0
led_ret:ret
zzc_dec5d: djnz 5d,der5d_ret mov 5ch,#50h mov 5dh,#30h der5d_ret: inc 5ch ret
;長度計數子程 zc_leng: mov 5ch,#1 mov 5dh,#1 lcall zc_xs mov a,56h jz leng_57h dec 56h ret leng_57h:
mov a,57h jz leng_58h dec 57h mov 56h,#9 ret leng_58h:
mov a,58h jz leng_59h dec 58h mov 56h,#9 mov 57h,#9 ret leng_59h:
mov a,59h jz leng_0 dec 59h mov 56h,#9 mov 57h,#9 mov 58h,#9 ret leng_0: mov p1,#0ffh mov 56h,50h mov 57h,51h mov 58h,52h mov 59h,53h clr p2.6 lcall zc_root lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_root lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_root lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys lcall zc_xsys setb p2.6 lcall zc_xsys ret ;根數計數子程 zc_root: lcall zc_xs mov a,60h jz root_61h dec 60h ret root_61h: lcall zc_xs mov a,61h jz root_62h dec 61h mov 60h,#9 ret root_62h: lcall zc_xs mov a,62h jz root_63h dec 62h mov 60h,#9 mov 61h,#9 ret root_63h: lcall zc_xs mov a,63h jz root_0 dec 63h mov 60h,#9 mov 61h,#9 mov 62h,#9 ret root_0: mov p1,#0ffh ljmp zc_key
;電機運行子程 zc_motor: mov 5ch,#1h mov 5dh,#0fh
motor_r:mov r3,#00 run_1: mov dptr,#table_zz mov a,r3 movc a,@a+dptr jz motor_r mov p1,a mov a,70h jz run_2 dec 70h run_2: lcall zc_leng inc r3
jb p3.5,run_1 lcall zc_xsys jb p3.5,run_1 mov p1,#0ffh jnb p3.5,$ mov 5ch,#50h mov 5dh,#50h jmp zc_key ret
;顯示延時子程 zc_xsys: mov r3,#10 xsys_d1:lcall zc_xs djnz r3,xsys_d1 ret ;延時子程 zc_ys: mov a,70h add a,#10 mov r7,a ys_d1:mov r6,#15 djnz r6,$ djnz r7,ys_d1 ret ;延時子程 zc_ys2: mov r7,#100 ys_d11:mov r6,#15 djnz r6,$ djnz r7,ys_d11 ret ;下料延時 zc_lys: mov r2,#25 lys_1: mov r4,#25 lys_2: mov r6,#255 djnz r6,$ djnz r4,lys_2 djnz r2,lys_1 ret
;數碼管數據表 TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 0CH,47H,0BFH ;電機正傳 table_zz: db 3ch,69h,0c3h,96h db 00
end ;源程序結束
這是我 的自動下料機程序,寫的很凌亂,不過也湊合能用 |