|

楼主 |
发表于 2010-2-2 21:24:07
|
显示全部楼层
a_bit equ 20h ;个位寄存器
% A/ f. x0 }6 A: V4 b8 G b_bit equ 21h ;10位寄存器
& m: _1 j; S% O7 ?7 W c_bit equ 22h ;百位寄存器
5 ]- \" D/ C% L4 M d_bit equ 23h) Y0 T. K$ V; D& b* V6 B, X, T
e_bit equ 24h
: z. A$ ` O2 R6 B( Z f_bit equ 25h+ ^# n* }* p+ H0 a5 V
org 0000h
4 M! D: B1 n" I/ Y/ B( H ajmp star; l- U+ x3 B6 g7 G2 ^. d" g$ J
org 0020h
7 n. o+ n, j3 a) Y) c; K7 y9 l star: ;初始化把所有的位全部清零
! L: i6 ^) C- g8 h mov a,#00h+ j! w9 C& R& n3 Y! y
mov a_bit,a7 w Y0 j# C( l4 ]
mov b_bit,a
9 |; U% q: d+ ^6 O mov c_bit,a
& l0 Q$ u: V& x8 v1 d mov d_bit,a& A& R8 M# V" d+ V
mov e_bit,a
6 [8 g$ ]+ Q' h mov f_bit,a2 x0 c1 D6 l% S2 H5 Y
stlop: acall display ;调用显示
0 r0 S% ~, F. n [3 b jb p3.2,stlop ;监测键盘,如果p3.2按下那么执行显示- N, |# n$ U6 o& M% t
we: acall display ;显示保持!
- Q& ?9 y {$ `, K& ^* o/ ? acall d1ms ;延时1ms避免键盘误动作
# V" Q7 I8 ?) h3 c3 c' W) p jnb p3.2,we ;如果p3.2还没有放开继续延时: ~2 s, E* V' b5 \7 }" p4 v
count: ;计算数据部分
- j( f0 d7 g8 Z inc a_bit ;个位加11 ` G7 k `! P* `1 Y: D+ h+ F
mov a,a_bit
7 @# h# f. `2 m9 `- i3 l4 _ cjne a,#10,stlop ;如果在10以内显示9 w% J1 g5 I/ x" B( L; K
mov a_bit,#00h ;如果到了10则清除" e/ O R& T+ \) {# O
inc b_bit ;10位加1
/ [! c: _( Y; U6 q0 S mov a,b_bit, ^: f4 b! ~* W; I1 T( q
cjne a,#10,stlop ;如果在10以内显示
" y' J4 n" F; ^- A6 c6 M" O* x mov b_bit,#00h ;如果到了10则清除 H+ S3 o4 K3 ]# o$ e; r& [
inc c_bit ;百位加1
8 S6 m% P0 ]" I0 g mov a,c_bit
4 g+ ~4 T% r: F( u/ g; V$ Q cjne a,#10,stlop7 H, S( x8 Y# @ W7 y, v
mov c_bit,#00h
4 z5 e$ C. j* e/ p' s1 T, c& V$ e inc d_bit7 f% p0 m; c i& G# U
mov a,d_bit. M' A& J3 L" I# z! W
cjne a,#10,stlop+ Y& i8 s k. |2 l
mov d_bit,#00h6 p" Q1 d) s. w' s; O
inc e_bit8 k8 h. g9 J; K; T2 E7 x: x) \
mov a,e_bit
/ c' p* A3 I8 P1 k9 n L4 r1 l cjne a,#10,stlop+ v4 Y4 @' ~( d
mov e_bit,#00h
( {9 I/ m4 x; Y6 @+ A* Z Y inc f_bit) {! I; _3 z$ U( c5 A
mov a,f_bit
7 v1 X6 T# _% h) B cjne a,#10,stlop4 l$ C0 I' k- g1 Y
mov f_bit,#00h" r+ }, {+ W( F/ J: l9 E/ H
ajmp stlop
+ g: y/ a8 e( s, cdisplay: ;显示
1 d9 v) [2 ?/ m" d8 T, _0 g mov dptr,#numtab ;送数据表??
( R$ J( [1 I u; F' f& K4 r( qmov a,a_bit ;送个位数据" C) c6 Q( u% g
MOVC A,@A+DPTR ;查表7 r& \' }1 j1 e8 g& t
mov p0,a ;送p0口显示
& G- [: V7 R+ l6 g clr p2.6 ;选中第一个数码管
) o$ w5 \ n8 j+ Q8 U acall d1ms ;显示1ms
+ A4 I( G6 F2 t: ~0 h1 E setb p2.6 ;关闭显示. R5 b0 M' ]9 j
mov a,b_bit ;送10位数据
9 b/ q: B7 n3 l# c) X( t MOVC A,@A+DPTR ; 查表' u; w# a2 D' _8 y. Y* R
mov p0,a ;送p0口显示! a) ], \3 Y; Y9 ?- R/ A
clr p2.5 ;选中第二个数码管
4 o0 r, t$ o- R8 Z" [: q( {' y acall d1ms ;显示1ms+ g, O0 j1 K0 Q' V: H8 v+ [7 }3 f
setb p2.5 ;关闭显示8 n' g) t( w: T8 s. j
mov a,c_bit$ n8 ?6 G+ j: M$ B8 @+ e
MOVC A,@A+DPTR
: c# P* i1 R4 p* d- ?# R0 K mov p0,a! n* W" M& o6 D4 M4 |2 ^& P
clr p2.4( z! D) k- {) ~
acall d1ms- [2 J* |8 h9 j: q5 A% G
setb p2.41 b% r3 J6 C; V2 K$ x
mov a,d_bit
0 l" W' V' a/ ` MOVC A,@A+DPTR
+ y: B% ^- ^: h mov p0,a( N V% G9 D. F& c
clr p2.3
0 z5 @ l; _/ u acall d1ms
7 d; v/ `3 X$ w% p9 |% n% H9 `. c setb p2.3; y. I' d1 U$ l* j; h
mov a,e_bit+ `7 g& x% h$ \' u! U9 W. T1 L! P
MOVC A,@A+DPTR
6 l3 _& n @7 V. P T3 N/ m1 A mov p0,a
% r4 G; c+ o; \ clr p2.2 E, [8 `6 m" z( x3 x, v2 s6 u/ t; g; m
acall d1ms# _2 D4 H) Z- Q6 q/ c( O) ?& P& v8 e
setb p2.2
; m2 L% o1 ~: gmov a,f_bit
/ O% y d" q$ I0 V, f7 w MOVC A,@A+DPTR
" [: H ?' N$ O: R+ d* Z mov p0,a
, i4 p3 t n1 R) `+ c3 u; z F clr p2.1$ N. t0 e+ [) Z: f" w* T5 B" n
acall d1ms0 ~* e3 a0 _! ?9 y
setb p2.1
/ L* w/ e! E) B* ~/ {3 n ret
3 i1 N! Z7 v* U! E4 P7 c7 }D1MS: ;数码管延时5 N, ? ?$ h; Z6 O* S7 P8 s" l
MOV R7,#2
0 V* o2 L2 d, P# g' c DJNZ R7,$( C y# H1 N! s9 z( o E
RET) R. B2 n& \% ?8 L
;数码管代码表
: I3 T8 }1 n$ k4 | r& cnumtab: db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h
4 ]2 s$ g( L5 s4 d2 g- z& z5 J5 G ;0 1 2 3 4 5 6 7 8 9
5 n, z- N* V1 _3 ]: H, {8 U, Q end |
|