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

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

[复制链接]

该用户从未签到

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

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
  • 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-5 01:59 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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