您的位置:首页单片机PIC单片机
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

pic单片机静态数码管键控计数器实例

[日期:2008-06-22 ] [来源:东哥单片机学习网 www.picavr.com 整理 作者:佚名] [字体: (投递新闻)

;**************************************************
  __CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭
;************************************************
PCL       EQU    02H ;定义程序计数器低字节寄存器地址
STATUS    EQU    03H ;定义状态寄存器地址
PORTA     EQU    05H ;定义RA口数据寄存器地址
PORTC     EQU    07H ;定义RC口数据寄存器地址

TRISA     EQU    85H ;定义RA口方向控制寄存器
TRISC     EQU    87H ;定义RC口方向控制寄存器
ADCON1    EQU    9FH  ;定义ADC模块控制寄存器1的地址
;----------------------- STATUS
C         EQU    0   ;定义进位标志位位地址
Z         EQU    2   ;定义0标志位位地址
RP0       EQU    5   ;定义页选位RP0位地址
;-----------------------
COUNTER   EQU    20H  ;定义计数器寄存器
COUNT0    EQU    21H  ;定义廷时变量计数器
COUNT1    EQU    22H  ;定义廷时变量计数器
COUNT2    EQU    23H  ;定义廷时变量计数器
PORTA_B   EQU    25H  ;定义数码管位选寄存器
;--------------------
          ORG 0000H  
          NOP         ;放置一条ICD必需的空操作指令
          GOTO MAIN  
          ORG 0008H  
;******************************************************
CONVERT1                ;取数码管位码
           ADDWF PCL,1  ;地址偏移量加当前PC值
TABLE1
           RETLW 0FDH   ;第一位数码管
           RETLW 0FEH   ;第二位数码管
           RETLW 0F7H   ;第三位数码管
           RETLW 0FBH   ;第四位数码管
           RETLW 0DFH   ;第五位数码管
           RETLW 0EFH   ;第六位数码管
;-------------------- ----------------------------------
CONVERT                              ;取数码管段码
            ADDWF PCL,1              ;地址偏移量加当前PC值
TABLE                                                     
     RETLW 0C0H       ;0
     RETLW 0F9H       ;1                               
     RETLW 0A4H       ;2
     RETLW 0B0H       ;3
     RETLW 99H       ;4
     RETLW 92H       ;5
     RETLW 82H       ;6
     RETLW 0F8H       ;7
     RETLW 80H       ;8
     RETLW 98H       ;9
            RETLW 7FH                   ;.
;*******************************************************
MAIN
            CLRF PORTA              ;初始化IO口
            CLRF PORTC              ;
    
            BSF STATUS,RP0        
            MOVLW 07H
            MOVWF ADCON1            ;设置RA口全部为普通数字IO口
            MOVLW 00H
            MOVWF TRISA             ;设置RA,RC口全部为输出
            MOVWF TRISC
            BCF STATUS,RP0
;----------------------
LOOPA
            MOVLW 0FFH              ;让数码所有划先熄灭
            MOVWF PORTC
            MOVLW 00H
            MOVWF PORTA_B           ;位选寄存器送初值0,让第一位先显示
LOOP1
            MOVFW PORTA_B           ;取位选码
            CALL CONVERT1
            MOVWF PORTA             ;位选码送RA口
            CLRF COUNTER            ;清段码寄存器,让其先显示1
            CLRW
LOOP2
            CALL CONVERT           ;取段码
            MOVWF PORTC            ;段码送RC口显示
            CALL DELAY             ;
            INCF COUNTER,1         ;段码加1直到第10位即“。”
            MOVLW .11              ;
            XORWF COUNTER,0        ;
            BZ LOOPB               ;
            MOVFW COUNTER          ;
            GOTO LOOP2             ;
;-------------------------
LOOPB
            INCF PORTA_B,0         ;位码加1直到第6位显示完又显示第一位
            MOVWF PORTA_B          ;
            XORLW 06H              ;
            BTFSS STATUS,Z         ;
            GOTO LOOP1             ;
            GOTO LOOPA             ;
;---------------------------------廷时子程序------
DELAY  
            MOVLW  .2              ;设置延时常数
     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

;----- -----------------------------------------------
            END

阅读:
录入:petta

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
赞助商广告