技术热线: 4007-888-234
设计开发

专注差异化嵌入式产品解决方案 给智能产品定制注入灵魂给予生命

开发工具

提供开发工具、应用测试 完善的开发代码案例库分享

技术支持

从全面的产品导入到强大技术支援服务 全程贴心伴随服务,创造无限潜能!

新闻中心

提供最新的单片机资讯,行业消息以及公司新闻动态

静态数码管显示实验

更新时间: 2019-03-25
阅读量:1140

深圳市英锐恩科技有限公司:台湾麦肯单片机(Micon MDT单片机)亚太地区A级代理商

静态数码管显示实验
本实验的目的是让大家熟悉数码管,学习怎样应用查表程序,本程序的功能是要用PIC来实现一位
;数码管显示,程序复位后先由第一个数码管从0循环显示到9,再由第二个数码管从0显示到9,然后再
;由第一个数码管显示返复循环。程序中用一个计数器由0计数到9,同时将其在LED上显示出来。该例给出
;计数值与显示码的转换方法。
;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。
;实验时请注意套件跳线选择;
;****************************************************************
  LIST P=16F84A,R=DEC    ;定义器件为16F84,默认数制为十进制
;-----------------------------------------------
  __CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC
                                              ;没有代码保护
                                              ;看门狗关闭
                                              ;上电廷时器开启
                                              ;振荡器模式为XT
;---------------------
PC     EQU 02H            ;变量单元定义
STATUS EQU 03H
PORTA EQU 05H
PORTB EQU 06H

TRISA EQU 5H
TRISB EQU 6H
;-----------------------STATUS
RP0    EQU 5
;-----------------------
COUNTER EQU 10H
COUNT0  EQU 11H
COUNT1  EQU 12H
COUNT2  EQU 13H
TABADD  EQU 14H
;--------------------
     ORG 0000H
MAIN
     CLRF PORTA
     CLRF PORTB          ;初始IO口
    
     BSF STATUS,RP0      ;设置数据寄存器体1
     MOVLW 00000000B     ;设置RB、RA口全部为输出
     MOVWF TRISA
     MOVWF TRISB 
     BCF STATUS,RP0      ;恢复数据寄存器体0
;----------------------
LOOPA
     MOVLW 0FFH          ;让数码所有划先熄灭
     MOVWF PORTB
     BSF PORTA,2
     BCF PORTA,1          ;让第一位数码管显示
LOOP1
     MOVLW TABLE          ;将转换表的首地址存入TABADD
     MOVWF TABADD
     CLRF COUNTER         ;计数器清0
     CLRW
LOOP2
     ADDWF TABADD,W        ;计数值(W)与转换表的起始地址相加
     CALL CONVERT          ;存入W后调用转换表子程序
     MOVWF PORTB           ;取出的七段显示码送RB口显示
     CALL DELAY
     INCF COUNTER,1        ;计数器加1递增(依次显示0,1,2,…9,。)
     MOVLW 11
     XORWF COUNTER,0       ;第一位显示完后转第二位显示
     BZ LOOPB
     MOVFW COUNTER
     GOTO LOOP2
;-------------------------
LOOPB
     MOVLW 0FFH            ;让数码所有划先熄灭
     MOVWF PORTB
     BSF PORTA,1
     BCF PORTA,2            ;让第二位数码管显示
LOOP3
     MOVLW TABLE
     MOVWF TABADD
     CLRF COUNTER
     CLRW
LOOP4
     ADDWF TABADD,W
     CALL CONVERT
     MOVWF PORTB
     CALL DELAY
     INCF COUNTER,1
     MOVLW 11
     XORWF COUNTER,0
     BZ LOOPA                  ;第二位显示完后转第一位循环显示
     MOVFW COUNTER
     GOTO LOOP4
;---------------------------------
DELAY                                 ;设置延时常数
       MOVLW    3             
       MOVWF    COUNT0
L1  
       MOVLW    255
       MOVWF    COUNT1
L2  
       MOVLW    255
       MOVWF    COUNT2
L3  
       DECFSZ   COUNT2,1         ;递减循环
       GOTO    L3
       DECFSZ   COUNT1,1
       GOTO    L2
       DECFSZ   COUNT0,1
       GOTO    L1
       RETLW    0
;-------------------- ----------------------------------
CONVERT  
            MOVWF    PC                      ;将W寄存器内的7段显示码地址放入PC  
TABLE                                           ;PC执行新地址指令, 跳到相对的地址执行
                                                ;RETLW指令,将七段显示码存入W后返回        
   RETLW    081H    ;0
  RETLW    0E7H    ;1                               
  RETLW    092H    ;2
  RETLW    0A2H    ;3
  RETLW    0E4H    ;4
  RETLW    0A8H    ;5
  RETLW    088H    ;6
  RETLW    0E3H    ;7
  RETLW    080H    ;8
  RETLW    0A0H    ;9
          RETLW       07FH                      ;.
;----- -----------------------------------------------
     END