This commit is contained in:
victor 2025-10-13 12:34:02 +02:00
commit b1173ebc9e
5 changed files with 161 additions and 0 deletions

8
.clangd Normal file
View File

@ -0,0 +1,8 @@
CompileFlags:
Add:
- -I/usr/avr/include
- -mmcu=atmega32u4
- -DF_CPU=8000000UL
- --target=avr
Remove:
- -m*

16
Makefile Normal file
View 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
View 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;
}
}
}
}

BIN
main.elf Executable file

Binary file not shown.

44
main.hex Normal file
View 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