bless
This commit is contained in:
commit
b1173ebc9e
8
.clangd
Normal file
8
.clangd
Normal file
@ -0,0 +1,8 @@
|
||||
CompileFlags:
|
||||
Add:
|
||||
- -I/usr/avr/include
|
||||
- -mmcu=atmega32u4
|
||||
- -DF_CPU=8000000UL
|
||||
- --target=avr
|
||||
Remove:
|
||||
- -m*
|
||||
16
Makefile
Normal file
16
Makefile
Normal file
@ -0,0 +1,16 @@
|
||||
BOARD = adafruit:avr:leonardo
|
||||
PORT = /dev/ttyACM0
|
||||
|
||||
SRC := main.c
|
||||
|
||||
CC = avr-gcc
|
||||
|
||||
INCLUDE := /usr/avr
|
||||
CFLAGS := -mmcu=atmega32u4 -DF_CPU=8000000UL -I$(INCLUDE)
|
||||
|
||||
all:
|
||||
$(CC) $(CFLAGS) -Os $(SRC) -o main.elf
|
||||
avr-objcopy -O ihex main.elf main.hex
|
||||
|
||||
upload: all
|
||||
sudo avrdude -p atmega32u4 -c avr109 -P /dev/ttyACM0 -U flash:w:main.hex
|
||||
93
main.c
Normal file
93
main.c
Normal file
@ -0,0 +1,93 @@
|
||||
#include <stdint.h>
|
||||
#define F_CPU 8000000UL // 8 MHz
|
||||
|
||||
#include <util/delay.h>
|
||||
#include <avr/io.h>
|
||||
|
||||
#define SN74_SER (1 << PC6)
|
||||
#define SN74_RCLK (1 << PB5)
|
||||
#define SN74_SRCLK (1 << PE6)
|
||||
|
||||
#define SEG_DIG1 (1 << PF6)
|
||||
#define SEG_DIG2 (1 << PF5)
|
||||
#define SEG_DIG3 (1 << PF4)
|
||||
#define SEG_DIG4 (1 << PF1)
|
||||
|
||||
void init_3461BS() {
|
||||
DDRF |= SEG_DIG1 | SEG_DIG2 | SEG_DIG3 | SEG_DIG4;
|
||||
|
||||
PORTF &= ~(SEG_DIG1 | SEG_DIG2 | SEG_DIG3 | SEG_DIG4);
|
||||
}
|
||||
|
||||
void init_74HC595() {
|
||||
DDRC |= SN74_SER;
|
||||
DDRB |= SN74_RCLK;
|
||||
DDRE |= SN74_SRCLK;
|
||||
|
||||
PORTB &= ~SN74_RCLK;
|
||||
PORTE &= ~SN74_SRCLK;
|
||||
}
|
||||
|
||||
const uint8_t digit_segments[] = {
|
||||
0b11111110, // 0
|
||||
0b11001111, // 1
|
||||
0b10010010, // 2
|
||||
0b10000110, // 3
|
||||
0b11001100, // 4
|
||||
0b10100100, // 5
|
||||
0b10100000, // 6
|
||||
0b10001101, // 7
|
||||
0b10000000, // 8
|
||||
0b10000100, // 9
|
||||
};
|
||||
|
||||
void send_serial_byte(uint8_t n) {
|
||||
for (int i = 7; i > 0; i--) {
|
||||
if (n & (1 << i)) {
|
||||
PORTC |= SN74_SER;
|
||||
}
|
||||
else {
|
||||
PORTC &= ~SN74_SER;
|
||||
}
|
||||
PORTE |= SN74_SRCLK;
|
||||
_delay_ms(100);
|
||||
PORTE &= ~SN74_SRCLK;
|
||||
PORTC &= ~SN74_SER;
|
||||
_delay_ms(100);
|
||||
}
|
||||
|
||||
PORTB |= SN74_RCLK;
|
||||
_delay_ms(100);
|
||||
PORTB &= ~SN74_RCLK;
|
||||
}
|
||||
|
||||
int main() {
|
||||
init_74HC595();
|
||||
init_3461BS();
|
||||
|
||||
while (1) {
|
||||
for (int i = 0; i < 255; i++) {
|
||||
for(int j = 0; j < 100; j++) {
|
||||
PORTF |= SEG_DIG1;
|
||||
send_serial_byte(digit_segments[i / 1000]);
|
||||
_delay_ms(2);
|
||||
PORTF &= ~SEG_DIG1;
|
||||
|
||||
PORTF |= SEG_DIG2;
|
||||
send_serial_byte(digit_segments[(i / 100) % 10]);
|
||||
_delay_ms(2);
|
||||
PORTF &= ~SEG_DIG2;
|
||||
|
||||
PORTF |= SEG_DIG3;
|
||||
send_serial_byte(digit_segments[(i / 10) % 10]);
|
||||
_delay_ms(2);
|
||||
PORTF &= ~SEG_DIG3;
|
||||
|
||||
PORTF |= SEG_DIG4;
|
||||
send_serial_byte(digit_segments[i % 10]);
|
||||
_delay_ms(2);
|
||||
PORTF &= ~SEG_DIG4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
44
main.hex
Normal file
44
main.hex
Normal file
@ -0,0 +1,44 @@
|
||||
:100000000C9456000C946B000C946B000C946B00D9
|
||||
:100010000C946B000C946B000C946B000C946B00B4
|
||||
:100020000C946B000C946B000C946B000C946B00A4
|
||||
:100030000C946B000C946B000C946B000C946B0094
|
||||
:100040000C946B000C946B000C946B000C946B0084
|
||||
:100050000C946B000C946B000C946B000C946B0074
|
||||
:100060000C946B000C946B000C946B000C946B0064
|
||||
:100070000C946B000C946B000C946B000C946B0054
|
||||
:100080000C946B000C946B000C946B000C946B0044
|
||||
:100090000C946B000C946B000C946B000C946B0034
|
||||
:1000A0000C946B000C946B000C946B0011241FBE1D
|
||||
:1000B000CFEFDAE0DEBFCDBF11E0A0E0B1E0E4E9D0
|
||||
:1000C000F2E002C005900D92AA30B107D9F70E9464
|
||||
:1000D000AD000C9448010C94000080B3826780BB93
|
||||
:1000E00081B38D7881BB08953E9A259A6E9A2D989A
|
||||
:1000F0007698089527E030E090E0AC01022E02C02F
|
||||
:10010000559547950A94E2F740FF25C0469A769A9E
|
||||
:100110004FEF50E762E0415050406040E1F700C0CF
|
||||
:100120000000769846984FEF50E762E0415050400B
|
||||
:100130006040E1F700C0000021503040F1F62D9AF8
|
||||
:100140008FEF90E722E0815090402040E1F700C01F
|
||||
:1001500000002D9808954698DACFCDB7DEB72897DE
|
||||
:100160000FB6F894DEBF0FBECDBF0E9474000E9490
|
||||
:100170006D000AE010E01F8218868F81988564E682
|
||||
:1001800070E00E942001FB018F819885B8010E94D8
|
||||
:1001900020019C01CB01B8010E94200144E6E42E1D
|
||||
:1001A000F12CAF0140505F4F49835A83FC01E0506E
|
||||
:1001B000FF4FEB83FC83A90140505F4F4D835E836B
|
||||
:1001C0008E9A8EEF0E947A008FE99FE00197F1F7F7
|
||||
:1001D00000C000008E988D9AE981FA8180810E948A
|
||||
:1001E0007A008FE99FE00197F1F700C000008D9839
|
||||
:1001F0008C9AEB81FC8180810E947A008FE99FE0DC
|
||||
:100200000197F1F700C000008C98899AED81FE817A
|
||||
:1002100080810E947A008FE99FE00197F1F700C08A
|
||||
:100220000000899891E0E91AF10851F6EF81F8850C
|
||||
:100230003196EF83F887EF3FF10509F09ECF9BCF12
|
||||
:1002400097FB072E16F4009407D077FD09D00E9483
|
||||
:10025000340107FC05D03EF4909581959F4F089599
|
||||
:10026000709561957F4F0895AA1BBB1B51E107C094
|
||||
:10027000AA1FBB1FA617B70710F0A61BB70B881F36
|
||||
:10028000991F5A95A9F780959095BC01CD010895C5
|
||||
:04029000F894FFCF10
|
||||
:0A029400FECF9286CCA4A08D8084DA
|
||||
:00000001FF
|
||||
Loading…
x
Reference in New Issue
Block a user