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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
用8051与1601LCD设计的计算器 带仿真和汇编源程序
2 P4 q- P, ?9 t" z
: x8 ^9 h3 F  i5 g+ e! d
/ ?, ~8 w/ J1 V  h, R* y& [, n

4 }" u9 B- l3 N3 k. j- n
& L# k8 _9 h8 |1 K- G, t
用8051与1601LCD设计的计算器仿真原理图如下:& [& x6 s5 H& j. r- T# N

6 ]* b0 Q  S$ F! W ' C5 S1 J8 l' |. d
# S& V$ j$ p9 [0 b. _! _* f5 q
部分汇编源码预览:
2 P" y4 f/ J  j+ D) S
* d7 D, ?$ U' W# m

9 U& P/ H' Y* l# c9 z8 `5 L/*******************************************************************************
, X3 ~! _9 l1 G0 R$ s3 U************                 LABCENTER ELECTRONICS                  ************                              3 ^& w/ V3 z! D9 x1 x* h
************                Proteus VSM Sample Design Code                  ************                         8 V6 K+ s2 ?3 ^1 k' t
************               Integer Calculator ( 2K Code Limit)                ************
/ G3 a! r  {6 T$ p# W# H7 L*******************************************************************************/! X1 c% l$ Q$ \+ P& r

1 K2 x7 ?5 l9 q+ g3 E

4 A) H% l4 q/ t8 \( }NAME    KEYPAD
  F" I1 f2 V  E" D; o; This routine will read a character press from the keypad and return it in R7.4 c9 L$ S/ B. I8 v$ L5 i8 B( @
: j. O" \' E# ?

4 p+ t+ O5 P6 b6 \: e) u;Set up Segments for the Input Routine - No parameters.
3 L; E4 ~, D, D  }6 Z8 j?PR?input?KEYPAD               SEGMENT CODE
" v0 C3 L- K$ h5 N6 U+ q3 e7 i( v$ q5 Q        PUBLIC        input
6 s& R# `' D$ T  ]9 b* T, L# f?DT?input?KEYPAD               SEGMENT DATA
5 y! o1 o+ R" E) w/ D& E, I+ l, k; c1 B' _# k

. X7 W: _8 I+ XRSEG  ?DT?input?KEYPAD                          ; Local Variable Segment for Output Routine.3 I& ~# u3 \( {8 P& j% p

, q8 y* g( o: a6 [$ X  B- O; ~
2 q$ k/ q) Z% N# G/ ]6 \
KEY_ROW1        equ        0EFh
# A- W$ m4 y0 t: Q" DKEY_ROW2        equ        0DFh
1 ~7 f6 S' O1 r+ YKEY_ROW3        equ        0BFh
! q+ e1 r) \+ TKEY_ROW4        equ        07Fh
" O/ s% ], N. g7 T0 [) h3 U. u9 D! j! z  l

( u5 T0 }8 n+ n6 Kkeyflags:        ds        16
: e2 E) ~+ _/ [% W% a# P4 }/ w
3 W/ n7 e/ K  Z$ t+ j5 `
/ R" G" _3 J7 c2 T& B
RSEG  ?PR?input?KEYPAD                          ; Code Segment for Output Routine.. C9 K8 |+ d# P$ J
input:" @6 P& u; N' g5 b- C  s# l5 F/ @( X

# z6 ~# f  a# u6 d9 U6 o% \& a9 b
0 r+ Z1 x; M* r  ^6 t4 z+ k, q" l4 @
keyscan:push DPH  t8 X2 v7 P- z  v3 k8 w2 [/ ~6 Q; z- G
                push DPL% D# ^; {! E2 D" C& k
                / z5 N5 ?9 [& ^) i( [6 \
                mov R0,#keyflags                 ; R0 addresses the key toggle bytes
1 z% Q) b  t0 B" Q3 x5 L                mov R1,#KEY_ROW1                ; R1 address the keyboard row address$ y% f9 {5 R+ O6 l
                mov R2,#4                        ; R2 counts rows
* o" P' E; c+ b; I4 v4 Nksrow:        mov P2,R1                        ; Set row address to port P2, ?  Z/ u4 B, M8 P( o
                nop
* Y8 E" Y) E  o                mov A,P1                        ; Read column data from port P1! s0 e( y2 L8 w/ N: \  s
                mov R3,#4                        ; R3 counts keys per row
3 E7 e( L4 h3 j7 Z  ^6 b3 k                anl A,#3Fh
! \, g- a3 E: h2 |! k) [- L0 O% cks0:        rrc A                                ; Move next bit into carry
2 A: v7 ]4 f8 p6 C9 q                mov R4,A                        ; R4 preserves the row data9 t( d( U& V+ Y+ q; u
                jc ks1                                ; Jump if key not pressed
( y3 G- E2 j! T4 g9 k2 j- @2 I                mov A,@R0                        ; Test if key already pressed4 k5 G4 B; T7 Y: W7 f: p
                mov @R0,#1                        ; Flag pressed anyway
  r0 V0 l: a  w* ]+ J8 z$ o; Q                jz ksnew                        ; Jump if key newly pressed
5 j+ y9 `9 u7 o1 ]                jmp ks22 m% p5 K7 ~9 K
ks1:        mov @R0,#0                        ; Flag key as not pressed; t4 _  f/ N# \2 j2 d  r$ b9 n
ks2:        inc R0                                ; Loop for next key in this row
( x- ]; T  j& s% w; g                mov A,R4" o1 K$ l: x( P4 I8 x  L: }/ ^
                djnz R3,ks0, n0 K: x" Y6 G6 q8 g7 B4 X. O

