|

楼主 |
发表于 2010-2-2 21:24:07
|
显示全部楼层
a_bit equ 20h ;个位寄存器1 r, z0 r5 ~. Q7 X$ g
b_bit equ 21h ;10位寄存器
( y( n8 J, x6 I7 H c_bit equ 22h ;百位寄存器
: ~* F% G$ ?0 n. L d_bit equ 23h
& D: o* }; ]- W: ~2 J n" U5 M e_bit equ 24h! e+ C6 D, H2 z$ w) j, v
f_bit equ 25h
w' Y1 s" N1 l7 D# G P5 w7 yorg 0000h6 b% U% C- \& {/ Y5 e/ A' y
ajmp star
4 t8 }# x' L: B0 _! i org 0020h
& S# M1 X6 e' w, S' o star: ;初始化把所有的位全部清零
% ]; H. @" `- F mov a,#00h
6 |. A! x2 n3 @- C! C! H: @& E mov a_bit,a
* r. f5 Y6 s# Z2 ] mov b_bit,a' q7 g0 C. ~# Z9 ^/ z0 @
mov c_bit,a5 [( X$ X+ M. m. e+ V
mov d_bit,a; z6 ^: g# {* X2 \$ ~: o
mov e_bit,a3 G. s" h5 i [" _4 s# Y r
mov f_bit,a
& r* y) l6 b" ystlop: acall display ;调用显示
' P+ \; A5 g; Z+ L5 J jb p3.2,stlop ;监测键盘,如果p3.2按下那么执行显示/ j) `$ x! ^) \6 r- S0 u1 w
we: acall display ;显示保持!
/ D, v2 F5 X- x2 Q! e) @ ]: O acall d1ms ;延时1ms避免键盘误动作5 `. M# ~1 g0 K2 f
jnb p3.2,we ;如果p3.2还没有放开继续延时2 C' G/ D- i1 h: B7 O
count: ;计算数据部分3 g( s0 X% E4 r3 {, p3 V2 N# o6 a
inc a_bit ;个位加10 M# j; u- }) {
mov a,a_bit! R0 w2 ^& z; o! T
cjne a,#10,stlop ;如果在10以内显示
. H8 Z2 Y. C, `5 c mov a_bit,#00h ;如果到了10则清除
7 E7 S$ p7 J, |5 y6 k inc b_bit ;10位加1
0 I0 S) z* f W6 C mov a,b_bit
5 ~7 s3 J. p% u5 p cjne a,#10,stlop ;如果在10以内显示* _. a6 L; S) r! F2 \
mov b_bit,#00h ;如果到了10则清除& i1 S# z7 n* ^2 c3 L) k8 S
inc c_bit ;百位加1
/ ~5 T' X) I5 t! m mov a,c_bit. M% k& u! X" C# o: f) K2 Q
cjne a,#10,stlop
' S2 B; b% t1 |$ O+ I% j# @' `* v mov c_bit,#00h
: q, u7 ?8 i$ z& k$ E inc d_bit
) h! g" c/ m/ n' u( X3 G% u5 @ mov a,d_bit
z% x% f- h; a8 n7 A$ h cjne a,#10,stlop1 O+ T s$ F; |4 m! z+ d6 N% n; Q
mov d_bit,#00h
8 e7 E- }% b+ v0 G# h: `9 v! ^ inc e_bit5 ^4 V& @" K. \& ~) T5 m
mov a,e_bit, n( ^; C3 A, m- b
cjne a,#10,stlop6 g- z( Z' @4 Z
mov e_bit,#00h
; J; V( `3 G+ B inc f_bit- B! `' k j' ?1 U
mov a,f_bit# W7 H9 H9 ?( k# `' K5 U3 _/ x
cjne a,#10,stlop1 a; G0 ?& t. b' d
mov f_bit,#00h, q1 F/ i( F! B2 F
ajmp stlop9 a: U# _$ z& _( k b/ ]
display: ;显示
" c% i9 z" b. N% v- ?! k mov dptr,#numtab ;送数据表??. q. z3 B2 Q* s+ y* O3 [. x
mov a,a_bit ;送个位数据
& Z& k0 i% w- }4 ~: D! P7 `' ^- E, l8 u MOVC A,@A+DPTR ;查表0 P; b5 |, P; N$ t
mov p0,a ;送p0口显示
' y$ M8 q2 g$ S' R( t; W clr p2.6 ;选中第一个数码管* q' U% ]8 h& ?. u$ |; K" M
acall d1ms ;显示1ms& |2 R$ S6 o9 ~" V3 A4 u0 \3 b
setb p2.6 ;关闭显示
0 j, f2 z2 M! g' }mov a,b_bit ;送10位数据
. s! `% b- |* a+ @ MOVC A,@A+DPTR ; 查表- c# j. ?) N; T7 d) S4 n. e% q
mov p0,a ;送p0口显示- q9 v$ U; Y# |
clr p2.5 ;选中第二个数码管; L! V- ?0 F( z/ ] K
acall d1ms ;显示1ms5 V& z* I+ e: `
setb p2.5 ;关闭显示0 b6 Q* z, s# h+ T7 L
mov a,c_bit
" D T" Y ]3 V. x4 b MOVC A,@A+DPTR
) _2 m2 l; p* j5 b( m* Q mov p0,a; T! h# l: @9 J, R
clr p2.4- J' w8 Z6 O5 M) @0 M" I, \' Y4 c2 [
acall d1ms0 _! L/ Y1 F6 f$ T+ ?
setb p2.4
% T( p. [% d+ c# jmov a,d_bit
5 W6 t* W0 G8 k MOVC A,@A+DPTR5 x. d; V8 X- D' }4 ?4 y0 O8 l
mov p0,a7 q" c0 h _6 p% u/ {/ C
clr p2.3
0 T: \& w- ?. I( x6 _6 d& z acall d1ms# v. o+ p! K) C9 B& Z2 B' Q
setb p2.3% p% o* K/ g* b! s: t: X
mov a,e_bit
3 L) ^9 {1 H! ~; j: y! w2 j& z MOVC A,@A+DPTR: y* P. A, Y" {8 o& @
mov p0,a
, R- G1 P! l0 V7 y( c! V clr p2.2* Q+ M6 P: g/ S$ Y J+ k
acall d1ms: Q/ X- a, F. X6 A' x
setb p2.23 N5 a5 p/ ^/ R+ [. X
mov a,f_bit
7 s% f8 Y8 H* V MOVC A,@A+DPTR" f0 |, f' a4 }! A( T" b3 X) K
mov p0,a
4 S T0 E) T( A! r. ~& T/ `9 p% m' [ clr p2.1
( [2 e) H( K' ] acall d1ms
& I& M: J# l) E( | C$ j setb p2.1
% f0 D( V ]- m9 E ret
) g, k# v4 L3 XD1MS: ;数码管延时
& r9 T9 P( {$ r MOV R7,#2
/ d1 ^, \( t; e. K6 e o- l$ F' { DJNZ R7,$
# @4 n q) z, _3 r z% V RET3 q; p O" Q2 M5 W0 J
;数码管代码表9 y D9 }, T' X7 I) ` ^; g" x
numtab: db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h. Q2 V) [5 y% O8 r2 |. W
;0 1 2 3 4 5 6 7 8 9
$ l+ O+ S% ^# F: k N6 K0 D end |
|