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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
用8051与1601LCD设计的计算器 带仿真和汇编源程序7 ?% a# U; L. s5 d. m, e
! a7 L6 q4 k, C% [" Y6 T& G

$ I  l: B8 U/ F3 ]% _& C5 V2 F

4 W' c& G1 w! ]& h. i用8051与1601LCD设计的计算器仿真原理图如下:
' {$ ~4 p; t+ R  S- u0 k5 o( T. i

" Y! N7 |$ M6 Q' p" m4 o7 @- V/ }- @9 R
部分汇编源码预览:

' L( o6 ?. ?# K, k
! @7 r) U# r! @3 h; K3 W

) _7 K# [- a3 a/*******************************************************************************; y' ]. r: z; w! i
************                 LABCENTER ELECTRONICS                  ************                              
9 Z. C7 w3 P( z% o  g8 @- {************                Proteus VSM Sample Design Code                  ************                        
. c4 W: q0 B: Q! j************               Integer Calculator ( 2K Code Limit)                ************
( o+ Z8 s- X8 a, b$ Q*******************************************************************************/5 S$ d9 q3 E7 P: ?* t6 }* C
# s6 z& w# A0 P4 C* X/ {
/ @7 n  ?0 T$ _7 z
NAME    KEYPAD
7 t2 E- o+ x7 |( [2 S; This routine will read a character press from the keypad and return it in R7.
, ^; g7 ^/ m. F2 I+ f2 L  J5 [! W% L4 K" z
5 q1 e& R2 ^# I! n; h+ {
;Set up Segments for the Input Routine - No parameters.4 V' y; W. z% s  B; A6 @( K0 Z9 V1 H
?PR?input?KEYPAD               SEGMENT CODE  [7 z& u& s8 k, z
        PUBLIC        input! H. y, n# M$ I9 d5 n# G
?DT?input?KEYPAD               SEGMENT DATA
* C0 j" B/ X) Y7 `( ?( `& A" R! Q5 M0 R+ ~& L, w

, Z6 Q' R1 `, g& P7 i6 DRSEG  ?DT?input?KEYPAD                          ; Local Variable Segment for Output Routine.0 R- T/ r1 g$ Z. E: ~" e

3 x. x! [- b/ I9 I) G

2 ?) \9 G' j0 w- PKEY_ROW1        equ        0EFh
5 p" s5 ^, ^3 ^8 M4 R' W5 X3 BKEY_ROW2        equ        0DFh
: i0 l/ u& p7 ]" ^( z! D& yKEY_ROW3        equ        0BFh. g8 n9 T2 {) p. y4 n
KEY_ROW4        equ        07Fh0 ^1 ?8 Q! j% t( W' P4 \
1 o/ a# N" ~* F/ l2 ]0 J$ z4 O$ M

3 ]3 p  Z2 t) z6 z9 ]- B" n5 zkeyflags:        ds        16
+ Q, l* y2 c7 j. B& Z( j% |4 l* c3 c3 F0 K! F
/ `' ~) n. t/ b! C7 d5 [6 Y& ~
RSEG  ?PR?input?KEYPAD                          ; Code Segment for Output Routine.
2 b7 Y5 i, c* q$ z. x$ v* einput:7 Z! C7 X3 P  g) I& a# D0 u- t

- _8 E& ^8 \& k) w: r! J) |# r
" }" W7 W6 `1 I8 T; i
keyscan:push DPH0 l- ]& u% S: a2 a1 G( ]
                push DPL
0 {( |$ [9 d( A4 y; a                5 i% u  ~1 O4 G1 y; \! R
                mov R0,#keyflags                 ; R0 addresses the key toggle bytes
; G8 y- f4 Z+ ]5 y                mov R1,#KEY_ROW1                ; R1 address the keyboard row address: }# `' [! E/ V+ N
                mov R2,#4                        ; R2 counts rows! J. l0 I: O/ [, x* v, a4 k
ksrow:        mov P2,R1                        ; Set row address to port P2
9 C" B4 |/ ?- w6 V) P                nop
# T" p) C' e7 K* I" h' B                mov A,P1                        ; Read column data from port P1/ t: E* G7 P* b2 x9 ]
                mov R3,#4                        ; R3 counts keys per row
9 z$ C8 N. D9 y/ h, ]                anl A,#3Fh
4 }2 X" g4 K. s5 }! U" Iks0:        rrc A                                ; Move next bit into carry
" F' M0 x+ q- @2 Y/ h( `) H& l                mov R4,A                        ; R4 preserves the row data' e  C8 }, I2 A! S2 e6 ~
                jc ks1                                ; Jump if key not pressed
7 _/ V9 T" e; x3 t! @3 z8 \' Z                mov A,@R0                        ; Test if key already pressed
4 v* [" ^% [6 O+ X2 d8 t                mov @R0,#1                        ; Flag pressed anyway+ e# X# p' i6 h- N, P
                jz ksnew                        ; Jump if key newly pressed$ F7 X+ E1 l, g0 d* M) v
                jmp ks2
/ |/ @: l. C  p" l( S$ X: m, }6 o" ?ks1:        mov @R0,#0                        ; Flag key as not pressed
6 @% @! A6 y  w& R7 O" E7 uks2:        inc R0                                ; Loop for next key in this row
3 z' L1 M$ x8 j& P                mov A,R4
9 T! q) q) K5 g+ P                djnz R3,ks0
( b* m  u3 k  v! F
2 i8 d5 R" @/ K7 I
+ b, q& x6 V+ o+ e+ M% ?  O
                mov A,R1                        ; Jiggle R1 to address next row' e" g6 w, p% p- G( q2 E9 H
                rl A : y# G. p" ~$ G. _' L7 p
                mov R1,A
# V' _' _1 Y# P8 ]/ ]                djnz R2,ksrow
0 n) n# e, K6 c& `) ^
9 G! l& v  S0 @% G% Z2 S, m$ Y/ t7 c8 S

5 X$ f" G8 h. w2 _. H2 x- L                clr A                                
* f. i/ j! w. q/ A                mov R7,A                        ; Return zero - no (new) key press.        
4 w/ D2 E; p3 I                jmp ksend
7 |+ G9 M0 x2 `2 f& W: R                                                # Q7 S& B' v3 T# ?' j  T5 g2 e
ksnew:        mov DPTR,#keycodes                ; We've found a new key since last time:% Q  R2 g9 s7 `0 I. D5 q
                mov A,R0                        ; The key flag address (ordinal) is in R04 R( k% j/ E0 o
                clr C$ p! o) H9 C3 H; n4 ]
                subb A,#keyflags$ O, `; H# _: @
                movc A,@A+DPTR# d6 Z6 X6 {" |1 R/ o. a
                mov R7,A                        ; Move the Key into R7 to be returned., r* Y* t( O1 Z
ksend:        mov P2,#0FFh
8 ]2 w. n. m" y0 H) A- |- T                pop DPL4 \% A0 y- Y3 @! G/ N$ ~
                pop DPH7 L: o  E. o1 b) ^4 h  |
                ret
, K; w# I1 S. N2 S) M) Y$ P  a+ A- f6 r% j( x( \+ z9 G. @! z
9 r: e" d) H% Z) I; n
;Data tables for returned row bits' ]8 u) H' ?+ h: p2 Y
keycodes:
$ v. K* T; `  }* h* S        db         '7','8','9', '/'
& R8 L  {9 {7 f+ z) U( v% h                db        '4','5','6', '*'
4 W% X3 U& {; f( Y2 A" E5 M* V                db        '1','2','3', '-'6 L3 {2 p6 ^& I+ S0 q$ I+ G1 O8 {
                db        'C','0','=', '+'
8 s+ t2 d( U+ ^/ d0 V! C
: h' w7 {) n7 Z' j" u( Y3 h

* d+ z1 ~& k( t. f6 u; s6 Y; X                END5 B# q4 s% G: U

$ S$ Y0 c4 v0 \* P8 a' \完整源码和仿真工程文件下载:- V9 F* i# M; a& G5 [
游客,如果您要查看本帖隐藏内容请回复
6 b0 m4 Q3 _$ [6 g

7 f3 a3 p9 b: w' e; u/ w! a7 n
  • 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-10-10 03:45 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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