📄 84seg2.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 + -