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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
用8051与1601LCD设计的计算器 带仿真和汇编源程序3 K' }4 E* b7 E
9 K4 G9 p7 g7 @& r

8 R) P) \: E+ E; _2 B( d( H  \) p" b6 _) y2 Z8 z4 R, D% C
- R# T  w; C# z0 P& r+ B0 n( k
用8051与1601LCD设计的计算器仿真原理图如下:4 m, n, t) O) U( p. @- h
0 K1 r; e  x: z1 x, F& f; W- m
8 Y% u0 H  O! {  k* z8 U
% h1 @8 I4 D4 O7 q- i3 P
部分汇编源码预览:
# G4 n" t) D0 o! L- k
7 ^5 w4 t- D' Q, K5 w

8 Z2 o$ Y6 Q3 [( u  n2 O/*******************************************************************************7 a% ~* _( k, d. v- Q
************                 LABCENTER ELECTRONICS                  ************                              * b/ q$ ^2 y( o3 v1 y6 h
************                Proteus VSM Sample Design Code                  ************                        
/ J/ e& X$ H) j7 \" @4 n) Z! Z) q+ {; G************               Integer Calculator ( 2K Code Limit)                ************: i' y6 o" Z7 K* M
*******************************************************************************/
2 F; }, g" n  w; {# V0 c4 G
: W5 q9 e4 i) _

6 h9 [2 {2 e, X: R1 GNAME    KEYPAD- A  H  K- F6 y) L
; This routine will read a character press from the keypad and return it in R7.
  U' o3 X' V1 y: \' Q- k3 `! ]! T/ z( T8 a+ X6 k4 D8 g% Q

5 V, ]0 G, \* h1 ^, d;Set up Segments for the Input Routine - No parameters.- I4 j# j/ \5 j
?PR?input?KEYPAD               SEGMENT CODE! d. ]1 Z% s+ L0 ]: b) y( [
        PUBLIC        input9 g: C) }/ `8 W
?DT?input?KEYPAD               SEGMENT DATA$ j: u' Y. C: q$ x
7 J" P  V  o5 D" \) P& }! S; ^/ ]

% a" q; U7 O  ~  F  I$ S7 KRSEG  ?DT?input?KEYPAD                          ; Local Variable Segment for Output Routine./ x0 g+ I' N3 x! T5 V: \* L4 f

3 e+ b2 k! [0 _  a  q
; i2 S" E* A8 ^1 e  z5 ]: Y" d' e% r
KEY_ROW1        equ        0EFh
- J6 p# D( d5 Q! G3 Y6 Q; i5 ?4 HKEY_ROW2        equ        0DFh
2 c# Z5 d+ K4 `4 k8 pKEY_ROW3        equ        0BFh. Y" P7 @* r( h  L- i
KEY_ROW4        equ        07Fh8 r# r0 p0 P: c+ S
4 }& G% P  M2 ?8 K4 y+ f* S  g2 _. _

5 G7 \/ H% x$ {# q* g/ Kkeyflags:        ds        16
# u" A& s) D* r, M' D1 F4 N# j7 {" G+ W7 h8 y% K' Z
! B9 N7 I7 W% {$ l0 N  `
RSEG  ?PR?input?KEYPAD                          ; Code Segment for Output Routine.
. h8 x1 _( [6 Z" E' M3 einput:
' W6 J: H. x9 V" P% n
: N% O" K1 o3 a% [# y
0 b: ~- m2 K, p9 B; b5 j9 p# n0 P
keyscan:push DPH$ X/ Z" a3 y/ u, Q4 L
                push DPL
( H6 K! R/ s, O                4 L! B9 o! m# t& t
                mov R0,#keyflags                 ; R0 addresses the key toggle bytes
' x5 o; e" q$ x                mov R1,#KEY_ROW1                ; R1 address the keyboard row address
. o8 Z$ n7 q" S( h: _9 Z                mov R2,#4                        ; R2 counts rows" {0 {$ [4 P! W. M
ksrow:        mov P2,R1                        ; Set row address to port P2
8 C1 ~* \# v- `) |6 n" L$ t                nop, [: M* ?* k3 n
                mov A,P1                        ; Read column data from port P1
; o9 f4 S  I. Z                mov R3,#4                        ; R3 counts keys per row+ o$ I/ o) e0 `: w( I
                anl A,#3Fh+ E' j; F% o, q9 N
ks0:        rrc A                                ; Move next bit into carry
; @: e2 ^  @% d# p( }  V$ T/ R                mov R4,A                        ; R4 preserves the row data
' p' z1 f) g* l  u                jc ks1                                ; Jump if key not pressed5 A. R) Y# }! d, n3 o1 q) u: B
                mov A,@R0                        ; Test if key already pressed