! q% ~" E3 m; Z' R) c1 `
9 e2 t) ?; ?5 ]2 q& F
                mov A,R1                        ; Jiggle R1 to address next row
7 a! z1 \. ~8 N5 y( s                rl A
) {+ M- d6 z& `                mov R1,A/ ^: ?' W( P9 u8 ~! E# _
                djnz R2,ksrow" p7 ~0 X* L5 T: M* X: H4 j' F
9 C" _0 }1 J' Z+ J

% c: }- ^9 R; Z$ `) q% r$ C0 O                clr A                                
1 N! M0 m0 G0 G4 s' ]. L                mov R7,A                        ; Return zero - no (new) key press.        $ c& M8 n& ?$ w% H: d1 F
                jmp ksend
5 u1 e9 i( w& D$ n6 x# a- a$ q) o; _                                                
* ]1 R, u* G7 x1 U! A% z, `ksnew:        mov DPTR,#keycodes                ; We've found a new key since last time:
3 f- C. g! Q, G6 G6 O% m/ I                mov A,R0                        ; The key flag address (ordinal) is in R0( o2 A7 S5 q5 P; Z" s1 X2 p
                clr C. w- \3 n5 Y" B' ?, q
                subb A,#keyflags
& x/ v# E7 V1 D                movc A,@A+DPTR3 j2 u: G: q$ n: o, U: r. [; R
                mov R7,A                        ; Move the Key into R7 to be returned.
4 h9 c# ?2 m( \4 h! eksend:        mov P2,#0FFh
6 b. P! J! I: w$ B                pop DPL0 V/ j; V3 _) |; N, `3 k
                pop DPH
0 G/ Y) U+ C, Q4 q* J# M$ R) A: P                ret& H1 Q1 V5 U% I: |$ Y4 J
- I/ D2 Y4 i" z/ N

& Q" h3 k: N& d8 ];Data tables for returned row bits
5 z2 Z" j: `; b6 _2 Z8 r9 Kkeycodes:
0 f3 j2 G5 y; q( s        db         '7','8','9', '/'$ Z: P6 F0 F) }
                db        '4','5','6', '*'
2 M7 e' P1 D9 h% c" E                db        '1','2','3', '-'& \% N2 G. Y# `6 B8 k, N4 X( A
                db        'C','0','=', '+'
4 F/ d# w6 z& c$ ]9 O! |( v# D  j4 R6 W- _4 W

) S; X( W9 s$ z9 S" {2 g! h                END  o! L! ]0 T/ k* R- z+ W8 M' M
" ]0 m  y  B. ?( M5 O% Y  f* W+ @
完整源码和仿真工程文件下载:
% M- J4 m! l  S
游客,如果您要查看本帖隐藏内容请回复
% U/ g& A" D' [1 E9 b
3 w1 w% \" q6 ~" f, D# d2 Y
  • 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-3 11:16 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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