|

楼主 |
发表于 2010-2-2 21:24:07
|
显示全部楼层
a_bit equ 20h ;个位寄存器& O; t' {1 \5 ]% t: M
b_bit equ 21h ;10位寄存器% W( r- w' |7 C3 a* t. x
c_bit equ 22h ;百位寄存器+ v/ o/ ~6 X" B' z4 B+ I
d_bit equ 23h6 ?" V0 Y1 W4 G& d: h9 X
e_bit equ 24h
; K: u% f) F: j- B9 ]% N f_bit equ 25h4 d6 Z3 B1 n* P) ?
org 0000h) N7 \# F6 S* k6 G
ajmp star
5 n g+ A* N; }7 r* [, C$ y. t8 Y org 0020h8 _4 V5 f* L1 I& Q, W3 Q
star: ;初始化把所有的位全部清零
$ W( W' @/ r6 D* }5 L mov a,#00h
8 h2 G1 J& N( a' G mov a_bit,a
$ B: l9 A3 r) J! a! a mov b_bit,a* ]$ J0 s* `9 y: z$ e! p5 {
mov c_bit,a
5 y( \& }1 t: f6 A0 a' T mov d_bit,a/ q- F' z( i- v( b
mov e_bit,a) m- V7 ~3 L! |: ?
mov f_bit,a
5 _' m# W$ {& Z) Y: ystlop: acall display ;调用显示
8 N/ m8 c% ]$ c8 [- n jb p3.2,stlop ;监测键盘,如果p3.2按下那么执行显示% A3 ~! B7 ^7 o- R
we: acall display ;显示保持!+ `" U6 y* W5 M7 F6 [
acall d1ms ;延时1ms避免键盘误动作
5 g4 x1 b) I! v5 ?. _ jnb p3.2,we ;如果p3.2还没有放开继续延时) a; c+ h7 H* N- ^
count: ;计算数据部分
1 ^/ C, u& ~; _. [1 j. {" B inc a_bit ;个位加1: C, m& \" g: y& G( U
mov a,a_bit+ `( f+ W5 w- d7 l4 L/ p: b
cjne a,#10,stlop ;如果在10以内显示6 {3 M0 p0 s$ I9 N% \8 L
mov a_bit,#00h ;如果到了10则清除
7 k: D$ ?3 t2 i& @! ^# d" b inc b_bit ;10位加1
$ [8 ^3 {- L; B6 R% p; n mov a,b_bit$ W& w: U+ @5 x3 y
cjne a,#10,stlop ;如果在10以内显示4 e' _+ S5 E! |/ C( q+ e
mov b_bit,#00h ;如果到了10则清除
+ |) W7 J" H6 J# c8 w inc c_bit ;百位加1
?. v# t- v; c: }) o7 r# c5 c' c mov a,c_bit
$ J0 D' X: a* K g' d cjne a,#10,stlop) |" Y# [/ c' o- D" G
mov c_bit,#00h1 E" k( c5 b9 |! i* t
inc d_bit* k% a" p/ A7 U/ [; Q$ V% b
mov a,d_bit, r7 T, @' G2 q4 ]9 a v
cjne a,#10,stlop
* p y0 c( K* {' l mov d_bit,#00h
R! A2 } \. }1 y inc e_bit2 A* B7 q2 @8 r2 n- n5 a9 F
mov a,e_bit
: q9 J0 b/ S/ m" t6 n @ cjne a,#10,stlop7 R6 p C/ k9 ?/ [* R* C, N3 o
mov e_bit,#00h8 i2 Y2 b0 B3 p( D
inc f_bit
& e ?% `7 I/ \, K1 K @9 M$ a% \3 z mov a,f_bit
4 T' |& V0 N3 ~! Q# r cjne a,#10,stlop; v0 G; d5 l7 x, b
mov f_bit,#00h; h5 O2 f W% A" w @
ajmp stlop" a0 F6 @2 G) t
display: ;显示* w# `4 H4 w5 |" J$ z
mov dptr,#numtab ;送数据表??, K' ?1 ]4 O/ g
mov a,a_bit ;送个位数据
: P: d) S8 h, t+ q7 z$ E MOVC A,@A+DPTR ;查表
T1 W( ]* U* Q+ L8 g0 _ mov p0,a ;送p0口显示3 l8 R6 _$ [0 f7 U' Z9 n
clr p2.6 ;选中第一个数码管
& {6 K+ i. c4 a) ?: e6 ?6 I7 Y1 }8 k acall d1ms ;显示1ms) R! l& h3 P0 |7 B; j4 O w
setb p2.6 ;关闭显示
, G8 \0 ]) i/ U2 ?$ Mmov a,b_bit ;送10位数据! I0 A" o J3 x8 C/ y
MOVC A,@A+DPTR ; 查表: O6 \% ~ M9 N
mov p0,a ;送p0口显示4 S# J; _% H$ B
clr p2.5 ;选中第二个数码管9 t3 }6 E8 j# I9 }3 ~
acall d1ms ;显示1ms
) D4 [# w+ A5 [. b7 [) Z$ q, |; B setb p2.5 ;关闭显示
3 O+ ]; z( a4 o' Hmov a,c_bit U; G! q- ?+ Z
MOVC A,@A+DPTR
. `5 o; Q! b2 u7 m8 A mov p0,a
; m6 @& T0 j* a+ i7 W" j5 h clr p2.4
% M4 x; k! V1 x- @ acall d1ms
: _" c8 y* R- Z4 N- C0 ?, j5 a setb p2.4
* z$ L1 o: x+ a+ U9 }' Omov a,d_bit. F. z e6 E$ l2 q) a2 X
MOVC A,@A+DPTR
1 n* Z* T, n: F mov p0,a
/ v5 S$ B& K, h: D* g clr p2.3
1 W; Z' j" z& _3 p1 F: i+ d acall d1ms
1 b# R O" S! X, h4 c* P; u setb p2.3
1 H" ~1 m \! }, j$ e, ~9 N' l3 ^7 Wmov a,e_bit
4 K/ J0 X' e ^6 m6 p6 w MOVC A,@A+DPTR
1 n7 T* A e/ s& w mov p0,a% ^- l9 t' j U
clr p2.28 [2 @1 u/ j. A- }
acall d1ms
; S3 y& t; @0 E" j3 e1 d+ w" h setb p2.2
* i. s' s8 t/ X3 E# _% G3 I8 F3 @3 imov a,f_bit3 {( r& m; x8 x V& P2 T$ r t
MOVC A,@A+DPTR: g( j, E+ y+ L5 o! c O
mov p0,a. G ^0 P% C/ d- X: Z
clr p2.13 A& [3 J; T. d5 x! u; q
acall d1ms
P' z% ^4 V: Q& \; c setb p2.1+ r. T6 m* [) O( g6 x
ret# Z( b+ t( s: [2 v! C! a
D1MS: ;数码管延时
& E: |: i* Q; K" j: R2 e+ e, V% J; ^ MOV R7,#2( k4 a$ l5 `9 G; A: z
DJNZ R7,$3 b; F5 u$ z& {
RET9 u- i) Q3 h8 `! x% s: u4 u K
;数码管代码表3 U) @) T4 r4 ]) b2 W0 s
numtab: db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h
; u" T. p; I: i5 p$ ] ;0 1 2 3 4 5 6 7 8 9# j0 b* @2 B6 @, q
end |
|