找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2872|回复: 1
打印 上一主题 下一主题
收起左侧

用8051单片机与1601LCD设计的计算器 汇编语言

[复制链接]
跳转到指定楼层
楼主
用8051与1601LCD设计的计算器
protues仿真原理图如下:



所有资料下载:
40 用8051与1601LCD设计的计算器.rar (35.26 KB, 下载次数: 25)

单片机汇编源码(部分内容预览):

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

  6. NAME    LCD

  7. ;Set up Code Segment and exports:

  8. LCD              SEGMENT CODE
  9. RSEG             LCD

  10.                  PUBLIC  _output
  11.                  PUBLIC  initialise
  12.                  PUBLIC  clearscreen

  13. ;LCD Register Addresses.
  14. LCD_CMD_WR        equ         00h
  15. LCD_DATA_WR        equ        01h
  16. LCD_BUSY_RD        equ        02h
  17. LCD_DATA_RD        equ        03h
  18. LCD_PAGE        equ        80h

  19. ;LCD Commands
  20. LCD_CLS                equ        1
  21. LCD_HOME        equ        2
  22. LCD_SETMODE        equ        4
  23. LCD_SETVISIBLE        equ        8
  24. LCD_SHIFT        equ        16
  25. LCD_SETFUNCTION        equ        32
  26. LCD_SETCGADDR        equ        64
  27. LCD_SETDDADDR        equ        128

  28. ; Initialisation Routine for the LCD display.
  29. initialise:
  30.         mov A,#030h                        ;1 line, 8 bits
  31.                 call wrcmd
  32.                 mov A,#LCD_SETVISIBLE + 4
  33.                 call wrcmd
  34.                 mov A,#LCD_SETDDADDR+15                ; Start at right hand side of the display
  35.                 call wrcmd
  36.                 mov A,#LCD_SETMODE + 3                ; Automatic Increment - Display shift left.  
  37.                 call wrcmd
  38.         ret

  39. ; We move the parameter (held in R7) into the Accumulator prior to writing it.
  40. _output:mov A,R7       
  41.                 call wrdata
  42.                 ret


  43. ;Clears the LCD display and sets the initialisation conditions.
  44. clearscreen:
  45.         mov A,#LCD_CLS
  46.                 call wrcmd
  47.                 mov A,#LCD_SETDDADDR + 15
  48.                 call wrcmd
  49.                 ret       
  50.                
  51. ;*****************************
  52. ;******** SUBROUTINES ********
  53. ;*****************************

  54. ;Sub routine to write command:
  55. wrcmd:        mov P2,#LCD_PAGE
  56.                 mov R0,#LCD_CMD_WR
  57.                 movx @R0,A
  58.                 jmp wtbusy

  59. ; Subroutine to Write a Character to the LCD Display.
  60. wrdata:        MOV P2,#LCD_PAGE                               
  61.                 MOV R0,#LCD_DATA_WR
  62.                 MOV A,R7
  63.                 MOVX @R0,A

  64. ; Subroutine to wait for a busy clear.       
  65. wtbusy:        MOV R1,#LCD_BUSY_RD
  66.                 MOVX A,@R1
  67.                 JB ACC.7,wtbusy
  68.         ret

  69.         END
复制代码


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2017-1-3 23:26 | 只看该作者
51黑有你更精彩!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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