|

楼主 |
发表于 2010-2-2 21:24:07
|
显示全部楼层
a_bit equ 20h ;个位寄存器
1 F- O0 T; F* {7 \, k b_bit equ 21h ;10位寄存器$ d* a) F+ u3 |$ ]
c_bit equ 22h ;百位寄存器
& `. K i& Z4 y- h d_bit equ 23h7 v' D" }! r, [; R3 U! ~
e_bit equ 24h/ r1 W4 u ?1 S: _
f_bit equ 25h
: C( K8 X" L4 t" porg 0000h
- N* B4 D& B% p3 o( B3 } ajmp star# o$ j$ U7 z8 W# g
org 0020h
! `1 W1 g! l8 D- U star: ;初始化把所有的位全部清零4 S% h! J, ?7 r- q1 w
mov a,#00h D# ]6 \+ y: Y. L: z
mov a_bit,a* L5 X; H7 d8 R2 P+ v2 l/ ~
mov b_bit,a
" }/ ?6 { v: s5 Q! Q8 V mov c_bit,a
. E/ P0 G! }) ^/ j" f, ~. j3 H mov d_bit,a
! G, ~9 ?* z8 b1 _* y# c mov e_bit,a
, u3 \: }' ~- c* D mov f_bit,a+ u8 A C. T+ d4 b; v- t$ _- P
stlop: acall display ;调用显示$ M7 W5 s, o n% V# C
jb p3.2,stlop ;监测键盘,如果p3.2按下那么执行显示
, Y. |. s2 A0 T, wwe: acall display ;显示保持!# l, R! H% P* T6 P3 B7 \6 ~# n
acall d1ms ;延时1ms避免键盘误动作2 R) H' X3 o- \( P2 T: b
jnb p3.2,we ;如果p3.2还没有放开继续延时
]6 n& m$ y& F3 B" z1 C8 mcount: ;计算数据部分7 A: q( ^( H# a) E
inc a_bit ;个位加17 ~2 J/ P' c- E" V) ^1 M* {9 \4 t1 J, m
mov a,a_bit1 f0 i5 Q: Q, `- X6 W
cjne a,#10,stlop ;如果在10以内显示0 C' ?9 N" T- w: r3 ?6 v
mov a_bit,#00h ;如果到了10则清除% ^8 n+ |3 G2 r0 M
inc b_bit ;10位加1
& C0 K" q; S- v r9 Y4 K P mov a,b_bit
3 B& ?3 z& Q/ N8 j. {- C7 j& m- Q/ L: l cjne a,#10,stlop ;如果在10以内显示' B6 L9 \; }% i* R$ q+ n
mov b_bit,#00h ;如果到了10则清除* S; `0 }- k4 g8 R5 P- [
inc c_bit ;百位加1
2 r) }' s6 Z9 u3 I* B3 U* g mov a,c_bit' [! R! r+ B4 p, {' z0 P b" o
cjne a,#10,stlop) ?6 b' c& X* {# j6 D4 [, C$ y
mov c_bit,#00h' X% Z3 h* Q4 L
inc d_bit
2 e6 c X( x, t0 W; ~ mov a,d_bit' J- u- A- \0 i F2 a9 T3 ^
cjne a,#10,stlop: I" C, y. o+ m( J; R0 i0 P2 m
mov d_bit,#00h
& c' j' r7 r. z inc e_bit
" Y, ]( S/ e' f4 n) M4 _( L/ N mov a,e_bit, n; f @' H1 L9 l5 d5 B, F+ G
cjne a,#10,stlop
2 K7 h% q' \9 c$ c2 d; v mov e_bit,#00h7 z, K2 B: [9 g E- [+ D! D% I
inc f_bit- X2 C% H# X' Q/ g, y
mov a,f_bit1 W1 V$ v4 ~3 [# ?0 p. V. [
cjne a,#10,stlop
! S3 Q* O2 I5 V* C$ M0 X mov f_bit,#00h
9 S2 m3 p: h8 p ajmp stlop4 Y* _% P J5 \: T; f1 r7 @! S
display: ;显示
- w. U0 t3 [. m mov dptr,#numtab ;送数据表??) X+ N. n- q" h5 Y
mov a,a_bit ;送个位数据
) x3 { ~; u2 j0 R" `/ g% I MOVC A,@A+DPTR ;查表2 K1 _3 C; {, o, z) a4 [
mov p0,a ;送p0口显示
) K) X' t- Q/ U. [* z clr p2.6 ;选中第一个数码管
: Z7 i1 E0 a4 R6 n w" I acall d1ms ;显示1ms- H: I0 v2 {# g4 N2 j
setb p2.6 ;关闭显示" w4 P$ z, N. D% F2 I0 z; ~
mov a,b_bit ;送10位数据2 N* R6 n% U* O- B! [* M
MOVC A,@A+DPTR ; 查表* g! V- z u! X& L" o
mov p0,a ;送p0口显示5 t6 G, ^. B" b
clr p2.5 ;选中第二个数码管
1 w8 N* Z) o7 l$ Q acall d1ms ;显示1ms
( s, F' t! W, f- @& z9 ~$ c setb p2.5 ;关闭显示. F: h: H6 n2 Y# H
mov a,c_bit
# D b! c; ?$ u! {2 R" c$ s MOVC A,@A+DPTR
; d6 T& j0 `" u9 }, G* C( R2 s mov p0,a
$ M' ?4 P ?. B0 X0 I clr p2.4
- r# O. Q! K' q9 p, N( A acall d1ms9 M. i$ [- b( D3 P! y {4 k
setb p2.44 e1 H, i- i" y; L( ~; Y
mov a,d_bit' I+ e+ y) ?/ X/ M4 F3 i1 H
MOVC A,@A+DPTR M6 H! H4 o0 n
mov p0,a
1 m' {: G5 N0 O& F" d( w4 z clr p2.3" y% n: @& O" {$ c
acall d1ms
# e7 e8 E. k! n l setb p2.3
8 z5 u6 c" Y5 cmov a,e_bit
$ F( [) j, C( M# M9 q MOVC A,@A+DPTR0 Y" p# j, L: o7 y; z& P
mov p0,a
7 j* n5 f1 w; I- H8 D* t clr p2.28 [- _* J( J* D% B# c! U
acall d1ms
* T, m& J% c' g- p setb p2.23 k: l4 x- N& @+ ]7 C, b
mov a,f_bit
9 _: M* y% V Q9 _. w5 R MOVC A,@A+DPTR5 P! j: d; B/ O% q, m5 K( I. t$ l
mov p0,a1 v8 i( e( O- C4 h/ N- b! j1 @& ]- l
clr p2.11 M# ?9 E* Z s5 J
acall d1ms& {3 o% r# ], _! g
setb p2.1
% S3 k1 F6 _5 z$ H ret' t+ A( v2 U% s. u
D1MS: ;数码管延时
; \4 b% s0 _. q! P" Y4 a' f MOV R7,#2
J/ r6 e3 A9 o1 G* J DJNZ R7,$+ e* o5 Y) V+ V. M/ v
RET
% z3 n9 i* q, i ;数码管代码表
1 h, Q# h: N" l* cnumtab: db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h1 F+ n8 V2 V8 l A$ |. K: @/ E
;0 1 2 3 4 5 6 7 8 9
, B D4 u, W( q" C+ U0 g" q6 {; Q3 h end |
|