|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用8051与1601LCD设计的计算器 带仿真和汇编源程序% p) E% o! P$ ?) V1 q4 ~
0 a- m5 F5 u& P" X/ c% Q3 b- e6 J) K- U# u
- s' P; B* f$ a1 ]! q' d. E: }1 q s5 h
用8051与1601LCD设计的计算器仿真原理图如下:# S/ Y2 e6 G j' S5 b" n- I& W# Q
2 X& k2 ?" V* q% W+ F $ N2 F1 Y2 k8 X0 i! c9 F
& X# o& v4 I9 [: c; s+ V
部分汇编源码预览:: S4 G# Y( R7 X! ~2 G
& N0 a% d- F( K& c% H9 a
8 E; g+ I/ k3 o, p/ B& e* r, C
/*******************************************************************************) M- k9 @( c4 ^# f4 l
************ LABCENTER ELECTRONICS ************
% c9 `; ^% ?8 {************ Proteus VSM Sample Design Code ************
7 _3 u0 V) J, |3 F************ Integer Calculator ( 2K Code Limit) ************
) m+ v! F3 T# i- w0 a; s*******************************************************************************/
8 N" q/ b& U, ]8 l/ ^3 [5 \* r8 E% G ?0 M1 P( {3 h
4 p8 M7 L5 w. d+ M% W- Z. a; g4 INAME KEYPAD
4 ^- j9 e0 R) e+ c) t5 r) O d; This routine will read a character press from the keypad and return it in R7.
9 Y: V1 g: `6 }9 M" d+ O& j2 I4 z+ f) ]8 X j, s
' W+ ~' e }8 b1 o" y; Y2 V' V;Set up Segments for the Input Routine - No parameters.+ Y. v& z$ K+ w9 j
?PR?input?KEYPAD SEGMENT CODE2 D4 A0 \0 G' r
PUBLIC input% o! @8 f; v' H5 F- @! P3 J
?DT?input?KEYPAD SEGMENT DATA0 t$ _1 _- X% v+ G E
- P! x7 O$ q; @; h( }
) I6 F, V; j5 G+ F. D% r
RSEG ?DT?input?KEYPAD ; Local Variable Segment for Output Routine.' Z7 |8 o8 s7 E" f3 @9 k( l: U- ^
6 ~2 }2 J7 s7 C" f
+ U, I% S$ g6 d2 c ] |* B3 C/ Z
KEY_ROW1 equ 0EFh* `6 ^6 P1 U' r2 _0 T
KEY_ROW2 equ 0DFh1 v! q. k$ z/ ~) L9 k/ X3 \
KEY_ROW3 equ 0BFh" P, h. T9 v, D: o* b% T1 S
KEY_ROW4 equ 07Fh+ n3 Z: j3 P* f) h
* m! k1 s+ j" n# G9 h9 w
) s1 M' J. W, {& t" V/ D9 a
keyflags: ds 16& {! Y8 i8 w: N9 P
0 W: H; s% f, V4 i, e6 l0 f
' L1 T* @& W- l
RSEG ?PR?input?KEYPAD ; Code Segment for Output Routine.
0 S0 C' s# m! O# u7 @input:) Y5 D7 }6 t' X
2 P8 L: P' S$ O+ |) p& r+ R9 ]6 b4 C7 `& j _- o
keyscan:push DPH7 P: n! H2 J7 G/ W( _7 O5 J' B
push DPL8 x( h2 C, k- G
* p& v$ q8 v7 W0 s5 Q7 N+ q mov R0,#keyflags ; R0 addresses the key toggle bytes
% z! y* W( Y+ k" ?; t1 h mov R1,#KEY_ROW1 ; R1 address the keyboard row address, B* E5 L) s9 h' `0 q
mov R2,#4 ; R2 counts rows+ V' m4 F/ O4 E9 T
ksrow: mov P2,R1 ; Set row address to port P23 c+ c$ U: N% W2 ^1 ^6 p. R
nop% `: ]+ C7 R. `/ v/ r2 a
mov A,P1 ; Read column data from port P1
5 ]9 Z9 d9 ~. j# x+ v; \+ t mov R3,#4 ; R3 counts keys per row
, S/ F, J, x+ x7 m& z anl A,#3Fh
5 [8 [" X0 a( R sks0: rrc A ; Move next bit into carry' Z/ y8 m! f7 B% |! W. J
mov R4,A ; R4 preserves the row data
* w9 ~8 o3 [" B! W jc ks1 ; Jump if key not pressed/ o' g' n0 h5 T( S1 q2 S4 p
mov A,@R0 ; Test if key already pressed
) [# V b+ O; s3 R! I mov @R0,#1 ; Flag pressed anyway, [1 T/ Y |) L
jz ksnew ; Jump if key newly pressed, L2 c- V/ l" k
jmp ks2( V) ^1 @6 p. E. u. y
ks1: mov @R0,#0 ; Flag key as not pressed
* o. t( X \) [ks2: inc R0 ; Loop for next key in this row. I& u9 ~5 c5 l" h' o4 g. ~5 P
mov A,R4
3 {0 O8 S: e) I E8 t0 M% y* Q$ C djnz R3,ks0
+ ~; ^$ k6 m: [% z( b8 |- q# Y2 T0 @9 B1 d
/ S" `% r n/ G1 {! W1 S
mov A,R1 ; Jiggle R1 to address next row
" S8 c: m, R2 ?. I7 b; `: e; \. g, V' V- ? rl A
% f% M% P3 g' X1 G- U mov R1,A1 C& X- q- [$ B
djnz R2,ksrow$ ^" x% Z% X- U/ p* p6 p
# ^" z- P* F7 u* ?' x' l" b0 H' `1 F; B; V3 j. d
clr A
. l+ N( x5 W( b, U4 O" V* i mov R7,A ; Return zero - no (new) key press. / A" `' l: {' `# s) @, r
jmp ksend3 W. @# V6 K$ n( ^% T3 h
$ {, b4 p" _0 h4 jksnew: mov DPTR,#keycodes ; We've found a new key since last time:' Q0 T7 ?9 H2 I, u+ t- X `
mov A,R0 ; The key flag address (ordinal) is in R03 _; P6 @, L! h
clr C
9 n7 H* ]$ u3 A" Z! `, v2 e# q6 a subb A,#keyflags& r# C$ X# m; q
movc A,@A+DPTR/ ]2 W( Q+ Z& {$ |
mov R7,A ; Move the Key into R7 to be returned.
4 S, U/ }8 s2 q/ R0 j: }4 M/ G+ {ksend: mov P2,#0FFh' R6 L1 Y/ J& H e$ w
pop DPL
- l @ i; L7 k) p pop DPH! R" y& K j9 _# @7 |- I
ret
2 R; @0 P4 w$ [* c: T' b! F! ^. V _' [
3 \* c6 P2 S* `
;Data tables for returned row bits
) w9 j4 z6 J# q9 L! n/ i/ F: S3 w& mkeycodes:5 R, A7 G0 O6 u7 V s
db '7','8','9', '/' t" W% M+ V( v' a
db '4','5','6', '*'
- o1 G* v& v, K+ a# c db '1','2','3', '-'
( C8 C; V0 w# {2 _2 n% p db 'C','0','=', '+'
% g$ E; `+ a* e8 U" f* Y) r: o) W2 n- N
( z" e6 t' g0 v+ S
END
: e- m' U' M( ~- |. x- _# ` A4 C* v' T6 R, r
完整源码和仿真工程文件下载:
& N! v& Z% e6 Z6 N
0 w, x8 r F' o
4 q( j( P& w4 M' o$ b1 p( m |
|