Пт дек 13, 2024 23:02:10
Пт дек 13, 2024 23:39:04
Пт дек 13, 2024 23:46:52
Пт дек 13, 2024 23:52:28
Сб дек 14, 2024 00:12:19
Сб дек 14, 2024 00:18:41
Пн дек 16, 2024 14:56:52
Пн дек 16, 2024 15:31:27
Ср дек 18, 2024 14:43:41
Ср дек 18, 2024 22:09:48
Чт дек 19, 2024 12:28:48
Чт дек 19, 2024 14:00:30
Пн дек 23, 2024 16:11:49
Пн дек 23, 2024 20:53:45
Пн дек 23, 2024 21:59:34
Пт апр 11, 2025 10:04:47
Пт апр 11, 2025 12:58:08
Пт апр 11, 2025 13:27:37
Чт май 22, 2025 10:01:07
/*
* File: main.c
* Mplab X v5.35
* XC8 compiler v2.50
* For Proteus v8.17
*/
// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#include <xc.h>
#define _XTAL_FREQ 2000000 // 2Mhz xtal
unsigned char array[] = { //Data to port C
0xA5,0x5A,0xF0,0x0F
};
volatile unsigned char flag_up = 0;
volatile unsigned char flag_dn = 0;
volatile unsigned char counter = 0;
unsigned char CheckButton(void) {
if(RB4 == 0) { // If button press
__delay_ms(15); // Anti-bounce protect
if (RB4 == 0) {
flag_up = 1; // Enable flag
} else {
return flag_up;
}
}
if(RB1 == 0) {
__delay_ms(15);
if (RB1 == 0) {
flag_dn = 1; // Enable flag
} else {
return flag_dn;
}
}
return flag_up, flag_dn;
}
unsigned char CountArray (void) {
unsigned char i = counter;
if(CheckButton()) {
if(flag_up == 1) {
flag_up = 0;
if(counter != 4){
(counter)++;
}
}
if(flag_dn == 1) {
flag_dn = 0;
if(counter != 0){
(counter)--;
}
}
}
return i;
}
void main(void) {
TRISC = 0x00; // Dir. for PORTC
PORTC = 0x00; // Data output port
TRISB = 0b00010010; // Dir. for PORTB, button input thr. RB4 and RB1
PORTB = 0x00;
while(1) {
if(CountArray()) {
PORTC=array[counter]; // Write data to PORTC
__delay_ms(100);
}
}
return;
}
Чт май 22, 2025 10:48:00
return flag_up, flag_dn;return flag_dn;return flag_up | flag_dn;