找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51系列单片机 汇编 proteus 数码管--点阵

[复制链接]
跳转到指定楼层
楼主
l  多个数码管—数字变换—轮流显示—软件控制—扫描子程序—位指令控制

//多数码管轮换显示、定位显示—左移或右移—可以引出进位显示

ORG 0000H

MAIN:

MOV A,#00H    MOV P2,A    CPL A     MOV P3,A

MOV P2,#0C0H  MOV P3,#01H

ACALL YANSHI

MOV P2,#0F9H  MOV P3,#02H

ACALL YANSHI

MOV P2,#0A4H  MOV P3,#04H

ACALL YANSHI

MOV P2,#0B0H  MOV P3,#08H

ACALL YANSHI

MOV P2,#99H   MOV P3,#01H

ACALL YANSHI

MOV P2,#92H  MOV P3,#02H  ACALL YANSHI

MOV P2,#082H  MOV P3,#04H  ACALL YANSHI  MOV P2,#0f8H  MOV P3,#08H  ACALL YANSHI

MOV P2,#80H   MOV P3,#01H  ACALL YANSHI  MOV P2,#90H  MOV P3,#01H  ACALL YANSHI

MOV P2,#088H  MOV P3,#01H  ACALL YANSHI  MOV P2,#83H  MOV P3,#01H  ACALL YANSHI

LCALL MAIN

YANSHI:  MOV R5,#04H   F2: MOV R7,#0FFH     F1: DJNZ  R7, F1   DJNZ  R6, F2

  RET

END

程序说明:

关于数码管问题,需要指出,单管显示、多口多管显示(一口一管、双口多管)、静态显示、计数显示、多口多管进位(一口一管、双口多管)、多口控制与扫描



a)  多个按键与多个数码管(位输入与字节输出)—动态—数组—扫描子程序



//多数码管轮换显示—可以引出进位显示—数表的应用

ORG 0000H

START:

MAIN:

     MOV R0,#00H  ;寄存器中放数值0

        MOV DPTR,#TABLE ;指针指向数表

DISP:                ;段标记

     MOV A,R0  ;将寄存器中的数值转移到累加器中

        MOVC A,@A+DPTR  ;以DPTR作为基础,与累加器相加得到新地址给累加器

        MOV P2,A   ;将累加器的地址给P2口

        MOV P3,#08H ;个位数显示位控制

        ACALL DELAY  ;调延时子程序

        INC R0 ;寄存器R0加1

        CJNE R0,#33H,DISP ;寄存器与立即数33比较,不相等则转移到DISP循环。相等则顺序执行



      MOV R1,#00H  ;寄存器中放数值0

        MOV DPTR,#TABLE1 ;指针指向数表

DISP1:                ;段标记

     MOV A,R1  ;将寄存器中的数值转移到累加器中

        MOVC A,@A+DPTR  ;以DPTR作为基础,与累加器相加得到新地址给累加器

        MOV P2,A   ;将累加器的地址给P2口

        MOV P3,#04H ;十位数显示位控制

        ACALL DELAY  ;调延时子程序

        INC R1 ;寄存器R0加1

        CJNE R1,#33H,DISP1 ;寄存器与立即数33比较,不相等则转移到DISP循环。相等则顺序执行

        LJMP MAIN

DELAY:                   ;延时子程序---RET为止

     MOV R7,#0FFH  ;给寄存器植入某个数值

LOOP0:

     MOV R6,#0FFH  ;给寄存器植入某个数值

LOOP1:

     DJNZ R6,LOOP1  ;减1比较,直至寄存器中的数值为零跳转

        DJNZ R7,LOOP0 ;减1比较,直至寄存器中的数值为零跳转

        RET   ;返回子程序DELAY

TABLE:

  DB  0C0H,0FFH,0C0H,0FFH ;间隔交替用于体现闪烁,去除则为连续递进。

DB 0C0H,0FFH,0F9H,0FFH,0A4H,0FFH,0B0H,0FFH,99H,0FFH,92H,0FFH,82H,0FFH,0F8H,

DB 80H,0FFH,90H,0FFH,88H,0FFH,83H,0FFH,0C6H,0FFH,0A1H,0FFH,86H,0FFH,8EH, 00H

TABLE1:

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0c6H,0A1H,86H,8EH

END





//4个一组的数码管同步显示—数表

