Здравствуйте, давайте добавим кнопку к микросхеме 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 много раз).