找回密码
 注册
关于网站域名变更的通知
查看: 367|回复: 2
打印 上一主题 下一主题

用8051与1601LCD设计的计算器 带仿真和汇编源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-8 13:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
用8051与1601LCD设计的计算器 带仿真和汇编源程序7 V5 ~7 S- k1 n: D6 u

; `7 J1 k3 Q& [) T1 _! w' _2 r

) }9 y& E: k* K3 i- J7 h, N% f+ X. ~
, j# v+ U3 o( E: d% e( T( a* d
用8051与1601LCD设计的计算器仿真原理图如下:' t4 ^* v- s8 H8 W; _# ^
2 H# M. T. f* }
) I5 L/ y( C, j: J) I

0 d8 b6 K9 y3 _% D; x! ?4 J  R0 C1 E部分汇编源码预览:

! O2 @/ B* W( h  ^. I+ l1 H; O9 ^) v1 l3 T0 L" A7 y6 l5 Y5 j

- t. L- P2 ]* S! |. K/*******************************************************************************
; ?( |5 ?6 z+ M2 y; z4 j************                 LABCENTER ELECTRONICS                  ************                              8 o8 s3 t/ p: p. W8 h4 o
************                Proteus VSM Sample Design Code                  ************                        
3 V1 E9 \" f1 ^( b/ M6 _************               Integer Calculator ( 2K Code Limit)                ************
; }- M: p; Y% x- r*******************************************************************************/
& K' v: c* A; x, [: S7 o
! \" ?" Z4 O* p7 I5 c! b( c
' k: J4 l2 ~/ o
NAME    KEYPAD1 m2 x4 i7 g" L* H3 P
; This routine will read a character press from the keypad and return it in R7.$ z& l5 o. o. @: P% u
1 o, X1 ?( I( N* k

; v/ ^& @% V1 A6 ~- f;Set up Segments for the Input Routine - No parameters.) L3 A: a9 K1 Z8 ~
?PR?input?KEYPAD               SEGMENT CODE
0 ?: z+ @. P' i3 y' X2 G* @        PUBLIC        input, n' j) ^7 o& F
?DT?input?KEYPAD               SEGMENT DATA
' O) U" U8 N6 G1 k! F" ?9 x& u, C# a2 c

6 t- a* E$ E# w5 S0 O( Y* `1 v% b; yRSEG  ?DT?input?KEYPAD                          ; Local Variable Segment for Output Routine.! |8 _1 t% y5 v7 w: l. c
2 O, x4 n' o( a( _: F# G9 l' X

* J% i7 X" \/ E; NKEY_ROW1        equ        0EFh
! M& z, r3 C+ F7 M+ OKEY_ROW2        equ        0DFh
3 M" Y5 D$ i& @6 JKEY_ROW3        equ        0BFh
. N- W* ~1 w' pKEY_ROW4        equ        07Fh% ~& L" W5 M5 r( }5 @
  Q4 a2 `1 R8 c( s8 z( w# p) l7 ~
; N8 e4 I$ C, a5 w
keyflags:        ds        16) _' ^( i- o& @% E2 A8 e' t  D& J9 n

* b9 x- j  T. V" q
" ^9 c. b$ X3 O3 \3 K
RSEG  ?PR?input?KEYPAD                          ; Code Segment for Output Routine.
4 T( [; P0 j2 D" Xinput:& [* E: e3 D( U) z. P
4 M! h! ?2 G+ @5 |1 z* C

; R6 m) `) S& S0 Q6 }' rkeyscan:push DPH
: S9 w+ X% `& A                push DPL: j4 {, X$ g$ }0 r9 \6 G
                ; ]) z# r: M1 Z( R& T- K
                mov R0,#keyflags                 ; R0 addresses the key toggle bytes: j; G% W# K0 V9 j* A
                mov R1,#KEY_ROW1                ; R1 address the keyboard row address/ G( M, B- a: J' `& W: A
                mov R2,#4                        ; R2 counts rows( a! G- q$ ~  M8 V" @
ksrow:        mov P2,R1                        ; Set row address to port P2: W) n/ ?  M% w9 p0 W  Q) r, t
                nop
6 @+ O7 b1 G) a                mov A,P1                        ; Read column data from port P17 `: S* r0 o* s3 W  v4 e: d
                mov R3,#4                        ; R3 counts keys per row
% N" Z6 t0 l4 @, J                anl A,#3Fh
' Q6 t, z* G- D# _ks0:        rrc A                                ; Move next bit into carry; X7 X1 i7 ~0 }) T' [, L5 f, Y
                mov R4,A                        ; R4 preserves the row data# u) x& `0 C* K, d: w7 q  r8 V
                jc ks1                                ; Jump if key not pressed) Z4 I5 t' a+ @1 m% V4 ]5 A6 Y
                mov A,@R0                        ; Test if key already pressed* s% t5 W, |1 g' r) z! e! ~# U1 C& b
                mov @R0,#1                        ; Flag pressed anyway8 y+ Q- l) v$ p* p6 X; E" ]
                jz ksnew                        ; Jump if key newly pressed  b6 U8 ~9 i( `
                jmp ks2
  v5 V' B, d0 o- B$ @ks1:        mov @R0,#0                        ; Flag key as not pressed
' s# z1 R7 L4 Y# o2 \ks2:        inc R0                                ; Loop for next key in this row/ G7 }9 c+ k  v1 H9 q% r; l( O4 `( u& [
                mov A,R4. m( t+ }: m3 E
                djnz R3,ks0- B1 a5 S  b: Q  I) u3 w  U! a4 t

1 H$ @% a, V8 p# \
+ n$ }- Y% o% V1 j
                mov A,R1                        ; Jiggle R1 to address next row
  U, }, h% `2 L                rl A   \% F- Z2 M! T. W( A
                mov R1,A  m) H& l3 Q9 C: _" x# u- R" `
                djnz R2,ksrow( C) d" d: b: X2 h

* {, E! N$ j& i& j9 s
  K" F9 s" G) c  [
                clr A                                
. D5 V  X! }' d& B8 ^( y                mov R7,A                        ; Return zero - no (new) key press.        
" {+ A, L8 e2 U                jmp ksend3 w' Z. f1 @1 ~( l9 L! B
                                                
2 C+ s$ b' ]3 R$ V: tksnew:        mov DPTR,#keycodes                ; We've found a new key since last time:
* W' Y$ r& [7 X                mov A,R0                        ; The key flag address (ordinal) is in R0
% L& j8 u  b, j. G' F                clr C: L9 n, j& g* p, |
                subb A,#keyflags
8 Z( s7 v3 B3 l2 ~* F0 F6 e7 s7 \                movc A,@A+DPTR
" L( {0 {) d5 f% U3 W! Y                mov R7,A                        ; Move the Key into R7 to be returned./ D7 G- d* y$ y7 n( z- V" V  z
ksend:        mov P2,#0FFh
7 ~3 x8 k$ A( F$ \                pop DPL% v! ~: y/ `) H; o' b( y  g" a* R
                pop DPH% m5 _6 ~) k2 I  u4 W3 K, n
                ret# M; ~" V, H9 i7 q

$ h8 N* L/ S! T3 o; E
; r: E+ s" c- Q0 v* W% O
;Data tables for returned row bits
8 Z8 c' A' v6 i, A( mkeycodes:$ s1 f' ]0 k8 G& W) g6 n  T' H( Z
        db         '7','8','9', '/'
9 H8 g, o8 m3 y% @                db        '4','5','6', '*'. T. ?3 G* H) i
                db        '1','2','3', '-'3 R( O% c- |+ D# r! W
                db        'C','0','=', '+'5 k- j: p$ D# i+ P: C

' L) Z5 ?8 ]- b1 ]. M% a

) G$ r" {0 r: c2 t4 x                END
  ?2 W7 F6 S8 _, p$ n
+ d* C; G. z3 Y2 R, I: I8 z. l完整源码和仿真工程文件下载:
9 `% b$ f. e5 R! {2 S0 O
游客,如果您要查看本帖隐藏内容请回复

1 S9 k  c; Y$ I: j: f/ l! @

! E3 [! D1 Z# ~: H. o, X
  • TA的每日心情
    开心
    2019-11-20 15:05
  • 签到天数: 2 天

    [LV.1]初来乍到

    2#
    发表于 2019-1-8 15:44 | 只看该作者
    看看楼主怎么弄的

    该用户从未签到

    3#
    发表于 2019-3-1 17:01 | 只看该作者
    研究一下,谢谢分享
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-21 10:14 , Processed in 0.156250 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表