找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3278|回复: 0
收起左侧

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

[复制链接]
ID:185854 发表于 2017-4-5 22:04 | 显示全部楼层 |阅读模式
用8051与1601LCD设计的计算器仿真原理图如下:

0.png

部分汇编源码预览:

  1. /*******************************************************************************
  2. ************                 LABCENTER ELECTRONICS                  ************                              
  3. ************                Proteus VSM Sample Design Code                  ************                        
  4. ************               Integer Calculator ( 2K Code Limit)                ************
  5. *******************************************************************************/

  6. NAME    KEYPAD
  7. ; This routine will read a character press from the keypad and return it in R7.

  8. ;Set up Segments for the Input Routine - No parameters.
  9. ?PR?input?KEYPAD               SEGMENT CODE
  10.         PUBLIC        input
  11. ?DT?input?KEYPAD               SEGMENT DATA

  12. RSEG  ?DT?input?KEYPAD                          ; Local Variable Segment for Output Routine.

  13. KEY_ROW1        equ        0EFh
  14. KEY_ROW2        equ        0DFh
  15. KEY_ROW3        equ        0BFh
  16. KEY_ROW4        equ        07Fh

  17. keyflags:        ds        16

  18. RSEG  ?PR?input?KEYPAD                          ; Code Segment for Output Routine.
  19. input:

  20. keyscan:push DPH
  21.                 push DPL
  22.                
  23.                 mov R0,#keyflags                 ; R0 addresses the key toggle bytes
  24.                 mov R1,#KEY_ROW1                ; R1 address the keyboard row address
  25.                 mov R2,#4                        ; R2 counts rows
  26. ksrow:        mov P2,R1                        ; Set row address to port P2
  27.                 nop
  28.                 mov A,P1                        ; Read column data from port P1
  29.                 mov R3,#4                        ; R3 counts keys per row
  30.                 anl A,#3Fh
  31. ks0:        rrc A                                ; Move next bit into carry
  32.                 mov R4,A                        ; R4 preserves the row data
  33.                 jc ks1                                ; Jump if key not pressed
  34.                 mov A,@R0                        ; Test if key already pressed
  35.                 mov @R0,#1                        ; Flag pressed anyway
  36.                 jz ksnew                        ; Jump if key newly pressed
  37.                 jmp ks2
  38. ks1:        mov @R0,#0                        ; Flag key as not pressed
  39. ks2:        inc R0                                ; Loop for next key in this row
  40.                 mov A,R4
  41.                 djnz R3,ks0

  42.                 mov A,R1                        ; Jiggle R1 to address next row
  43.                 rl A
  44.                 mov R1,A
  45.                 djnz R2,ksrow

  46.                 clr A                               
  47.                 mov R7,A                        ; Return zero - no (new) key press.       
  48.                 jmp ksend
  49.                                                
  50. ksnew:        mov DPTR,#keycodes                ; We've found a new key since last time:
  51.                 mov A,R0                        ; The key flag address (ordinal) is in R0
  52.                 clr C
  53.                 subb A,#keyflags
  54.                 movc A,@A+DPTR
  55.                 mov R7,A                        ; Move the Key into R7 to be returned.
  56. ksend:        mov P2,#0FFh
  57.                 pop DPL
  58.                 pop DPH
  59.                 ret

  60. ;Data tables for returned row bits
  61. keycodes:
  62.         db         '7','8','9', '/'
  63.                 db        '4','5','6', '*'
  64.                 db        '1','2','3', '-'
  65.                 db        'C','0','=', '+'

  66.                 END
复制代码

0.png

完整源码和仿真工程文件下载:
用8051与1601LCD设计的计算器.rar (35.23 KB, 下载次数: 30)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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