Pic16f630: Семисегментный индикатор (часть 2 добавляем кнопку)

Здравствуйте, давайте добавим кнопку к микросхеме Pic16f630, которая выводит цифры на семисегментном индикаторе, что является продолжением моей предыдущей статьи – Pic16f630: Семисегментный индикатор показываем цифры по порядку.

Схема подключения кнопки к микрочипу:
Кнопку к микроконтроллеру можно подключить двумя основными способами, с подтяжкой линии порта к высокому логическому уровню или низкому через резистор, как показано на картинке ниже.
Я обычно использую первый вариант подключения, можно конечно использовать внутренние подтягивающие резисторы на входах PORTB, но мне еще не доводилось применять такой способ.

Схема подключения для нашего варианта:

Подсоединил кнопку к RA5.

Скачать код в формате asm,hex,inc:


Скачать код.

Код для микросхемы с кнопкой на ассемблере получился следующий:

#include <P16F630.INC>
 __CONFIG (_MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT)  ;Internal osc.

 c1 equ 20
 c2 equ 21

 org 0

Start
 
 BCF   STATUS,RP0  ; select bank 0
 CLRF  PORTA       ; porta=0
 movlw b'11111111'
 movwf CMCON 
 BSF   STATUS,RP0  ; select bank 1
 movlw b'00100000'
 movwf TRISA
 CLRF  TRISC       ; make PORTC pins all output
 BCF   STATUS,RP0  ; select bank 0
 movlw b'00000000'
 movwf  PORTC       ; set portc pins equal to 0

loop
 movlw b'00111111'
 movwf PORTC
movlw b'00000000'
 movwf PORTA
call game

 call delay1
call delay1
call delay1
call delay1
 movlw b'00100100'
 movwf PORTC
movlw b'00000000'
 movwf PORTA
call game
 call delay1
call delay1
call delay1
call delay1
 movlw b'00011110'
 movwf PORTC
movlw b'00000100'
 movwf PORTA
call game
 call delay1
call delay1
call delay1
call delay1
 goto loop

game
 btfss PORTA,RA5 
call de2
 return

delay1
 movlw b'11111111'
 bcf STATUS,RP0
 movwf c2
lc0
 movlw b'11111111'
 movwf c1
lc1
 decfsz c1,1
 goto lc1
 decfsz c2,1
 goto lc0
 return

de2
 
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
call delay1
return



 end

При нажатии кнопки цифра замирает на несколько секунд (так как задержка в данном коде – delay1 – небольшая, то использовал команду call delay1 много раз).

Добавить комментарий