|
楼主 |
发表于 2010-2-2 21:24:07
|
显示全部楼层
a_bit equ 20h ;个位寄存器4 [. E c5 q9 n
b_bit equ 21h ;10位寄存器2 v$ ~# C1 W, N: T% i0 C
c_bit equ 22h ;百位寄存器% t4 {* v; |( b1 |9 \$ s( P
d_bit equ 23h
- }. B; i/ L7 \ e_bit equ 24h# N! H5 t9 |3 B$ g1 `
f_bit equ 25h; m! D* d. K( B$ r) O' \5 m
org 0000h
% k9 Q7 c: O+ @/ F/ _. v' | ajmp star# f4 z9 A) M" Q9 Y& g4 }* |
org 0020h0 A3 Z( k+ R: ]2 d9 s" Q# Z( g3 P
star: ;初始化把所有的位全部清零3 }1 u/ {( e- ~1 f7 T% ~) k9 }
mov a,#00h8 |) ?3 h# t* `& ^
mov a_bit,a
4 m' T1 y! G% B mov b_bit,a6 V9 N$ H! B5 u2 k% m
mov c_bit,a9 M) N0 {& P9 ~ y' B2 ~
mov d_bit,a
/ m1 a6 }3 P5 E# } mov e_bit,a
8 V6 }& h6 q8 O; {& r mov f_bit,a
' s5 i. N' B9 B* p- jstlop: acall display ;调用显示
# ~$ }9 b/ j. e0 a jb p3.2,stlop ;监测键盘,如果p3.2按下那么执行显示/ |/ b# F6 n/ l: w) |1 V5 V
we: acall display ;显示保持!* Z0 i& F+ i% i+ {5 A$ c/ {
acall d1ms ;延时1ms避免键盘误动作
/ I, ^( k! x" C" n/ k jnb p3.2,we ;如果p3.2还没有放开继续延时
8 i; u! T! S5 Acount: ;计算数据部分
0 P/ \" u) P7 L! q' \; y7 c inc a_bit ;个位加1
8 [% S7 ]( [# X: s6 O mov a,a_bit! W8 q, T# U5 B9 `/ w( h
cjne a,#10,stlop ;如果在10以内显示0 b3 _8 t; m1 T3 H
mov a_bit,#00h ;如果到了10则清除
; [- F: L" K8 p" s$ _9 [ inc b_bit ;10位加1
4 q6 z/ o" w% q0 h4 d mov a,b_bit
. J8 q0 E6 L1 c9 ]& u cjne a,#10,stlop ;如果在10以内显示; B! Q$ a8 [! z' }* D" c
mov b_bit,#00h ;如果到了10则清除) \9 t1 B# K B2 _) z# D
inc c_bit ;百位加12 r1 L/ \" b+ y) [
mov a,c_bit+ ~+ H2 J' w7 h& [
cjne a,#10,stlop; l9 i4 `/ _' ]4 m) ^
mov c_bit,#00h* o) y1 F9 E3 { t) {- s2 F
inc d_bit
( c0 p' f% L7 |: x1 {2 j mov a,d_bit. d; \) Z: w' w- K& U7 m- T
cjne a,#10,stlop
2 F0 J8 O# `6 a2 f. M. W mov d_bit,#00h5 ]" ^, B3 D; q. E) d1 C L, l
inc e_bit' `- n9 h: I p9 I# C
mov a,e_bit
- q4 {/ D- k5 v# f- L cjne a,#10,stlop
3 v; _9 [6 K# b. x mov e_bit,#00h
) h u& {3 l% H; q& p inc f_bit" D' \$ U$ n; f0 q8 t# b
mov a,f_bit& L1 i' Z+ o+ W1 {' S7 f& G
cjne a,#10,stlop
- L! H! V: b4 T% y2 M- h' [: U mov f_bit,#00h. u) k% i" U8 ^8 u, S0 c
ajmp stlop4 ^6 ~8 j6 I3 U0 P" f8 i% X/ q( F" _
display: ;显示* Z4 i+ @. D" n9 h! q7 w; p
mov dptr,#numtab ;送数据表??
' R! E, Z/ L* E' lmov a,a_bit ;送个位数据1 l" W& N/ w W
MOVC A,@A+DPTR ;查表( F; f1 a* @3 I7 z+ }
mov p0,a ;送p0口显示
. N6 I: S0 d# [/ o clr p2.6 ;选中第一个数码管
: y7 I- U0 Q& C+ v1 o( C acall d1ms ;显示1ms
) s) e0 x& {) q8 o* `- }! g setb p2.6 ;关闭显示7 e' D4 h1 w% \
mov a,b_bit ;送10位数据! s+ e* h: w- W( `- C! Q
MOVC A,@A+DPTR ; 查表. s" f( u- z# |/ B
mov p0,a ;送p0口显示3 H; F8 z, L7 N' d
clr p2.5 ;选中第二个数码管
# Y, {0 M r1 ?% H. o acall d1ms ;显示1ms
8 J- B; b% L G& f! T% K2 R setb p2.5 ;关闭显示' N& O8 b/ M, S" a
mov a,c_bit
& W. x' a9 j( V, \ MOVC A,@A+DPTR( v' b( m* Z# `/ k2 x& z
mov p0,a8 _" @/ R. q! {* R
clr p2.4# [1 R! C+ k6 R9 ]' B! x5 |
acall d1ms0 v$ y. U9 E) I, Y o9 F: m
setb p2.4
( r: M& Z: X3 \) B9 L& omov a,d_bit
8 A) o. ?. u' l- b) ~. t MOVC A,@A+DPTR
: |2 F) v7 _4 A1 ]1 I mov p0,a
* Y4 j. w7 G. c& T1 q( \$ c4 e clr p2.3
3 e- k, O9 q/ @: |1 I/ H acall d1ms
" |! S/ t! G7 Z setb p2.3$ m5 e2 k9 y6 v+ D$ r3 |
mov a,e_bit- D( w7 }; y! C1 c% x
MOVC A,@A+DPTR8 A* q- Z7 F& ~
mov p0,a1 z, g" N! T$ o0 k
clr p2.2
8 a3 b2 K' t. M+ ] c0 ^ acall d1ms! o+ M: t7 p: }* l
setb p2.2
& u3 B7 B- n* F+ rmov a,f_bit3 |3 M% i2 k7 l- I) Q/ y0 G5 s
MOVC A,@A+DPTR: X/ U3 B% c6 F! l: v6 V1 w. ^
mov p0,a ^" } ]7 i) Z' J9 O H
clr p2.1
6 ~ e6 H/ }8 Y4 w acall d1ms/ k" ?3 c4 }# s- t
setb p2.1
, D, p" E" E5 e& K, n5 b; O ret& k4 T' o" K% _' E
D1MS: ;数码管延时' L* X( Y( f, p8 s
MOV R7,#2. C7 X' L+ ^3 d1 J, x+ }
DJNZ R7,$! G N) b3 z: ?5 A
RET
) G, g, D3 G" ]% n ~ ;数码管代码表# V* r6 R& o4 P5 W9 O0 L/ _
numtab: db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h
; B7 U. p. F# ~: b# t- g ;0 1 2 3 4 5 6 7 8 95 M9 H, a7 g& k8 {
end |
|