ORG 0000H

START:

MAIN:

     MOV R0,#00H  ;寄存器中放数值0

        MOV DPTR,#TABLE ;指针指向数表

DISP:                ;段标记

     MOV A,R0  ;将寄存器中的数值转移到累加器中

        MOVC A,@A+DPTR  ;以DPTR作为基础,与累加器相加得到新地址给累加器

        MOV P2,A   ;将累加器的地址给P2口

        MOV P3,#0FH ;四位数显示位控制

        ACALL DELAY  ;调延时子程序

        INC R0 ;寄存器R0加1

        CJNE R0,#33H,DISP ;寄存器与立即数33比较,不相等则转移到DISP循环。相等则顺序执行

   

        LJMP MAIN

DELAY:                   ;延时子程序—RET为止

     MOV R7,#0FFH  ;给寄存器植入某个数值

LOOP0:

     MOV R6,#0FFH  ;给寄存器植入某个数值

LOOP1:

     DJNZ R6,LOOP1  ;减1比较,直至寄存器中的数值为零跳转

        DJNZ R7,LOOP0 ;减1比较,直至寄存器中的数值为零跳转

        RET   ;返回子程序DELAY

TABLE:

    DB 0C0H,0FFH,0C0H,0FFH ;间隔交替用于体现闪烁,去除则为连续递进。

DB 0C0H,0FFH,0F9H,0FFH,0A4H,0FFH,0B0H,0FFH,99H,0FFH,92H,0FFH,82H,0FFH,0F8H,

DB 80H,0FFH,90H,0FFH,88H,0FFH,83H,0FFH,0C6H,0FFH,0A1H,0FFH,86H,0FFH,8EH,





















//4个一组的数码管异步显示(流水、轮流、循环)—数表



ORG 0000H

START:

MAIN:

     MOV R0,#00H  ;寄存器中放数值0

        MOV DPTR,#TABLE ;指针指向数表

DISP:                ;段标记

     MOV A,R0  ;将寄存器中的数值转移到累加器中

        MOVC A,@A+DPTR  ;以DPTR作为基础,与累加器相加得到新地址给累加器

        MOV P3,A   ;将累加器的地址给P3口

        MOV P2,#08H ;一位数显示位控制;个位

              ACALL DELAY  ;调延时子程序

              ACALL DELAY

                     ACALL DELAY  ;调延时子程序



        MOV P2,#04H ;一位数显示位控制;十位

        ACALL DELAY  ;调延时子程序

              ACALL DELAY

                     ACALL DELAY  ;调延时子程序



                     MOV P2,#02H ;一位数显示位控制;十位

        ACALL DELAY  ;调延时子程序

              ACALL DELAY

                     ACALL DELAY  ;调延时子程序



                     MOV P2,#01H ;一位数显示位控制;十位

        ACALL DELAY  ;调延时子程序

              ACALL DELAY

                     ACALL DELAY  ;调延时子程序



        INC R0 ;寄存器R0加1

        CJNE R0,#16H,DISP ;寄存器与立即数16比较,不相等则转移到DISP循环。相等则顺序执行

                    MOV P3,#0FFH

        LJMP MAIN

DELAY:                   ;延时子程序---RET为止

     MOV R7,#0FFH  ;给寄存器植入某个数值

LOOP0:

     MOV R6,#0FFH  ;给寄存器植入某个数值

LOOP1:

     DJNZ R6,LOOP1  ;减1比较,直至寄存器中的数值为零跳转

        DJNZ R7,LOOP0 ;减1比较,直至寄存器中的数值为零跳转

        RET   ;返回子程序DELAY

TABLE: ;间隔交替用于体现闪烁,去除则为连续递进。

    DB 0FFH,0FFH,0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH,0FFH



END



关于进位显示问题



b)  单个按键与多个数码管—点阵(位操作—输入与字节操作—输出)—静态



>数码管--点阵单输出点阵显示

点阵被广泛用于各种文字与图形的显示场合。其灵活性和多样性是其普及的主要原因。点阵在本质上仍然是LED显示技术,也就是发光二极管显示问题。用发光二极管组成一个矩形阵列,这可以用发光点来组成各种形式的文字与图形。由于是矩形震裂,这需要通过两个P口来进行控制和组合。一个P口显示文字与图形,一个P口用来扫描产生运动
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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