⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 84seg2.asm

📁 LED LCD常用小程序
💻 ASM
字号:
;本实例的目的是让大家进一步了解键盘程序,数码管程序。
;本实例的功能是用DIGIT作计数器,按S2一下计数器加1,加到9时计数器不再向上加
;按S3一下计数器减1,减到0时,计数不再减,同时计数器的值送数码管2静态显示
;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           ;
DIGIT   EQU 11H
COUNT1  EQU 12H
COUNT2  EQU 13H
TABADD  EQU 14H
;--------------------
            ORG         0000H
MAIN
            CLRF        PORTA ;初始IO口
            CLRF        PORTB
     
            BSF         STATUS,RP0 ;设置数据寄存器体1
            MOVLW       00011000B ;设置SW2,SW3口为输入、其它口全部为输出
            MOVWF       TRISA 
            CLRW
            MOVWF       TRISB  
            BCF         STATUS,RP0 ;恢复数据寄存器体0

            CLRF        DIGIT      ;清计数器
            GOTO        LOOP1      ;先显示0
;----------------------
LOOP
            BTFSS       PORTA,3    ;扫描键S2是否有按下
            GOTO        SET_1
            BTFSS       PORTA,4    ;扫描键S3是否有按下
            GOTO        SET_2
            GOTO        LOOP       ;循环扫描
LOOP1                              ;数码管显示程序
            MOVLW       TABLE      ;将转换表的首地址存入TABADD
            MOVWF       TABADD     
            MOVFW       DIGIT
            ADDWF       TABADD,W   ;计数值(W)与转换表的起始地址相加
            CALL        CONVERT    ;存入W后调用转换表子程序
            MOVWF       PORTB      ;取出的七段显示码送RB口显示
            BSF         PORTA,1    ;让一位数码管亮
            GOTO        LOOP
;---------------------------------
SET_1
            BTFSC       PORTA,3   ;去除键抖动
            GOTO        LOOP
            CALL        DELAY
            BTFSC       PORTA,3
            GOTO        LOOP
            MOVLW       09H       ;计数值为9后不再加1
            XORWF       DIGIT,0
            BZ          LOOP
            INCF        DIGIT,1   ;不为9计数值加1
            GOTO        LOOP1     ;到数码管显示
;---------------------------------
SET_2
            BTFSC       PORTA,4  ;去除键抖动
            GOTO        LOOP
            CALL        DELAY
            BTFSC       PORTA,4
            GOTO        LOOP
            MOVF        DIGIT,1 ;计算值为0后不再减1
            BZ          LOOP
            DECF        DIGIT,1 ;不为0计数值减1
            GOTO        LOOP1   ;到数码管显示
;---------------------------------
DELAY	  		                    ;设置延时常数
            MOVLW    	150
	    MOVWF    	COUNT1
L2	  	
            MOVLW    	255
	    MOVWF    	COUNT2
L3	  		
            DECFSZ   	COUNT2,1      ;递减循环? 
	    GOTO	   	L3
	    DECFSZ   	COUNT1,1
	    GOTO	   	L2
	    RETLW    	0
;-------------------- ----------------------------------
CONVERT   
            MOVWF    	PC             	    ;将W寄存器内的7段显示码地址放入PC
TABLE                                       ; PC执行新地址指令, 跳到相对的地址执行?          	
	  RETLW    	081H 	    ;0  ;RETLW指令,将七段显示码存入W后返回
	  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
;----- -----------------------------------------------
     END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -