找回密码
 立即注册

QQ登录

只需一步,快速开始

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

【推荐】ST套件数码管静态

[复制链接]
ID:4257 发表于 2008-8-14 15:40 | 显示全部楼层 |阅读模式
ST套件数码管静态显示试验(学习查表程序)
;本实验的目的是让大家熟悉数码管,学习怎样应用查表程序,本程序的功能是要用PIC来实现一位
;数码管显示,程序复位后先由第一个数码管从0循环显示到9,再由第二个数码管从0显示到9,然后再
;由第一个数码管显示返复循环。程序中用一个计数器由0计数到9,同时将其在LED上显示出来。该例给出
;计数值与显示码的转换方法。
;PIC单片机学习网-----http://www.pic16.com
;烧写时应注意:配置位已经在程序中写明,加载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
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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