13 Dec 11:11
dziala
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_gpio.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/rom.h"
#define GPIO_PINS_ALL (GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7)
uint8_t nwd(uint8_t a, uint8_t b) {
while (b != 0) {
uint8_t temp = b;
b = a % b;
a = temp;
}
return a;
}
uint8_t nww(uint8_t a, uint8_t b) {
return (a * b) / nwd(a, b);
}
int main(void)
{
uint8_t a = 0;
uint8_t e = 0;
uint8_t g = 0;
uint8_t nwd_result = 0;
uint8_t nww_result = 0;
ROM_SysCtlClockSet(SYSCTL_SYSDIV_20 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);
// Wlaczenie GPIO
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
// Ustawienie wyjsc
GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PINS_ALL);
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PINS_ALL);
GPIOPinTypeGPIOOutput(GPIO_PORTG_BASE, GPIO_PINS_ALL);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PINS_ALL);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PINS_ALL);
// Ustawienie wejsc
GPIOPinTypeGPIOInput(GPIO_PORTH_BASE, GPIO_PINS_ALL);
GPIOPinTypeGPIOInput(GPIO_PORTJ_BASE, GPIO_PINS_ALL);
for (;;)
{
if (GPIOPinRead(GPIO_PORTH_BASE, GPIO_PIN_7)) {
a++;
while (GPIOPinRead(GPIO_PORTH_BASE, GPIO_PINS_ALL));
}
if (GPIOPinRead(GPIO_PORTJ_BASE, GPIO_PINS_ALL)) {
e++;
while (GPIOPinRead(GPIO_PORTJ_BASE, GPIO_PINS_ALL));
}
g = a - e;
//NWD i NWW
if (a != 0 && e != 0) {
nwd_result = nwd(a, e);
nww_result = nww(a, e);
}
// Zapisanie wyników do portów LED
GPIOPinWrite(GPIO_PORTA_BASE, 0xFF, a);
GPIOPinWrite(GPIO_PORTE_BASE, 0xFF, e);
GPIOPinWrite(GPIO_PORTG_BASE, 0xFF, g);
// Wyświetlanie wyników NWD i NWW
GPIOPinWrite(GPIO_PORTB_BASE, 0xFF, nwd_result);
GPIOPinWrite(GPIO_PORTF_BASE, 0xFF, nww_result);
// Opóźnienie
SysCtlDelay(SysCtlClockGet() / 2);
}
return 0;
}