Z
ZS1BFE
Guest
Hej alle,
Jeg bruger Pic16f877 med 4x4keypad.I ikke kan få den afbryder til work.I læse nøglen OK, men så kan ikke forhindre koden fra scanning den samme tast igen, mens nøglen er pressed.I forsøgt at holde det ud af en IF-erklæring, men så skal det kun scanner en gang, når programmet kører ved start ??????
Jeg bruge CCS C.
Her er nogle af de kode jeg wrote.In sidst vil jeg tilføje LCD at vise centrale poster.
For nu alt, hvad jeg behøver, er at scanne nøglerne i var "first_key, etc" tasterne er indtastet via 74C922 og havn B4 bruges til at udløse interrupt fra produktion til rådighed på 74C922.
Data, selv er om B0 - B3.
# sikringer NOLVP
set_tris_d (0x00);
set_tris_c (0x00);
set_tris_b (0xff);
int read_key = 0;
int adgangstast = 5;
int række = 1;
int col = 0;
int b = 0;
int first_key = 4;
int second_key = 5;
int third_key = 6;
int cnt = 1;
int bit = 0;
# int_RB
RB_isr () (
delay_ms (160);
read_key = input_b () & 0b00001111;
if (read_key == 0b00000001)
key = 0;
if (read_key == 0b00001100)
adgangstast = 1;
if (read_key == 0b00001101)
adgangstast = 2;
if (read_key == 0b00001110)
key = 3;
if (read_key == 0b00001000)
adgangstast = 4;
if (read_key == 0b00001001)
adgangstast = 5;
if (read_key == 0b00001010)
adgangstast = 6;
if (read_key == 0b00000100)
adgangstast = 7;
if (read_key == 0b00000101)
adgangstast = 8;
if (read_key == 0b00000110)
adgangstast = 9;
if (read_key == 0b00000000) / / *
adgangstast = 10;
if (read_key == 0b00000010) / / #
adgangstast = 11;
if (read_key == 0b0000) / / A
adgangstast = 12;
if (read_key == 0b00001011) / / B
adgangstast = 13;
if (read_key == 0b00000111) / / C
adgangstast = 14;
if (read_key == 0b00000011) / / D
adgangstast = 15;
bit = 1;
cnt ;
if (cnt> 3)
cnt = 1;
)
void Main () (
port_b_pullups (true);
setup_adc_ports (NO_ANALOGS);
setup_adc (ADC_CLOCK_DIV_2);
setup_spi (FALSE);
setup_psp (PSP_DISABLED);
setup_counters (RTCC_INTERNAL, RTCC_DIV_2);
setup_ccp1 (CCP_OFF);
setup_ccp2 (CCP_OFF);
enable_interrupts (INT_RB);
enable_interrupts (globale);
mens (1)
(
if (input (pin_b4) == 1)
bit = 0;
output_d (nøgle);
delay_ms (200);
if (cnt == 1)
first_key = tast 48;
if (cnt == 2)
second_key = tast 48;
if (cnt == 3)
third_key = tast 48;
)
)
Jeg håber, at dette er klart.
THX
ZS1BFE
Jeg bruger Pic16f877 med 4x4keypad.I ikke kan få den afbryder til work.I læse nøglen OK, men så kan ikke forhindre koden fra scanning den samme tast igen, mens nøglen er pressed.I forsøgt at holde det ud af en IF-erklæring, men så skal det kun scanner en gang, når programmet kører ved start ??????
Jeg bruge CCS C.
Her er nogle af de kode jeg wrote.In sidst vil jeg tilføje LCD at vise centrale poster.
For nu alt, hvad jeg behøver, er at scanne nøglerne i var "first_key, etc" tasterne er indtastet via 74C922 og havn B4 bruges til at udløse interrupt fra produktion til rådighed på 74C922.
Data, selv er om B0 - B3.
# sikringer NOLVP
set_tris_d (0x00);
set_tris_c (0x00);
set_tris_b (0xff);
int read_key = 0;
int adgangstast = 5;
int række = 1;
int col = 0;
int b = 0;
int first_key = 4;
int second_key = 5;
int third_key = 6;
int cnt = 1;
int bit = 0;
# int_RB
RB_isr () (
delay_ms (160);
read_key = input_b () & 0b00001111;
if (read_key == 0b00000001)
key = 0;
if (read_key == 0b00001100)
adgangstast = 1;
if (read_key == 0b00001101)
adgangstast = 2;
if (read_key == 0b00001110)
key = 3;
if (read_key == 0b00001000)
adgangstast = 4;
if (read_key == 0b00001001)
adgangstast = 5;
if (read_key == 0b00001010)
adgangstast = 6;
if (read_key == 0b00000100)
adgangstast = 7;
if (read_key == 0b00000101)
adgangstast = 8;
if (read_key == 0b00000110)
adgangstast = 9;
if (read_key == 0b00000000) / / *
adgangstast = 10;
if (read_key == 0b00000010) / / #
adgangstast = 11;
if (read_key == 0b0000) / / A
adgangstast = 12;
if (read_key == 0b00001011) / / B
adgangstast = 13;
if (read_key == 0b00000111) / / C
adgangstast = 14;
if (read_key == 0b00000011) / / D
adgangstast = 15;
bit = 1;
cnt ;
if (cnt> 3)
cnt = 1;
)
void Main () (
port_b_pullups (true);
setup_adc_ports (NO_ANALOGS);
setup_adc (ADC_CLOCK_DIV_2);
setup_spi (FALSE);
setup_psp (PSP_DISABLED);
setup_counters (RTCC_INTERNAL, RTCC_DIV_2);
setup_ccp1 (CCP_OFF);
setup_ccp2 (CCP_OFF);
enable_interrupts (INT_RB);
enable_interrupts (globale);
mens (1)
(
if (input (pin_b4) == 1)
bit = 0;
output_d (nøgle);
delay_ms (200);
if (cnt == 1)
first_key = tast 48;
if (cnt == 2)
second_key = tast 48;
if (cnt == 3)
third_key = tast 48;
)
)
Jeg håber, at dette er klart.
THX
ZS1BFE