diff --git a/2ano/2semestre/ac2/aula05/AC2-P-Aula05.pdf b/2ano/2semestre/ac2/aula05/AC2-P-Aula05.pdf new file mode 100644 index 0000000..a407490 Binary files /dev/null and b/2ano/2semestre/ac2/aula05/AC2-P-Aula05.pdf differ diff --git a/2ano/2semestre/ac2/aula05/part1.c b/2ano/2semestre/ac2/aula05/part1.c new file mode 100644 index 0000000..39a99b3 --- /dev/null +++ b/2ano/2semestre/ac2/aula05/part1.c @@ -0,0 +1,44 @@ +#include + +const unsigned int dis7Scodes[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, + 0xFD, 0x07, 0x7F, 0x6F, 0x77, 0xFC, + 0x39, 0x5E, 0xF9, 0xF1}; + +typedef enum { HIGH, LOW } flag; + +void send2displays(unsigned char value) { + static flag f = LOW; + + if (f == HIGH) { + LATD = (LATD & 0xFF9F) | 0x0040; + LATB = (LATB & 0x80FF) | dis7Scodes[value >> 4] << 8; + f = LOW; + } else { + LATD = (LATD & 0xFF9F) | 0x0020; + LATB = (LATB & 0x80FF) | dis7Scodes[value & 0x0F] << 8; + f = HIGH; + } +} + +void delay(unsigned int ms) { + resetCoreTimer(); + while (readCoreTimer() < ms * 20000); +} + +int main() { + TRISB &= 0x80FF; + TRISD &= 0xFF9F; + + int counter = 0; + + while (1) { + int i = 0; + do { + send2displays(counter % 255); + delay(10); + } while (++i < 20); + counter++; + } + + return 0; +} diff --git a/2ano/2semestre/ac2/aula05/part2.c b/2ano/2semestre/ac2/aula05/part2.c new file mode 100644 index 0000000..0fd2fde --- /dev/null +++ b/2ano/2semestre/ac2/aula05/part2.c @@ -0,0 +1,64 @@ +#include + +const unsigned int dis7Scodes[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, + 0xFD, 0x07, 0x7F, 0x6F, 0x77, 0xFC, + 0x39, 0x5E, 0xF9, 0xF1}; + +typedef enum { HIGH, LOW } flag; + +unsigned char toBdc(unsigned char value) { + return ((value / 10) << 4) + (value % 10); +} + +void send2displays(unsigned char value) { + static flag f = LOW; + value = toBdc(value); + unsigned char high = dis7Scodes[value >> 4]; + unsigned char low = dis7Scodes[value & 0x0F]; + + if (f == HIGH) { + LATD = (LATD & 0xFF9F) | 0x0040; + LATB = (LATB & 0x80FF) | high << 8; + f = LOW; + } else { + LATD = (LATD & 0xFF9F) | 0x0020; + LATB = (LATB & 0x80FF) | low << 8; + f = HIGH; + } +} + +void delay(unsigned int ms) { + resetCoreTimer(); + while (readCoreTimer() < ms * 20000); +} + +int main() { + TRISB = (TRISB & 0x80FF) | 0x0001; + TRISD &= 0xFF9F; + TRISC &= 0xBFFF; + + int counter = 0; + int toggler = 0; + + while (1) { + int i = 0; + int sw0 = PORTB & 0x0001; + do { + send2displays(counter); + delay(10); + LATC &= 0xBFFF; + if (toggler++ < 500) LATC |= 0x4000; + } while (++i < (sw0 ? 20 : 50)); + counter += sw0 ? 1 : -1; + if (counter < 0) { + counter = 59; + toggler = 0; + } + if (counter > 59) { + counter = 0; + toggler = 0; + } + } + + return 0; +}