Não estou entendendo como inicializar o PORTb do esquema abaixo:
http://www.piclist.org/techref/microchip/4x4key4io8diode.htm
Alguem pode me explicar como fazer a varredura?
Pode ser em ASM ou C.
Moderadores: 51, Renie, gpenga
#include<P18F2550.H>
#include <delays.h>
#pragma config FOSC = HS
#pragma config CPUDIV = OSC2_PLL3
#pragma config IESO = OFF
#pragma config PWRT = ON
#pragma config WDT = OFF
#pragma config BOR = OFF
#pragma config LVP = OFF
//......................................................
volatile unsigned char KEYS,COUNT,KEYCODE;
void SCAN2();
//-----------------------------------------------
void SCAN2(){
TRISA = 0B00001110;
KEYS = PORTA & 0X0F;
if (KEYS != TRISA){
switch (KEYS) {
case 0x02:PORTB = 0x01;break;
case 0x04:PORTB = 0x02;break;
case 0x06:PORTB = 0x04;break;
case 0x08:PORTB = 0x08;break;
}
}
TRISA = 0B00001101;
KEYS = PORTA & 0X0F;
if (KEYS != TRISA){
switch (KEYS) {
case 0x01:PORTB = 0x10;break;
case 0x05:PORTB = 0x20;break;
case 0x04:PORTB = 0x40;break;
case 0x09:PORTB = 0x80;break;
}
}
TRISA = 0B00001011;
KEYS = PORTA & 0X0F;
if (KEYS != TRISA){
switch (KEYS) {
case 0x03:PORTB = 0xFF;break;
case 0x01:PORTB = 0xFE;break;
case 0x02:PORTB = 0xFC;break;
case 0x09:PORTB = 0xF8;break;
}
}
TRISA = 0B00000111;
KEYS = PORTA & 0X0F;
if (KEYS != TRISA){
switch (KEYS) {
case 0x03:PORTB = 0xF0;break;
case 0x05:PORTB = 0xE0;break;
case 0x06:PORTB = 0xC0;break;
case 0x01:PORTB = 0x80;break;
}
}
}
//---------------------------------------------------------
void main(){
// INTCON2bits.RBPU = 0;
ADCON1 = 0X0F;
CMCON = 0X07;
TRISB = 0b00000000;
TRISA = 0b00001111;
PORTA = 0X00;
PORTB = 0X00;
while(1){
SCAN2();
Delay10TCYx(200);
}
}
Voltar para Circuitos Diversos
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante