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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
用8051与1601LCD设计的计算器 带仿真和汇编源程序
, h: ?# F: m# a6 C- G( A+ V2 ^; w/ L: M  c/ r' [3 l

. m; _( _6 j' p% R7 n( ~& C1 s9 a- p3 l8 M8 Y& P: y; q
, B3 v' M$ |* C8 t. N0 X- j% l
用8051与1601LCD设计的计算器仿真原理图如下:
' g! J( O6 B' P6 b4 t( Q& g
7 P# G/ c4 v1 U. V" @3 z   q+ H% N3 o/ d* p8 F, h

: w7 q4 M4 E/ A4 l2 e& x- F部分汇编源码预览:

3 Z$ t1 A; C- T+ z1 H' q" L0 J
1 v6 K7 \3 w9 E6 i* b  ^! S. P

/ T" J. d4 c, b4 c. z/*******************************************************************************' Z: @# ^# a1 G! W  ~9 \
************                 LABCENTER ELECTRONICS                  ************                              5 \: K7 F/ x  r
************                Proteus VSM Sample Design Code                  ************                         $ u& _+ q* _& i- P
************               Integer Calculator ( 2K Code Limit)                ************
3 j8 ], \# m' k' l) k7 w1 [" J; ^7 v*******************************************************************************/
5 I7 d# S$ M, X& X4 {2 j' ^! i0 B# U: D! m4 N$ \. S6 M6 u
' j" e" y! n4 l  H) \
NAME    KEYPAD
6 X% _/ E0 o$ p) X1 L; This routine will read a character press from the keypad and return it in R7.$ L7 _2 ?" S  |7 @3 R1 l

$ d6 y% n7 X. T0 Y5 ~. X

+ I/ I4 G6 z) q7 f6 p7 s" S;Set up Segments for the Input Routine - No parameters.
0 |3 X& Z: a% A?PR?input?KEYPAD               SEGMENT CODE+ S' h- i- V+ e
        PUBLIC        input7 N! ~: D: Z$ _7 `1 g+ r  @
?DT?input?KEYPAD               SEGMENT DATA/ h: }. {% `6 A" S5 b5 x3 L

4 O7 S" y( N* d! f! B$ K5 ]

* v& t. y  C' |8 P1 `( oRSEG  ?DT?input?KEYPAD                          ; Local Variable Segment for Output Routine.
8 b  P, k7 S& {- @5 f2 M1 v% \  K7 y& Q/ k
5 G/ H  J" N$ v
KEY_ROW1        equ        0EFh7 C) q$ y; X: [) `2 c
KEY_ROW2        equ        0DFh
. b9 A$ Z6 j" |3 Z$ lKEY_ROW3        equ        0BFh9 D$ m8 M5 J) C, j) S  F
KEY_ROW4        equ        07Fh8 y. K/ F0 o$ e' v& m" i) X9 a# ]
4 f3 a3 F3 q* X  r5 Q5 J0 V' j

" D: W) ~! X- \keyflags:        ds        16# w( ^3 H7 L" l* w0 ^- K6 m

/ m  z+ t8 u2 l& G1 p. @) A' l

0 o. k8 L8 \# fRSEG  ?PR?input?KEYPAD                          ; Code Segment for Output Routine.
" K8 A7 _0 M0 i/ ^" [" Ginput:+ M! f" ^' _. n3 f- M9 g

1 |4 q0 w: U2 z# t% J( _. z
" r2 f* ]+ C6 E' C. C
keyscan:push DPH
+ h1 Q, o( I% R  n6 o) C% E& R! i                push DPL* U* m" b) z. a; j+ D! P- I
               
+ @8 |% b. q4 ^/ ], F                mov R0,#keyflags                 ; R0 addresses the key toggle bytes( `5 _3 g. p! L9 ~. n% i
                mov R1,#KEY_ROW1                ; R1 address the keyboard row address
1 k7 j% t) ?5 `: ?- o! S6 j/ x                mov R2,#4                        ; R2 counts rows
- s: O; k' [. Y0 T. M& g: ]ksrow:        mov P2,R1                        ; Set row address to port P2
/ g! M9 t9 T) M4 i; v9 C                nop3 l. l) N& e$ n6 h) i3 Q
                mov A,P1                        ; Read column data from port P1* d/ L  _1 y3 a
                mov R3,#4                        ; R3 counts keys per row
2 s* J9 i3 h* p+ Z! d# {0 u                anl A,#3Fh
" H& @& r) D) m" e$ s. [3 S6 `9 Mks0:        rrc A                                ; Move next bit into carry. P* u6 h) Z% o" {: S& V
                mov R4,A                        ; R4 preserves the row data
3 A+ a; |8 b7 c2 o                jc ks1                                ; Jump if key not pressed
; R9 H9 a( F3 o                mov A,@R0                        ; Test if key already pressed) J- `* K. y" ]/ |) V) }5 c
                mov @R0,#1                        ; Flag pressed anyway
9 Y9 p2 A0 `; E" M2 |                jz ksnew                        ; Jump if key newly pressed/ c+ ?* c- h8 I; J, o* z, w
                jmp ks2, f1 F+ G! |% Y- x( s. j
ks1:        mov @R0,#0                        ; Flag key as not pressed2 I& G2 N+ q* K9 \
ks2:        inc R0                                ; Loop for next key in this row
5 k7 |$ j8 t. H/ m# Y$ ^( M; [& H                mov A,R4
3 K4 r* ~) f5 Q5 |& |2 d9 }$ e                djnz R3,ks0/ w1 f9 E0 q: d0 z9 E4 C
2 F: ^4 ^9 K8 c5 i/ O" i, x

, z7 |9 O$ m- @( D                mov A,R1                        ; Jiggle R1 to address next row
6 o+ G" h1 |( F                rl A : ]( k0 |( p! R9 D! g0 ]( P( z
                mov R1,A
& F1 f$ b$ |& q( H                djnz R2,ksrow( J3 b1 Z% Z" a7 r$ p! {( Y

( v9 N/ d# J) v+ ~8 {7 \

# M# O/ m+ f( y                clr A                                
! R( q' ]; Y; g. E                mov R7,A                        ; Return zero - no (new) key press.        
/ T5 b. P9 X. B% e                jmp ksend2 k! L+ s# m4 @/ P
                                                : x# g0 T* I$ G; L% M# C
ksnew:        mov DPTR,#keycodes                ; We've found a new key since last time:4 b& F+ ~) G% L
                mov A,R0                        ; The key flag address (ordinal) is in R0, J) U' n4 n2 I8 p) Z
                clr C* h4 E0 f- Y& l0 o+ y
                subb A,#keyflags
2 i$ \5 D" P: v5 a* Y1 A: H; x/ }0 G                movc A,@A+DPTR4 N! |' f; _$ V7 H; ^! Z- {' }/ L
                mov R7,A                        ; Move the Key into R7 to be returned.
+ N2 C( |$ f$ J% o. Aksend:        mov P2,#0FFh' G7 h; o7 D& |  f( [, c5 c
                pop DPL3 L5 I# P. U; B1 y- r
                pop DPH
9 i! |2 U, C. S7 f. t                ret1 s% }  _" R/ \! d+ I1 u
. W) d  z$ R, `  M3 z2 F# R( |
/ V4 y. s) r" _( a. S/ u
;Data tables for returned row bits( A* C  ]- X' u/ W2 t$ {7 o  L
keycodes:" G. V$ @- k+ v. ]+ q9 m
        db         '7','8','9', '/'
, x( ~3 i0 Q' k" x7 P2 X) b                db        '4','5','6', '*') F6 R3 \# p: ^: g) @$ c
                db        '1','2','3', '-'
( x2 s: ?5 d1 p. B4 o  A$ l                db        'C','0','=', '+'
0 }+ r8 L0 X+ H( V5 g. k! M2 F8 d3 X- x7 w- h* B  j" O

9 K: Y: t* Z" }% G' ^% _0 t! Z                END; X) S. a0 m% X' N9 k+ z  B
9 I8 G: @; w5 j7 B
完整源码和仿真工程文件下载:
6 E) d+ |  F3 O3 F( r
游客,如果您要查看本帖隐藏内容请回复
0 _9 G+ F+ z& U( W9 C

! i8 Y2 W; k% `
  • 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-7-28 14:30 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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