0 _5 D) G+ E+ F                mov @R0,#1                        ; Flag pressed anyway
1 J) z8 d: N8 \0 |                jz ksnew                        ; Jump if key newly pressed+ \8 E* D# `7 j  h
                jmp ks2
6 }  a9 f- l! H5 ~3 c, [% P9 Lks1:        mov @R0,#0                        ; Flag key as not pressed
, L& s/ r/ `8 }% p% iks2:        inc R0                                ; Loop for next key in this row$ P5 f4 Z( B4 e6 }9 O
                mov A,R4" z* X& T" T7 i% Q$ B
                djnz R3,ks0
! R  A# j/ {! f. @1 E9 ]2 k
1 ^8 K" h+ Q: s& N+ Q( s
. b9 a! l# n/ H  ~( l
                mov A,R1                        ; Jiggle R1 to address next row
( ~8 ~7 i' c, K                rl A   c+ O+ `8 c- s. D1 R) C
                mov R1,A
# D" s, K- y2 P5 R2 _9 w                djnz R2,ksrow  P6 {% k+ {( v9 E

5 A/ {: C4 K6 L: J( o( K
0 D. Y7 _- M: S3 n% M- J
                clr A                                
9 `% ?& P8 P  y                mov R7,A                        ; Return zero - no (new) key press.        ' y2 Q% L6 w* N4 v+ c8 f
                jmp ksend5 [" G0 ]4 q5 W3 u
                                                
3 A8 F  `8 R! D; X5 b7 M+ Lksnew:        mov DPTR,#keycodes                ; We've found a new key since last time:
! D) l: r3 H/ @. O2 _                mov A,R0                        ; The key flag address (ordinal) is in R0" n6 w0 _) m1 z1 c
                clr C
! j- \+ {: U8 e6 S1 a% h+ [- E                subb A,#keyflags4 m8 Q( {2 _; |% @0 b
                movc A,@A+DPTR* I! i/ X3 p- b2 r6 a+ F
                mov R7,A                        ; Move the Key into R7 to be returned.
) s# M( z6 z0 F. Mksend:        mov P2,#0FFh& q! t- ?; ]6 F/ W& K! _. c7 h
                pop DPL
0 m2 t+ R3 G& p- B4 C( [                pop DPH0 i* l9 z0 [& o4 i7 n* a
                ret0 F) |3 u! d1 E7 o# q2 x% ]1 A! Y/ l: g
5 `. l, g" ~3 B0 M) L4 o/ J  K

) N; s2 f% S# W# ^2 g2 r. L* @;Data tables for returned row bits* M3 c7 j! D9 @; B$ Z) ?7 w1 q
keycodes:
7 l7 C" Y: {0 q5 \$ w        db         '7','8','9', '/'
# v" d. z( C; e$ v                db        '4','5','6', '*'
* h# b3 |* Q* R, T                db        '1','2','3', '-'
! ~- D% D1 J! P6 E7 w* H                db        'C','0','=', '+'7 e# z( W2 D( z7 f0 B

  t: Z* q( {7 U: G2 F

0 a: k# }. |! ], H# H! a5 q$ x3 o                END( I! x4 }, J- a% Y2 e9 g3 r. m

' y0 M% g+ l/ M% v+ u7 g. n完整源码和仿真工程文件下载:
8 p; e2 O- Z0 E  Q% P1 @; C
游客,如果您要查看本帖隐藏内容请回复
% N- ~/ r$ Q* S4 K) I

3 `( ^0 U0 G6 T* L- D- [7 v
  • 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-6-18 08:08 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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