Программирование PIC — получить значение нескольких кнопок на порт

Я изучаю PIC (pic18f4550) и довольно плохо знаком с программированием микроконтроллеров. Я пытаюсь получить значение три кнопки на PORTA и отправить его в светодиодную матрицу 8×8 в виде координат X через 74LS595. Проблема в том, что значение, отображаемое в светодиодной матрице, не изменяется, когда я нажимаю кнопки, чтобы создать другое значение. Я симулирую на Proteus, поэтому я думаю, что мне не нужна функция debounce.
Вот мой код и схема:

#include<p18f4550.h>

#define SCK LATBbits.LATB0
#define DATA PORTBbits.RB1
#define SCL PORTBbits.RB2

void Data_in(unsigned char k){
DATA=k;
SCK=0;
SCK=1;
}

void LatchData(){
SCL=0;
SCL=1;
}

void Send1byte(unsigned char data)
{
unsigned char i,temp;
for(i=0;i<8;i++)
{
temp = data & (1<<i);
if(temp)
{
DATA = 1;
}
else
{
DATA = 0;
}

SCK = 0;
SCK = 1;
}

SCL = 0;
SCL = 1;
}

unsigned char getMatrixX(unsigned char in_X)
{

switch(in_X)
{
case 0:      // the value stuck here
return 0b01111111;
case 1:
return 0b10111111;
case 2:
return 0b11011111;
case 3:
return 0b11101111;
case 4:
return 0b11110111;
case 5:
return 0b11111011;
case 6:
return 0b11111101;
case 7:
return 0b11111110;
default:
return 0b11111111;
}
}

void main()
{

TRISA = 1;
TRISC = 1;

TRISB = 0;
TRISD = 0;

PORTD = 0x80;

while(1){
Send1byte(getMatrixX(LATA));
}
}

Это ссылка на мою схему:
моя схема

Очень ценю любые решения и советы. Извините за мой плохой английский.

2

Решение

здесь реальная проблема — аналоговая функция RA0: RA3, поэтому добавление их исправит:

ADCON1 = 0x0F; // All digital inputs
CMCON = 0x07;  // Comparators off (note this is the POR default)

Спасибо Дэвиду в этом вопросе: https://electronics.stackexchange.com/questions/111614/pic-programming-get-value-of-multiple-buttons-to-a-port/111625?noredirect=1#111625 , он объяснил это очень хорошо.

1

Другие решения


По вопросам рекламы [email protected]