From 81b5ccfbe886ee562ab0f93ec4c02f55d5eea1af Mon Sep 17 00:00:00 2001 From: Matthias Blankertz Date: Sat, 10 Jun 2023 00:33:01 +0200 Subject: [PATCH] Add LCD driver board and lcdtest application --- CMakeLists.txt | 25 +- hw/rp2040_radio/rp2040_radio.kicad_pcb | 2 + hw/rp2040_radio/rp2040_radio.kicad_prl | 77 + hw/rp2040_radio/rp2040_radio.kicad_pro | 332 +++ hw/rp2040_radio/rp2040_radio.kicad_sch | 3347 ++++++++++++++++++++++++ hw/rp2040_radio/sym-lib-table | 4 + src/{main.c => app_main.c} | 124 +- src/fonts.h | 354 +++ src/lcdbus.pio | 9 + src/lcdtest.c | 215 ++ 10 files changed, 4419 insertions(+), 70 deletions(-) create mode 100644 hw/rp2040_radio/rp2040_radio.kicad_pcb create mode 100644 hw/rp2040_radio/rp2040_radio.kicad_prl create mode 100644 hw/rp2040_radio/rp2040_radio.kicad_pro create mode 100644 hw/rp2040_radio/rp2040_radio.kicad_sch create mode 100644 hw/rp2040_radio/sym-lib-table rename src/{main.c => app_main.c} (78%) create mode 100644 src/fonts.h create mode 100644 src/lcdbus.pio create mode 100644 src/lcdtest.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 976656b..a0c14fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,24 +9,24 @@ project(rp2040_hid) # initialize the Raspberry Pi Pico SDK pico_sdk_init() -add_executable(rp2040_hid +add_executable(rp2040_app src/buttons.c - src/main.c + src/app_main.c src/rotary.c src/sevenseg.c src/statusleds.c src/usb_config.c ) -pico_generate_pio_header(rp2040_hid ${CMAKE_CURRENT_LIST_DIR}/src/sevenseg.pio) -pico_generate_pio_header(rp2040_hid ${CMAKE_CURRENT_LIST_DIR}/src/shift_in.pio) -pico_generate_pio_header(rp2040_hid ${CMAKE_CURRENT_LIST_DIR}/src/statusleds.pio) -target_link_libraries(rp2040_hid pico_stdlib pico_unique_id tinyusb_device tinyusb_board hardware_pio) -target_include_directories(rp2040_hid PRIVATE src) +pico_generate_pio_header(rp2040_app ${CMAKE_CURRENT_LIST_DIR}/src/sevenseg.pio) +pico_generate_pio_header(rp2040_app ${CMAKE_CURRENT_LIST_DIR}/src/shift_in.pio) +pico_generate_pio_header(rp2040_app ${CMAKE_CURRENT_LIST_DIR}/src/statusleds.pio) +target_link_libraries(rp2040_app pico_stdlib pico_unique_id tinyusb_device tinyusb_board hardware_pio) +target_include_directories(rp2040_app PRIVATE src) # create map/bin/hex/uf2 file in addition to ELF. -pico_add_extra_outputs(rp2040_hid) +pico_add_extra_outputs(rp2040_app) add_executable(ledtest src/buttons.c @@ -41,3 +41,12 @@ pico_generate_pio_header(ledtest ${CMAKE_CURRENT_LIST_DIR}/src/shift_in.pio) pico_generate_pio_header(ledtest ${CMAKE_CURRENT_LIST_DIR}/src/statusleds.pio) target_link_libraries(ledtest pico_stdlib hardware_pio) pico_add_extra_outputs(ledtest) + +add_executable(lcdtest + src/lcdtest.c +) + +pico_generate_pio_header(lcdtest ${CMAKE_CURRENT_LIST_DIR}/src/lcdbus.pio) +target_link_libraries(lcdtest pico_stdlib hardware_pio) +pico_add_extra_outputs(lcdtest) + diff --git a/hw/rp2040_radio/rp2040_radio.kicad_pcb b/hw/rp2040_radio/rp2040_radio.kicad_pcb new file mode 100644 index 0000000..2b8ba10 --- /dev/null +++ b/hw/rp2040_radio/rp2040_radio.kicad_pcb @@ -0,0 +1,2 @@ +(kicad_pcb (version 20221018) (generator pcbnew) +) \ No newline at end of file diff --git a/hw/rp2040_radio/rp2040_radio.kicad_prl b/hw/rp2040_radio/rp2040_radio.kicad_prl new file mode 100644 index 0000000..2e0fe9f --- /dev/null +++ b/hw/rp2040_radio/rp2040_radio.kicad_prl @@ -0,0 +1,77 @@ +{ + "board": { + "active_layer": 0, + "active_layer_preset": "", + "auto_track_width": true, + "hidden_netclasses": [], + "hidden_nets": [], + "high_contrast_mode": 0, + "net_color_mode": 1, + "opacity": { + "images": 0.6, + "pads": 1.0, + "tracks": 1.0, + "vias": 1.0, + "zones": 0.6 + }, + "selection_filter": { + "dimensions": true, + "footprints": true, + "graphics": true, + "keepouts": true, + "lockedItems": false, + "otherItems": true, + "pads": true, + "text": true, + "tracks": true, + "vias": true, + "zones": true + }, + "visible_items": [ + 0, + 1, + 2, + 3, + 4, + 5, + 8, + 9, + 10, + 11, + 12, + 13, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 39, + 40 + ], + "visible_layers": "fffffff_ffffffff", + "zone_display_mode": 0 + }, + "meta": { + "filename": "rp2040_radio.kicad_prl", + "version": 3 + }, + "project": { + "files": [] + } +} diff --git a/hw/rp2040_radio/rp2040_radio.kicad_pro b/hw/rp2040_radio/rp2040_radio.kicad_pro new file mode 100644 index 0000000..c95b606 --- /dev/null +++ b/hw/rp2040_radio/rp2040_radio.kicad_pro @@ -0,0 +1,332 @@ +{ + "board": { + "3dviewports": [], + "design_settings": { + "defaults": { + "board_outline_line_width": 0.1, + "copper_line_width": 0.2, + "copper_text_size_h": 1.5, + "copper_text_size_v": 1.5, + "copper_text_thickness": 0.3, + "other_line_width": 0.15, + "silk_line_width": 0.15, + "silk_text_size_h": 1.0, + "silk_text_size_v": 1.0, + "silk_text_thickness": 0.15 + }, + "diff_pair_dimensions": [], + "drc_exclusions": [], + "rules": { + "min_copper_edge_clearance": 0.0, + "solder_mask_clearance": 0.0, + "solder_mask_min_width": 0.0 + }, + "track_widths": [], + "via_dimensions": [] + }, + "layer_presets": [], + "viewports": [] + }, + "boards": [], + "cvpcb": { + "equivalence_files": [] + }, + "erc": { + "erc_exclusions": [], + "meta": { + "version": 0 + }, + "pin_map": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 2 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 2, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ] + ], + "rule_severities": { + "bus_definition_conflict": "error", + "bus_entry_needed": "error", + "bus_to_bus_conflict": "error", + "bus_to_net_conflict": "error", + "conflicting_netclasses": "error", + "different_unit_footprint": "error", + "different_unit_net": "error", + "duplicate_reference": "error", + "duplicate_sheet_names": "error", + "endpoint_off_grid": "warning", + "extra_units": "error", + "global_label_dangling": "warning", + "hier_label_mismatch": "error", + "label_dangling": "error", + "lib_symbol_issues": "warning", + "missing_bidi_pin": "warning", + "missing_input_pin": "warning", + "missing_power_pin": "error", + "missing_unit": "warning", + "multiple_net_names": "warning", + "net_not_bus_member": "warning", + "no_connect_connected": "warning", + "no_connect_dangling": "warning", + "pin_not_connected": "error", + "pin_not_driven": "error", + "pin_to_pin": "warning", + "power_pin_not_driven": "error", + "similar_labels": "warning", + "simulation_model_issue": "ignore", + "unannotated": "error", + "unit_value_mismatch": "error", + "unresolved_variable": "error", + "wire_dangling": "error" + } + }, + "libraries": { + "pinned_footprint_libs": [], + "pinned_symbol_libs": [] + }, + "meta": { + "filename": "rp2040_radio.kicad_pro", + "version": 1 + }, + "net_settings": { + "classes": [ + { + "bus_width": 12, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "Default", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgba(0, 0, 0, 0.000)", + "track_width": 0.25, + "via_diameter": 0.8, + "via_drill": 0.4, + "wire_width": 6 + } + ], + "meta": { + "version": 3 + }, + "net_colors": null, + "netclass_assignments": null, + "netclass_patterns": [] + }, + "pcbnew": { + "last_paths": { + "gencad": "", + "idf": "", + "netlist": "", + "specctra_dsn": "", + "step": "", + "vrml": "" + }, + "page_layout_descr_file": "" + }, + "schematic": { + "annotate_start_num": 0, + "drawing": { + "dashed_lines_dash_length_ratio": 12.0, + "dashed_lines_gap_length_ratio": 3.0, + "default_line_thickness": 6.0, + "default_text_size": 50.0, + "field_names": [], + "intersheets_ref_own_page": false, + "intersheets_ref_prefix": "", + "intersheets_ref_short": false, + "intersheets_ref_show": false, + "intersheets_ref_suffix": "", + "junction_size_choice": 3, + "label_size_ratio": 0.375, + "pin_symbol_size": 25.0, + "text_offset_ratio": 0.15 + }, + "legacy_lib_dir": "", + "legacy_lib_list": [], + "meta": { + "version": 1 + }, + "net_format_name": "", + "page_layout_descr_file": "", + "plot_directory": "", + "spice_current_sheet_as_root": false, + "spice_external_command": "spice \"%I\"", + "spice_model_current_sheet_as_root": true, + "spice_save_all_currents": false, + "spice_save_all_voltages": false, + "subpart_first_id": 65, + "subpart_id_separator": 0 + }, + "sheets": [ + [ + "a850cd64-290c-40af-a783-f83343c37ff2", + "" + ] + ], + "text_variables": {} +} diff --git a/hw/rp2040_radio/rp2040_radio.kicad_sch b/hw/rp2040_radio/rp2040_radio.kicad_sch new file mode 100644 index 0000000..84993ab --- /dev/null +++ b/hw/rp2040_radio/rp2040_radio.kicad_sch @@ -0,0 +1,3347 @@ +(kicad_sch (version 20230121) (generator eeschema) + + (uuid a850cd64-290c-40af-a783-f83343c37ff2) + + (paper "A4") + + (lib_symbols + (symbol "74xx:74HC165" (in_bom yes) (on_board yes) + (property "Reference" "U" (at -7.62 19.05 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "74HC165" (at -7.62 -21.59 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "https://assets.nexperia.com/documents/data-sheet/74HC_HCT165.pdf" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "8 bit shift register parallel load cmos" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Shift Register, 8-bit, Parallel Load" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "DIP?16* SO*16*3.9x9.9mm*P1.27mm* SSOP*16*5.3x6.2mm*P0.65mm* TSSOP*16*4.4x5mm*P0.65*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "74HC165_1_0" + (pin input line (at -12.7 -10.16 0) (length 5.08) + (name "~{PL}" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -12.7 15.24 0) (length 5.08) + (name "DS" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -12.7 12.7 0) (length 5.08) + (name "D0" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -12.7 10.16 0) (length 5.08) + (name "D1" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -12.7 7.62 0) (length 5.08) + (name "D2" (effects (font (size 1.27 1.27)))) + (number "13" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -12.7 5.08 0) (length 5.08) + (name "D3" (effects (font (size 1.27 1.27)))) + (number "14" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -12.7 -17.78 0) (length 5.08) + (name "~{CE}" (effects (font (size 1.27 1.27)))) + (number "15" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 0 22.86 270) (length 5.08) + (name "VCC" (effects (font (size 1.27 1.27)))) + (number "16" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -12.7 -15.24 0) (length 5.08) + (name "CP" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -12.7 2.54 0) (length 5.08) + (name "D4" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -12.7 0 0) (length 5.08) + (name "D5" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -12.7 -2.54 0) (length 5.08) + (name "D6" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -12.7 -5.08 0) (length 5.08) + (name "D7" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + (pin output line (at 12.7 12.7 180) (length 5.08) + (name "~{Q7}" (effects (font (size 1.27 1.27)))) + (number "7" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 0 -25.4 90) (length 5.08) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin output line (at 12.7 15.24 180) (length 5.08) + (name "Q7" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + ) + (symbol "74HC165_1_1" + (rectangle (start -7.62 17.78) (end 7.62 -20.32) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + ) + ) + (symbol "74xx:74HC595" (in_bom yes) (on_board yes) + (property "Reference" "U" (at -7.62 13.97 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "74HC595" (at -7.62 -16.51 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/sn74hc595.pdf" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "HCMOS SR 3State" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "8-bit serial in/out Shift Register 3-State Outputs" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* SOIC*5.3x10.2mm*P1.27mm* SOIC*7.5x10.3mm*P1.27mm*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "74HC595_1_0" + (pin tri_state line (at 10.16 7.62 180) (length 2.54) + (name "QB" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -10.16 2.54 0) (length 2.54) + (name "~{SRCLR}" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -10.16 5.08 0) (length 2.54) + (name "SRCLK" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -10.16 -2.54 0) (length 2.54) + (name "RCLK" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -10.16 -5.08 0) (length 2.54) + (name "~{OE}" (effects (font (size 1.27 1.27)))) + (number "13" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -10.16 10.16 0) (length 2.54) + (name "SER" (effects (font (size 1.27 1.27)))) + (number "14" (effects (font (size 1.27 1.27)))) + ) + (pin tri_state line (at 10.16 10.16 180) (length 2.54) + (name "QA" (effects (font (size 1.27 1.27)))) + (number "15" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 0 15.24 270) (length 2.54) + (name "VCC" (effects (font (size 1.27 1.27)))) + (number "16" (effects (font (size 1.27 1.27)))) + ) + (pin tri_state line (at 10.16 5.08 180) (length 2.54) + (name "QC" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin tri_state line (at 10.16 2.54 180) (length 2.54) + (name "QD" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin tri_state line (at 10.16 0 180) (length 2.54) + (name "QE" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin tri_state line (at 10.16 -2.54 180) (length 2.54) + (name "QF" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin tri_state line (at 10.16 -5.08 180) (length 2.54) + (name "QG" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + (pin tri_state line (at 10.16 -7.62 180) (length 2.54) + (name "QH" (effects (font (size 1.27 1.27)))) + (number "7" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 0 -17.78 90) (length 2.54) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin output line (at 10.16 -12.7 180) (length 2.54) + (name "QH'" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + ) + (symbol "74HC595_1_1" + (rectangle (start -7.62 12.7) (end 7.62 -15.24) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + ) + ) + (symbol "74xx:74LS00" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) + (property "Reference" "U" (at 0 1.27 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "74LS00" (at 0 -1.27 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "http://www.ti.com/lit/gpn/sn74ls00" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_locked" "" (at 0 0 0) + (effects (font (size 1.27 1.27))) + ) + (property "ki_keywords" "TTL nand 2-input" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "quad 2-input NAND gate" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "DIP*W7.62mm* SO14*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "74LS00_1_1" + (arc (start 0 -3.81) (mid 3.7934 0) (end 0 3.81) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy 0 3.81) + (xy -3.81 3.81) + (xy -3.81 -3.81) + (xy 0 -3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (pin input line (at -7.62 2.54 0) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -7.62 -2.54 0) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin output inverted (at 7.62 0 180) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + ) + (symbol "74LS00_1_2" + (arc (start -3.81 -3.81) (mid -2.589 0) (end -3.81 3.81) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (arc (start -0.6096 -3.81) (mid 2.1842 -2.5851) (end 3.81 0) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -3.81 -3.81) + (xy -0.635 -3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -3.81 3.81) + (xy -0.635 3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -0.635 3.81) + (xy -3.81 3.81) + (xy -3.81 3.81) + (xy -3.556 3.4036) + (xy -3.0226 2.2606) + (xy -2.6924 1.0414) + (xy -2.6162 -0.254) + (xy -2.7686 -1.4986) + (xy -3.175 -2.7178) + (xy -3.81 -3.81) + (xy -3.81 -3.81) + (xy -0.635 -3.81) + ) + (stroke (width -25.4) (type default)) + (fill (type background)) + ) + (arc (start 3.81 0) (mid 2.1915 2.5936) (end -0.6096 3.81) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (pin input inverted (at -7.62 2.54 0) (length 4.318) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin input inverted (at -7.62 -2.54 0) (length 4.318) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin output line (at 7.62 0 180) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + ) + (symbol "74LS00_2_1" + (arc (start 0 -3.81) (mid 3.7934 0) (end 0 3.81) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy 0 3.81) + (xy -3.81 3.81) + (xy -3.81 -3.81) + (xy 0 -3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (pin input line (at -7.62 2.54 0) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -7.62 -2.54 0) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin output inverted (at 7.62 0 180) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + ) + (symbol "74LS00_2_2" + (arc (start -3.81 -3.81) (mid -2.589 0) (end -3.81 3.81) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (arc (start -0.6096 -3.81) (mid 2.1842 -2.5851) (end 3.81 0) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -3.81 -3.81) + (xy -0.635 -3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -3.81 3.81) + (xy -0.635 3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -0.635 3.81) + (xy -3.81 3.81) + (xy -3.81 3.81) + (xy -3.556 3.4036) + (xy -3.0226 2.2606) + (xy -2.6924 1.0414) + (xy -2.6162 -0.254) + (xy -2.7686 -1.4986) + (xy -3.175 -2.7178) + (xy -3.81 -3.81) + (xy -3.81 -3.81) + (xy -0.635 -3.81) + ) + (stroke (width -25.4) (type default)) + (fill (type background)) + ) + (arc (start 3.81 0) (mid 2.1915 2.5936) (end -0.6096 3.81) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (pin input inverted (at -7.62 2.54 0) (length 4.318) + (name "~" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin input inverted (at -7.62 -2.54 0) (length 4.318) + (name "~" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin output line (at 7.62 0 180) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + ) + (symbol "74LS00_3_1" + (arc (start 0 -3.81) (mid 3.7934 0) (end 0 3.81) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy 0 3.81) + (xy -3.81 3.81) + (xy -3.81 -3.81) + (xy 0 -3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (pin input line (at -7.62 -2.54 0) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin output inverted (at 7.62 0 180) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -7.62 2.54 0) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + ) + (symbol "74LS00_3_2" + (arc (start -3.81 -3.81) (mid -2.589 0) (end -3.81 3.81) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (arc (start -0.6096 -3.81) (mid 2.1842 -2.5851) (end 3.81 0) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -3.81 -3.81) + (xy -0.635 -3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -3.81 3.81) + (xy -0.635 3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -0.635 3.81) + (xy -3.81 3.81) + (xy -3.81 3.81) + (xy -3.556 3.4036) + (xy -3.0226 2.2606) + (xy -2.6924 1.0414) + (xy -2.6162 -0.254) + (xy -2.7686 -1.4986) + (xy -3.175 -2.7178) + (xy -3.81 -3.81) + (xy -3.81 -3.81) + (xy -0.635 -3.81) + ) + (stroke (width -25.4) (type default)) + (fill (type background)) + ) + (arc (start 3.81 0) (mid 2.1915 2.5936) (end -0.6096 3.81) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (pin input inverted (at -7.62 -2.54 0) (length 4.318) + (name "~" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin output line (at 7.62 0 180) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin input inverted (at -7.62 2.54 0) (length 4.318) + (name "~" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + ) + (symbol "74LS00_4_1" + (arc (start 0 -3.81) (mid 3.7934 0) (end 0 3.81) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy 0 3.81) + (xy -3.81 3.81) + (xy -3.81 -3.81) + (xy 0 -3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (pin output inverted (at 7.62 0 180) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -7.62 2.54 0) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -7.62 -2.54 0) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "13" (effects (font (size 1.27 1.27)))) + ) + ) + (symbol "74LS00_4_2" + (arc (start -3.81 -3.81) (mid -2.589 0) (end -3.81 3.81) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + (arc (start -0.6096 -3.81) (mid 2.1842 -2.5851) (end 3.81 0) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -3.81 -3.81) + (xy -0.635 -3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -3.81 3.81) + (xy -0.635 3.81) + ) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (polyline + (pts + (xy -0.635 3.81) + (xy -3.81 3.81) + (xy -3.81 3.81) + (xy -3.556 3.4036) + (xy -3.0226 2.2606) + (xy -2.6924 1.0414) + (xy -2.6162 -0.254) + (xy -2.7686 -1.4986) + (xy -3.175 -2.7178) + (xy -3.81 -3.81) + (xy -3.81 -3.81) + (xy -0.635 -3.81) + ) + (stroke (width -25.4) (type default)) + (fill (type background)) + ) + (arc (start 3.81 0) (mid 2.1915 2.5936) (end -0.6096 3.81) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (pin output line (at 7.62 0 180) (length 3.81) + (name "~" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin input inverted (at -7.62 2.54 0) (length 4.318) + (name "~" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin input inverted (at -7.62 -2.54 0) (length 4.318) + (name "~" (effects (font (size 1.27 1.27)))) + (number "13" (effects (font (size 1.27 1.27)))) + ) + ) + (symbol "74LS00_5_0" + (pin power_in line (at 0 12.7 270) (length 5.08) + (name "VCC" (effects (font (size 1.27 1.27)))) + (number "14" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 0 -12.7 90) (length 5.08) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "7" (effects (font (size 1.27 1.27)))) + ) + ) + (symbol "74LS00_5_1" + (rectangle (start -5.08 7.62) (end 5.08 -7.62) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + ) + ) + (symbol "Connector_Generic:Conn_02x20_Top_Bottom" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "J" (at 1.27 25.4 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Conn_02x20_Top_Bottom" (at 1.27 -27.94 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "connector" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Generic connector, double row, 02x20, top/bottom pin numbering scheme (row 1: 1...pins_per_row, row2: pins_per_row+1 ... num_pins), script generated (kicad-library-utils/schlib/autogen/connector/)" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Connector*:*_2x??_*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "Conn_02x20_Top_Bottom_1_1" + (rectangle (start -1.27 -25.273) (end 0 -25.527) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 -22.733) (end 0 -22.987) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 -20.193) (end 0 -20.447) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 -17.653) (end 0 -17.907) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 -15.113) (end 0 -15.367) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 -12.573) (end 0 -12.827) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 -10.033) (end 0 -10.287) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 -7.493) (end 0 -7.747) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 -4.953) (end 0 -5.207) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 -2.413) (end 0 -2.667) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 0.127) (end 0 -0.127) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 2.667) (end 0 2.413) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 5.207) (end 0 4.953) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 7.747) (end 0 7.493) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 10.287) (end 0 10.033) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 12.827) (end 0 12.573) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 15.367) (end 0 15.113) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 17.907) (end 0 17.653) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 20.447) (end 0 20.193) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 22.987) (end 0 22.733) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start -1.27 24.13) (end 3.81 -26.67) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (rectangle (start 3.81 -25.273) (end 2.54 -25.527) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 -22.733) (end 2.54 -22.987) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 -20.193) (end 2.54 -20.447) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 -17.653) (end 2.54 -17.907) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 -15.113) (end 2.54 -15.367) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 -12.573) (end 2.54 -12.827) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 -10.033) (end 2.54 -10.287) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 -7.493) (end 2.54 -7.747) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 -4.953) (end 2.54 -5.207) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 -2.413) (end 2.54 -2.667) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 0.127) (end 2.54 -0.127) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 2.667) (end 2.54 2.413) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 5.207) (end 2.54 4.953) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 7.747) (end 2.54 7.493) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 10.287) (end 2.54 10.033) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 12.827) (end 2.54 12.573) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 15.367) (end 2.54 15.113) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 17.907) (end 2.54 17.653) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 20.447) (end 2.54 20.193) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (rectangle (start 3.81 22.987) (end 2.54 22.733) + (stroke (width 0.1524) (type default)) + (fill (type none)) + ) + (pin passive line (at -5.08 22.86 0) (length 3.81) + (name "Pin_1" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 0 0) (length 3.81) + (name "Pin_10" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -2.54 0) (length 3.81) + (name "Pin_11" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -5.08 0) (length 3.81) + (name "Pin_12" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -7.62 0) (length 3.81) + (name "Pin_13" (effects (font (size 1.27 1.27)))) + (number "13" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -10.16 0) (length 3.81) + (name "Pin_14" (effects (font (size 1.27 1.27)))) + (number "14" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -12.7 0) (length 3.81) + (name "Pin_15" (effects (font (size 1.27 1.27)))) + (number "15" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -15.24 0) (length 3.81) + (name "Pin_16" (effects (font (size 1.27 1.27)))) + (number "16" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -17.78 0) (length 3.81) + (name "Pin_17" (effects (font (size 1.27 1.27)))) + (number "17" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -20.32 0) (length 3.81) + (name "Pin_18" (effects (font (size 1.27 1.27)))) + (number "18" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -22.86 0) (length 3.81) + (name "Pin_19" (effects (font (size 1.27 1.27)))) + (number "19" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 20.32 0) (length 3.81) + (name "Pin_2" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -25.4 0) (length 3.81) + (name "Pin_20" (effects (font (size 1.27 1.27)))) + (number "20" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 22.86 180) (length 3.81) + (name "Pin_21" (effects (font (size 1.27 1.27)))) + (number "21" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 20.32 180) (length 3.81) + (name "Pin_22" (effects (font (size 1.27 1.27)))) + (number "22" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 17.78 180) (length 3.81) + (name "Pin_23" (effects (font (size 1.27 1.27)))) + (number "23" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 15.24 180) (length 3.81) + (name "Pin_24" (effects (font (size 1.27 1.27)))) + (number "24" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 12.7 180) (length 3.81) + (name "Pin_25" (effects (font (size 1.27 1.27)))) + (number "25" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 10.16 180) (length 3.81) + (name "Pin_26" (effects (font (size 1.27 1.27)))) + (number "26" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 7.62 180) (length 3.81) + (name "Pin_27" (effects (font (size 1.27 1.27)))) + (number "27" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 5.08 180) (length 3.81) + (name "Pin_28" (effects (font (size 1.27 1.27)))) + (number "28" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 2.54 180) (length 3.81) + (name "Pin_29" (effects (font (size 1.27 1.27)))) + (number "29" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 17.78 0) (length 3.81) + (name "Pin_3" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 0 180) (length 3.81) + (name "Pin_30" (effects (font (size 1.27 1.27)))) + (number "30" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -2.54 180) (length 3.81) + (name "Pin_31" (effects (font (size 1.27 1.27)))) + (number "31" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -5.08 180) (length 3.81) + (name "Pin_32" (effects (font (size 1.27 1.27)))) + (number "32" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -7.62 180) (length 3.81) + (name "Pin_33" (effects (font (size 1.27 1.27)))) + (number "33" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -10.16 180) (length 3.81) + (name "Pin_34" (effects (font (size 1.27 1.27)))) + (number "34" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -12.7 180) (length 3.81) + (name "Pin_35" (effects (font (size 1.27 1.27)))) + (number "35" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -15.24 180) (length 3.81) + (name "Pin_36" (effects (font (size 1.27 1.27)))) + (number "36" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -17.78 180) (length 3.81) + (name "Pin_37" (effects (font (size 1.27 1.27)))) + (number "37" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -20.32 180) (length 3.81) + (name "Pin_38" (effects (font (size 1.27 1.27)))) + (number "38" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -22.86 180) (length 3.81) + (name "Pin_39" (effects (font (size 1.27 1.27)))) + (number "39" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 15.24 0) (length 3.81) + (name "Pin_4" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -25.4 180) (length 3.81) + (name "Pin_40" (effects (font (size 1.27 1.27)))) + (number "40" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 12.7 0) (length 3.81) + (name "Pin_5" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 10.16 0) (length 3.81) + (name "Pin_6" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 7.62 0) (length 3.81) + (name "Pin_7" (effects (font (size 1.27 1.27)))) + (number "7" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 5.08 0) (length 3.81) + (name "Pin_8" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 2.54 0) (length 3.81) + (name "Pin_9" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Device:R" (pin_numbers hide) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "R" (at 2.032 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "R" (at 0 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at -1.778 0 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "R res resistor" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Resistor" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "R_*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "R_0_1" + (rectangle (start -1.016 -2.54) (end 1.016 2.54) + (stroke (width 0.254) (type default)) + (fill (type none)) + ) + ) + (symbol "R_1_1" + (pin passive line (at 0 3.81 270) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 0 -3.81 90) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Device:R_Small" (pin_numbers hide) (pin_names (offset 0.254) hide) (in_bom yes) (on_board yes) + (property "Reference" "R" (at 0.762 0.508 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "R_Small" (at 0.762 -1.016 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "R resistor" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Resistor, small symbol" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "R_*" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "R_Small_0_1" + (rectangle (start -0.762 1.778) (end 0.762 -1.778) + (stroke (width 0.2032) (type default)) + (fill (type none)) + ) + ) + (symbol "R_Small_1_1" + (pin passive line (at 0 2.54 270) (length 0.762) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 0 -2.54 90) (length 0.762) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "power:+3V3" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "#PWR" (at 0 -3.81 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+3V3" (at 0 3.556 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "global power" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Power symbol creates a global label with name \"+3V3\"" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "+3V3_0_1" + (polyline + (pts + (xy -0.762 1.27) + (xy 0 2.54) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 0) + (xy 0 2.54) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 2.54) + (xy 0.762 1.27) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + ) + (symbol "+3V3_1_1" + (pin power_in line (at 0 0 90) (length 0) hide + (name "+3V3" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "power:+5V" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "#PWR" (at 0 -3.81 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (at 0 3.556 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "global power" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Power symbol creates a global label with name \"+5V\"" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "+5V_0_1" + (polyline + (pts + (xy -0.762 1.27) + (xy 0 2.54) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 0) + (xy 0 2.54) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 2.54) + (xy 0.762 1.27) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + ) + (symbol "+5V_1_1" + (pin power_in line (at 0 0 90) (length 0) hide + (name "+5V" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "power:GND" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "#PWR" (at 0 -6.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 0 -3.81 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "global power" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Power symbol creates a global label with name \"GND\" , ground" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "GND_0_1" + (polyline + (pts + (xy 0 0) + (xy 0 -1.27) + (xy 1.27 -1.27) + (xy 0 -2.54) + (xy -1.27 -1.27) + (xy 0 -1.27) + ) + (stroke (width 0) (type default)) + (fill (type none)) + ) + ) + (symbol "GND_1_1" + (pin power_in line (at 0 0 270) (length 0) hide + (name "GND" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "rppico:Pico" (in_bom yes) (on_board yes) + (property "Reference" "U" (at -13.97 27.94 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Pico" (at 0 19.05 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "RPi_Pico:RPi_Pico_SMD_TH" (at 0 0 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "Pico_0_0" + (text "Raspberry Pi Pico" (at 0 21.59 0) + (effects (font (size 1.27 1.27))) + ) + ) + (symbol "Pico_0_1" + (rectangle (start -15.24 26.67) (end 15.24 -26.67) + (stroke (width 0) (type default)) + (fill (type background)) + ) + ) + (symbol "Pico_1_1" + (pin bidirectional line (at -17.78 24.13 0) (length 2.54) + (name "GPIO0" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 1.27 0) (length 2.54) + (name "GPIO7" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 -1.27 0) (length 2.54) + (name "GPIO8" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 -3.81 0) (length 2.54) + (name "GPIO9" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at -17.78 -6.35 0) (length 2.54) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "13" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 -8.89 0) (length 2.54) + (name "GPIO10" (effects (font (size 1.27 1.27)))) + (number "14" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 -11.43 0) (length 2.54) + (name "GPIO11" (effects (font (size 1.27 1.27)))) + (number "15" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 -13.97 0) (length 2.54) + (name "GPIO12" (effects (font (size 1.27 1.27)))) + (number "16" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 -16.51 0) (length 2.54) + (name "GPIO13" (effects (font (size 1.27 1.27)))) + (number "17" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at -17.78 -19.05 0) (length 2.54) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "18" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 -21.59 0) (length 2.54) + (name "GPIO14" (effects (font (size 1.27 1.27)))) + (number "19" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 21.59 0) (length 2.54) + (name "GPIO1" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 -24.13 0) (length 2.54) + (name "GPIO15" (effects (font (size 1.27 1.27)))) + (number "20" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 17.78 -24.13 180) (length 2.54) + (name "GPIO16" (effects (font (size 1.27 1.27)))) + (number "21" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 17.78 -21.59 180) (length 2.54) + (name "GPIO17" (effects (font (size 1.27 1.27)))) + (number "22" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 17.78 -19.05 180) (length 2.54) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "23" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 17.78 -16.51 180) (length 2.54) + (name "GPIO18" (effects (font (size 1.27 1.27)))) + (number "24" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 17.78 -13.97 180) (length 2.54) + (name "GPIO19" (effects (font (size 1.27 1.27)))) + (number "25" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 17.78 -11.43 180) (length 2.54) + (name "GPIO20" (effects (font (size 1.27 1.27)))) + (number "26" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 17.78 -8.89 180) (length 2.54) + (name "GPIO21" (effects (font (size 1.27 1.27)))) + (number "27" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 17.78 -6.35 180) (length 2.54) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "28" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 17.78 -3.81 180) (length 2.54) + (name "GPIO22" (effects (font (size 1.27 1.27)))) + (number "29" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at -17.78 19.05 0) (length 2.54) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at 17.78 -1.27 180) (length 2.54) + (name "RUN" (effects (font (size 1.27 1.27)))) + (number "30" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 17.78 1.27 180) (length 2.54) + (name "GPIO26_ADC0" (effects (font (size 1.27 1.27)))) + (number "31" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 17.78 3.81 180) (length 2.54) + (name "GPIO27_ADC1" (effects (font (size 1.27 1.27)))) + (number "32" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 17.78 6.35 180) (length 2.54) + (name "AGND" (effects (font (size 1.27 1.27)))) + (number "33" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 17.78 8.89 180) (length 2.54) + (name "GPIO28_ADC2" (effects (font (size 1.27 1.27)))) + (number "34" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 17.78 11.43 180) (length 2.54) + (name "ADC_VREF" (effects (font (size 1.27 1.27)))) + (number "35" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 17.78 13.97 180) (length 2.54) + (name "3V3" (effects (font (size 1.27 1.27)))) + (number "36" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at 17.78 16.51 180) (length 2.54) + (name "3V3_EN" (effects (font (size 1.27 1.27)))) + (number "37" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 17.78 19.05 180) (length 2.54) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "38" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 17.78 21.59 180) (length 2.54) + (name "VSYS" (effects (font (size 1.27 1.27)))) + (number "39" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 16.51 0) (length 2.54) + (name "GPIO2" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 17.78 24.13 180) (length 2.54) + (name "VBUS" (effects (font (size 1.27 1.27)))) + (number "40" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -2.54 -29.21 90) (length 2.54) + (name "SWCLK" (effects (font (size 1.27 1.27)))) + (number "41" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at 0 -29.21 90) (length 2.54) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "42" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 2.54 -29.21 90) (length 2.54) + (name "SWDIO" (effects (font (size 1.27 1.27)))) + (number "43" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 13.97 0) (length 2.54) + (name "GPIO3" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 11.43 0) (length 2.54) + (name "GPIO4" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 8.89 0) (length 2.54) + (name "GPIO5" (effects (font (size 1.27 1.27)))) + (number "7" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at -17.78 6.35 0) (length 2.54) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -17.78 3.81 0) (length 2.54) + (name "GPIO6" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + ) + ) + ) + + (junction (at 168.91 115.57) (diameter 0) (color 0 0 0 0) + (uuid 0120875d-6a3d-4f4f-8289-bbdf61e71cbb) + ) + (junction (at 182.88 82.55) (diameter 0) (color 0 0 0 0) + (uuid 043d6f36-a8a8-4025-aa24-7dfd22ed9863) + ) + (junction (at 119.38 78.74) (diameter 0) (color 0 0 0 0) + (uuid 08bb74aa-29e9-4517-a465-07591e6c621a) + ) + (junction (at 152.4 35.56) (diameter 0) (color 0 0 0 0) + (uuid 108615ce-8327-482b-bfff-cf9a86c17881) + ) + (junction (at 185.42 67.31) (diameter 0) (color 0 0 0 0) + (uuid 1a896b41-d878-4723-b4d9-ac6dce1fe983) + ) + (junction (at 154.94 40.64) (diameter 0) (color 0 0 0 0) + (uuid 2cb1d08c-70e6-4d88-9788-c096fc6695c4) + ) + (junction (at 165.1 107.95) (diameter 0) (color 0 0 0 0) + (uuid 35de492e-cbc7-4917-be56-ae82ff2396d5) + ) + (junction (at 170.18 118.11) (diameter 0) (color 0 0 0 0) + (uuid 37a8d0e4-92c0-4069-9257-3290e2050b8f) + ) + (junction (at 166.37 110.49) (diameter 0) (color 0 0 0 0) + (uuid 4cd2fb9c-e679-4832-b6c2-7ae0d0047b33) + ) + (junction (at 124.46 81.28) (diameter 0) (color 0 0 0 0) + (uuid 530ae894-c6a5-4c4d-a0f2-c5c578b57f9c) + ) + (junction (at 142.24 83.82) (diameter 0) (color 0 0 0 0) + (uuid 5bea2673-1442-4588-9a28-26aeecbc5900) + ) + (junction (at 139.7 93.98) (diameter 0) (color 0 0 0 0) + (uuid 644d90e0-de05-43cd-a527-80a71ce4f195) + ) + (junction (at 163.83 105.41) (diameter 0) (color 0 0 0 0) + (uuid 7393716b-852a-4102-b39c-0c714d1a69b2) + ) + (junction (at 233.68 16.51) (diameter 0) (color 0 0 0 0) + (uuid 76435a3b-6f10-4aa1-a0c9-f9f71e5b72fc) + ) + (junction (at 121.92 73.66) (diameter 0) (color 0 0 0 0) + (uuid 774c05fc-1be8-47d9-9504-0c8f3757bef6) + ) + (junction (at 167.64 113.03) (diameter 0) (color 0 0 0 0) + (uuid 864e67f2-ffea-45c2-a262-0f991222cf25) + ) + (junction (at 139.7 95.25) (diameter 0) (color 0 0 0 0) + (uuid 93fd6cd5-8777-4a03-9864-de65c046331a) + ) + (junction (at 139.7 29.21) (diameter 0) (color 0 0 0 0) + (uuid 95045ac6-4a18-4e30-917a-b8fd32bc9fed) + ) + (junction (at 124.46 93.98) (diameter 0) (color 0 0 0 0) + (uuid 98bb616b-4e0b-4eca-bfa6-28cafe8fa22d) + ) + (junction (at 201.93 73.66) (diameter 0) (color 0 0 0 0) + (uuid 9bf8a880-8405-475e-b32f-41c5e85850f5) + ) + (junction (at 160.02 50.8) (diameter 0) (color 0 0 0 0) + (uuid 9ca6390e-a7f9-49ea-bc15-871922479965) + ) + (junction (at 162.56 102.87) (diameter 0) (color 0 0 0 0) + (uuid aed347f3-4ba5-4703-b54d-c7afcd167651) + ) + (junction (at 157.48 45.72) (diameter 0) (color 0 0 0 0) + (uuid bed1f9e2-c947-4e2d-996f-8a32c5d673ad) + ) + (junction (at 158.75 48.26) (diameter 0) (color 0 0 0 0) + (uuid c21695b3-8fe7-490b-a111-96a46780ad24) + ) + (junction (at 171.45 120.65) (diameter 0) (color 0 0 0 0) + (uuid c3b332f6-7aae-40de-a14c-775ab060c444) + ) + (junction (at 121.92 83.82) (diameter 0) (color 0 0 0 0) + (uuid cd928df0-13a8-4253-8f84-6717b5630d46) + ) + (junction (at 119.38 67.31) (diameter 0) (color 0 0 0 0) + (uuid d53ab1dd-294d-414d-8d38-c2bd490177a1) + ) + (junction (at 156.21 43.18) (diameter 0) (color 0 0 0 0) + (uuid e35846de-168e-48c2-848c-226e8e7ec78a) + ) + (junction (at 161.29 53.34) (diameter 0) (color 0 0 0 0) + (uuid e92bcc5f-e0c9-44de-87a7-50bad395734b) + ) + (junction (at 201.93 142.24) (diameter 0) (color 0 0 0 0) + (uuid f2fa4561-a723-4d00-80e3-cb7bb652f6e0) + ) + (junction (at 153.67 38.1) (diameter 0) (color 0 0 0 0) + (uuid f7cd5262-8096-47ba-b9dc-8d41d303a52e) + ) + + (no_connect (at 260.35 80.01) (uuid 0add54d0-adfc-47f5-af75-7f8287353ce1)) + (no_connect (at 247.65 36.83) (uuid 4239c0e8-b08f-4c6f-9225-4147dfa77b81)) + (no_connect (at 260.35 77.47) (uuid d65540af-0f42-4ed3-97f8-02518aa1a0fa)) + (no_connect (at 247.65 80.01) (uuid e6ddfb5d-1738-4fac-be16-478a1a7e48ed)) + (no_connect (at 247.65 74.93) (uuid f6a7f714-caa7-44e7-824d-470a116b00fb)) + + (bus_entry (at 30.48 71.12) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid 03ec3ad4-a361-42d0-9586-917fa480bd4c) + ) + (bus_entry (at 163.83 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 06bfd635-3b25-436b-969c-fcc625cf0b33) + ) + (bus_entry (at 233.68 52.07) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid 0a8c1e03-22dd-4f16-ae80-807f003727e1) + ) + (bus_entry (at 233.68 57.15) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid 104b6248-e516-4343-91d2-60dbe6aa8ac2) + ) + (bus_entry (at 167.64 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 11e313a6-4365-42cc-985b-7127acb32045) + ) + (bus_entry (at 168.91 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 133de726-4dfd-4cad-908c-507183e00b5d) + ) + (bus_entry (at 161.29 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 1b338579-74fc-4292-9e1b-8973270d9ead) + ) + (bus_entry (at 270.51 29.21) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 24339b52-3e39-48e8-ac43-ab98e89a8af1) + ) + (bus_entry (at 233.68 64.77) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid 26b8b9d1-efbe-40b6-b07a-34770937756e) + ) + (bus_entry (at 270.51 31.75) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 30ecb7c7-4696-4e75-9cef-ac75758db784) + ) + (bus_entry (at 166.37 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 32c8c0f6-7d1a-44dd-893c-963d54fb60d6) + ) + (bus_entry (at 162.56 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 35c709b3-15f2-4acf-8c9e-26d8604f43f5) + ) + (bus_entry (at 233.68 59.69) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid 3ac77670-5de5-4441-943f-c74723d2c28c) + ) + (bus_entry (at 170.18 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 44d5035e-c25b-434d-bc37-f8970aec09ce) + ) + (bus_entry (at 270.51 36.83) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 4aa367d8-30b6-498e-8d85-dedcbd2e31a7) + ) + (bus_entry (at 160.02 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 4f610ba9-7424-4475-beb4-18cfa82e0a68) + ) + (bus_entry (at 158.75 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 4fd291b1-f02f-49e1-b8c9-9dbe42e378e7) + ) + (bus_entry (at 270.51 34.29) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 53697879-2a0f-4d48-b96c-884be410e56b) + ) + (bus_entry (at 233.68 36.83) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid 68d22b0d-c06c-48e9-bf0c-657bc3b8b0cd) + ) + (bus_entry (at 233.68 62.23) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid 6dd30594-1e5f-4788-8fd2-f48a10edc986) + ) + (bus_entry (at 233.68 46.99) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid 849b7232-b0d6-4ebd-973d-adddbd81579f) + ) + (bus_entry (at 233.68 44.45) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid 86be5a7f-96f4-42ce-bc2a-3a26fd64c04d) + ) + (bus_entry (at 270.51 41.91) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 974c87fb-ead9-4032-ac70-82fa96ad9759) + ) + (bus_entry (at 233.68 39.37) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid 9a563e93-6973-46f0-b012-d872beeee2ec) + ) + (bus_entry (at 172.72 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 9eb1d94c-b74a-4bda-b994-ba9089ff1159) + ) + (bus_entry (at 233.68 54.61) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid 9f7bb83c-eeb9-41ed-a801-2666dca14ae6) + ) + (bus_entry (at 171.45 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid 9fc74cf5-50ae-43e3-ac3e-2cc9d892e4d5) + ) + (bus_entry (at 154.94 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid a5d0924e-28ab-4b7c-92ce-1ded1ce4d891) + ) + (bus_entry (at 30.48 68.58) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid a9a8b530-b753-402b-8a2b-c4aee0f75a7e) + ) + (bus_entry (at 156.21 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid af36f6f3-24bc-4962-b46b-185a479053b9) + ) + (bus_entry (at 233.68 41.91) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid b3f2fdbf-6fed-4314-b591-f629a4ffa62a) + ) + (bus_entry (at 157.48 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid b8e9b49d-7493-4e1f-9306-7a5304a4540e) + ) + (bus_entry (at 30.48 66.04) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid bc6b2786-da95-452f-aa34-446de3be46cb) + ) + (bus_entry (at 233.68 69.85) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid bcc8dc75-81b4-4f13-be88-d7ab7b38c6fd) + ) + (bus_entry (at 30.48 78.74) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid bda1b802-20f7-4236-acad-a08329f4dc9c) + ) + (bus_entry (at 165.1 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid ccb432c4-69c0-4f9c-a7d8-b7f755f672c0) + ) + (bus_entry (at 233.68 49.53) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid cd546879-564b-434b-88f4-882a04ca0d29) + ) + (bus_entry (at 270.51 39.37) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid d502b8a7-54ac-43e4-8d42-077df0357401) + ) + (bus_entry (at 30.48 76.2) (size 2.54 2.54) + (stroke (width 0) (type default)) + (uuid d6a9e992-82cd-4e4c-b111-46578899c080) + ) + (bus_entry (at 173.99 16.51) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid d8d67fbf-641d-4b12-a78a-68d902030dff) + ) + (bus_entry (at 270.51 46.99) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid e0172ecc-10bb-4d07-9d2b-20cde79e13c3) + ) + (bus_entry (at 270.51 44.45) (size -2.54 2.54) + (stroke (width 0) (type default)) + (uuid f10e7532-b2d8-4584-b0e8-24349b9a41b3) + ) + + (wire (pts (xy 85.09 71.12) (xy 111.76 71.12)) + (stroke (width 0) (type default)) + (uuid 003ff46a-b4ad-4521-bd92-0b204dda9ed3) + ) + (wire (pts (xy 119.38 67.31) (xy 119.38 78.74)) + (stroke (width 0) (type default)) + (uuid 01436a3b-0c72-4163-83dd-0ff9e2dede18) + ) + (bus (pts (xy 233.68 44.45) (xy 233.68 46.99)) + (stroke (width 0) (type default)) + (uuid 0712651a-c808-4b7c-9f53-d02e6661c930) + ) + + (wire (pts (xy 187.96 25.4) (xy 187.96 33.02)) + (stroke (width 0) (type default)) + (uuid 072e011b-f8c2-4735-942f-03e867bc79df) + ) + (wire (pts (xy 149.86 105.41) (xy 163.83 105.41)) + (stroke (width 0) (type default)) + (uuid 0771e7e0-2114-4c69-a0f7-90ec252af06c) + ) + (bus (pts (xy 162.56 16.51) (xy 163.83 16.51)) + (stroke (width 0) (type default)) + (uuid 08aa724b-6755-4af9-a891-61312f9da06a) + ) + + (wire (pts (xy 187.96 100.33) (xy 189.23 100.33)) + (stroke (width 0) (type default)) + (uuid 0920c123-598f-4d02-8fbc-358e3d69efb1) + ) + (wire (pts (xy 236.22 44.45) (xy 247.65 44.45)) + (stroke (width 0) (type default)) + (uuid 0c245733-551b-41af-99a3-c9c554daf2c0) + ) + (wire (pts (xy 127 102.87) (xy 129.54 102.87)) + (stroke (width 0) (type default)) + (uuid 0d0cb174-1b11-4f5d-85ec-6fde05d6ca5f) + ) + (wire (pts (xy 149.86 53.34) (xy 161.29 53.34)) + (stroke (width 0) (type default)) + (uuid 0d2c4483-bdc8-4729-9f40-81af6c3b7a99) + ) + (wire (pts (xy 236.22 59.69) (xy 247.65 59.69)) + (stroke (width 0) (type default)) + (uuid 0da0361e-c7a0-4dc7-8e7c-7be9f6e22857) + ) + (wire (pts (xy 139.7 21.59) (xy 139.7 29.21)) + (stroke (width 0) (type default)) + (uuid 0fa898ca-db9d-48f2-b3c0-a6723932267f) + ) + (wire (pts (xy 168.91 115.57) (xy 189.23 115.57)) + (stroke (width 0) (type default)) + (uuid 1057f96c-1c88-4ff8-b8b4-5dd6b9f0fbd5) + ) + (wire (pts (xy 189.23 58.42) (xy 182.88 58.42)) + (stroke (width 0) (type default)) + (uuid 126b71f3-b53d-445c-9b3e-9d126e4291f1) + ) + (wire (pts (xy 151.13 76.2) (xy 127 76.2)) + (stroke (width 0) (type default)) + (uuid 12d49c9c-14d0-45bc-beba-e04326c12cbd) + ) + (wire (pts (xy 187.96 83.82) (xy 187.96 100.33)) + (stroke (width 0) (type default)) + (uuid 13f1ae5e-225e-43ab-8013-b371501aab2b) + ) + (wire (pts (xy 167.64 19.05) (xy 167.64 113.03)) + (stroke (width 0) (type default)) + (uuid 14a09129-77da-4f39-98ee-f006dc3ef9fe) + ) + (wire (pts (xy 129.54 43.18) (xy 128.27 43.18)) + (stroke (width 0) (type default)) + (uuid 14eeb87f-24ab-4ff5-aa3a-a4fcb5b59c12) + ) + (wire (pts (xy 124.46 118.11) (xy 129.54 118.11)) + (stroke (width 0) (type default)) + (uuid 167cd242-8232-4c8e-98b8-622f82645d8f) + ) + (bus (pts (xy 173.99 16.51) (xy 233.68 16.51)) + (stroke (width 0) (type default)) + (uuid 16971af9-7986-4a50-bc06-687953cc2857) + ) + + (wire (pts (xy 135.255 93.98) (xy 139.7 93.98)) + (stroke (width 0) (type default)) + (uuid 1aff1ae3-4386-449e-a627-185bf55bcb1c) + ) + (wire (pts (xy 170.18 118.11) (xy 189.23 118.11)) + (stroke (width 0) (type default)) + (uuid 1c1068f8-24b4-4362-b480-e04e5367b752) + ) + (wire (pts (xy 237.49 77.47) (xy 247.65 77.47)) + (stroke (width 0) (type default)) + (uuid 1f1bac8d-b64f-4d8d-b3dd-508f6997a9e7) + ) + (wire (pts (xy 85.09 68.58) (xy 109.22 68.58)) + (stroke (width 0) (type default)) + (uuid 1f3434e7-32f5-40cf-9c20-71674c2c0a9d) + ) + (wire (pts (xy 129.54 35.56) (xy 111.76 35.56)) + (stroke (width 0) (type default)) + (uuid 22b1e78b-1432-42fb-8c0a-fc98ecde5b34) + ) + (bus (pts (xy 166.37 16.51) (xy 167.64 16.51)) + (stroke (width 0) (type default)) + (uuid 27e08027-036d-4311-92f8-ad5280f64b23) + ) + + (wire (pts (xy 182.88 82.55) (xy 182.88 125.73)) + (stroke (width 0) (type default)) + (uuid 280fb9c2-c2c6-4ecb-b012-579ac4164311) + ) + (wire (pts (xy 121.92 48.26) (xy 121.92 73.66)) + (stroke (width 0) (type default)) + (uuid 2944112c-5a46-481b-8144-9ebf2775a9d0) + ) + (wire (pts (xy 201.93 88.9) (xy 201.93 92.71)) + (stroke (width 0) (type default)) + (uuid 295ba5e0-d3af-428e-b8e1-a8a7c0e4029c) + ) + (wire (pts (xy 151.13 125.73) (xy 151.13 146.05)) + (stroke (width 0) (type default)) + (uuid 29d952d3-fc55-4d14-ada0-6512c051228d) + ) + (wire (pts (xy 129.54 50.8) (xy 124.46 50.8)) + (stroke (width 0) (type default)) + (uuid 29f223f5-5a29-4409-86ec-f79885e3713f) + ) + (wire (pts (xy 149.86 40.64) (xy 154.94 40.64)) + (stroke (width 0) (type default)) + (uuid 29fa39ed-dad1-46ba-9ea9-57f25e6cfb48) + ) + (wire (pts (xy 121.92 115.57) (xy 129.54 115.57)) + (stroke (width 0) (type default)) + (uuid 2c560aa2-18ba-4c38-8bfd-104e664c0f6f) + ) + (wire (pts (xy 109.22 68.58) (xy 109.22 148.59)) + (stroke (width 0) (type default)) + (uuid 2d7b66f3-4166-443c-a5f5-c0eae1db4a95) + ) + (wire (pts (xy 149.86 45.72) (xy 157.48 45.72)) + (stroke (width 0) (type default)) + (uuid 328381f3-58de-42d6-bfc9-29fbcfadd4bd) + ) + (wire (pts (xy 187.96 66.04) (xy 187.96 73.66)) + (stroke (width 0) (type default)) + (uuid 33d6b93c-5bdf-4df4-974d-af24e1daeda8) + ) + (wire (pts (xy 260.35 39.37) (xy 267.97 39.37)) + (stroke (width 0) (type default)) + (uuid 33eaacbe-b6b6-420b-8242-8cfea81c8bdd) + ) + (wire (pts (xy 128.27 29.21) (xy 139.7 29.21)) + (stroke (width 0) (type default)) + (uuid 3410b729-2c60-4508-aee1-4392961a02c9) + ) + (wire (pts (xy 219.71 83.82) (xy 187.96 83.82)) + (stroke (width 0) (type default)) + (uuid 34dfb724-e166-48a2-889a-cb52f032fa81) + ) + (wire (pts (xy 185.42 130.81) (xy 185.42 67.31)) + (stroke (width 0) (type default)) + (uuid 38c2322c-cbcd-49ed-bb47-4b541bfd23da) + ) + (wire (pts (xy 33.02 81.28) (xy 49.53 81.28)) + (stroke (width 0) (type default)) + (uuid 38cd334a-b33a-4e79-8005-d7d2f924e7a0) + ) + (wire (pts (xy 189.23 130.81) (xy 185.42 130.81)) + (stroke (width 0) (type default)) + (uuid 39ba98f6-7a12-445c-b60e-9f02dd9227d0) + ) + (wire (pts (xy 241.3 31.75) (xy 241.3 24.13)) + (stroke (width 0) (type default)) + (uuid 3a9da383-59b8-4a6e-9838-c1573714f37c) + ) + (wire (pts (xy 111.76 35.56) (xy 111.76 71.12)) + (stroke (width 0) (type default)) + (uuid 3bf8b58d-6af1-409c-9477-8d8baf9b06b0) + ) + (bus (pts (xy 30.48 16.51) (xy 30.48 66.04)) + (stroke (width 0) (type default)) + (uuid 3d847ffd-4310-41a5-a864-929bd9c3939d) + ) + + (wire (pts (xy 165.1 19.05) (xy 165.1 107.95)) + (stroke (width 0) (type default)) + (uuid 3dd73a91-6a79-4fc2-800f-b2b7331e8aa8) + ) + (bus (pts (xy 30.48 66.04) (xy 30.48 68.58)) + (stroke (width 0) (type default)) + (uuid 3e08fd4a-b764-4107-87e7-a932077e2470) + ) + + (wire (pts (xy 187.96 73.66) (xy 201.93 73.66)) + (stroke (width 0) (type default)) + (uuid 3e27a694-332e-46d9-97e3-7a028e6e362d) + ) + (bus (pts (xy 233.68 16.51) (xy 270.51 16.51)) + (stroke (width 0) (type default)) + (uuid 3f544771-3ded-4d81-ab35-7b008df4645f) + ) + + (wire (pts (xy 151.13 146.05) (xy 116.84 146.05)) + (stroke (width 0) (type default)) + (uuid 3f5a1c2c-8603-4be8-902d-d6fd1b7247c8) + ) + (wire (pts (xy 187.96 33.02) (xy 189.23 33.02)) + (stroke (width 0) (type default)) + (uuid 4001570c-38be-4894-9ba6-98d4f8d09507) + ) + (wire (pts (xy 124.46 93.98) (xy 130.175 93.98)) + (stroke (width 0) (type default)) + (uuid 4022e5d1-97d0-4b63-84cd-89063a34293f) + ) + (wire (pts (xy 33.02 73.66) (xy 49.53 73.66)) + (stroke (width 0) (type default)) + (uuid 40ac3ff1-f921-400e-a1c2-1ee1164c6470) + ) + (wire (pts (xy 119.38 40.64) (xy 119.38 67.31)) + (stroke (width 0) (type default)) + (uuid 40b1bed2-3cb4-40c4-8a4c-162c5d528646) + ) + (wire (pts (xy 247.65 31.75) (xy 241.3 31.75)) + (stroke (width 0) (type default)) + (uuid 410298e5-11da-46e7-a74d-35c319d99e80) + ) + (wire (pts (xy 149.86 118.11) (xy 170.18 118.11)) + (stroke (width 0) (type default)) + (uuid 4241eadc-0c72-44b9-8c0e-884629746450) + ) + (bus (pts (xy 270.51 29.21) (xy 270.51 31.75)) + (stroke (width 0) (type default)) + (uuid 4274e763-aad8-4c80-9b57-b0ec08b4acc2) + ) + + (wire (pts (xy 229.87 77.47) (xy 227.33 77.47)) + (stroke (width 0) (type default)) + (uuid 44284319-2dbf-46b7-b1ff-6825072caee8) + ) + (wire (pts (xy 33.02 68.58) (xy 49.53 68.58)) + (stroke (width 0) (type default)) + (uuid 450f84bd-95fe-4777-84b7-d6fa8262aa49) + ) + (wire (pts (xy 229.87 34.29) (xy 229.87 31.75)) + (stroke (width 0) (type default)) + (uuid 473d424a-5bfb-4d86-931b-f96c5dc48e8e) + ) + (wire (pts (xy 156.21 19.05) (xy 156.21 43.18)) + (stroke (width 0) (type default)) + (uuid 4856312a-9831-4412-8ed1-587c04aa8af7) + ) + (wire (pts (xy 124.46 50.8) (xy 124.46 81.28)) + (stroke (width 0) (type default)) + (uuid 4a17fbad-838e-4f3d-abf9-90cf4dad1300) + ) + (wire (pts (xy 142.24 83.82) (xy 142.24 80.01)) + (stroke (width 0) (type default)) + (uuid 4a69f2e0-ab47-4783-aaf9-3722cf78cdb6) + ) + (wire (pts (xy 127 76.2) (xy 127 102.87)) + (stroke (width 0) (type default)) + (uuid 4a7eac4c-aef5-4658-8394-5f468b99102e) + ) + (bus (pts (xy 270.51 34.29) (xy 270.51 36.83)) + (stroke (width 0) (type default)) + (uuid 4af28037-3383-4fe1-84b5-e69c23662b3a) + ) + + (wire (pts (xy 260.35 34.29) (xy 267.97 34.29)) + (stroke (width 0) (type default)) + (uuid 4b2732e6-a2db-4b83-8708-1b599c52a7aa) + ) + (wire (pts (xy 85.09 73.66) (xy 121.92 73.66)) + (stroke (width 0) (type default)) + (uuid 4bcde624-0f55-4f52-bf6e-5524260c37cc) + ) + (wire (pts (xy 153.67 19.05) (xy 153.67 38.1)) + (stroke (width 0) (type default)) + (uuid 4cd39945-c9da-4fed-97df-ae81f5ae1751) + ) + (wire (pts (xy 158.75 48.26) (xy 189.23 48.26)) + (stroke (width 0) (type default)) + (uuid 4e0632bc-5e43-466a-8338-aed7e604bb2f) + ) + (bus (pts (xy 233.68 46.99) (xy 233.68 49.53)) + (stroke (width 0) (type default)) + (uuid 4f617950-1c68-4b41-815f-f0e4a12a7f7d) + ) + + (wire (pts (xy 241.3 24.13) (xy 236.22 24.13)) + (stroke (width 0) (type default)) + (uuid 4fbd28f1-658a-45e3-af46-2b3ac537859c) + ) + (wire (pts (xy 149.86 120.65) (xy 171.45 120.65)) + (stroke (width 0) (type default)) + (uuid 52062713-76dc-4552-8370-6c86e2a4770e) + ) + (wire (pts (xy 124.46 81.28) (xy 124.46 93.98)) + (stroke (width 0) (type default)) + (uuid 53344c42-e9bf-4e05-ae81-38fe5336da39) + ) + (bus (pts (xy 158.75 16.51) (xy 160.02 16.51)) + (stroke (width 0) (type default)) + (uuid 5437f249-1cf5-4d53-8735-c945bec113e3) + ) + (bus (pts (xy 160.02 16.51) (xy 161.29 16.51)) + (stroke (width 0) (type default)) + (uuid 544af667-cd5d-450c-a430-8c2528a87844) + ) + + (wire (pts (xy 152.4 35.56) (xy 189.23 35.56)) + (stroke (width 0) (type default)) + (uuid 548bbaff-500a-4f15-ac6b-eb271507d820) + ) + (wire (pts (xy 157.48 19.05) (xy 157.48 45.72)) + (stroke (width 0) (type default)) + (uuid 55a519d2-f793-4c07-b4fd-6bcce076ac7e) + ) + (wire (pts (xy 154.94 40.64) (xy 189.23 40.64)) + (stroke (width 0) (type default)) + (uuid 56206465-f20e-434d-9804-d9a670503acf) + ) + (bus (pts (xy 171.45 16.51) (xy 172.72 16.51)) + (stroke (width 0) (type default)) + (uuid 56b1cf1f-6220-4664-9dee-fd307698b538) + ) + + (wire (pts (xy 165.1 107.95) (xy 189.23 107.95)) + (stroke (width 0) (type default)) + (uuid 56e7149d-d1ce-4c55-a735-4832ae05b177) + ) + (bus (pts (xy 154.94 16.51) (xy 156.21 16.51)) + (stroke (width 0) (type default)) + (uuid 598538d9-8b5d-431c-b7d8-5395df510a6e) + ) + + (wire (pts (xy 129.54 110.49) (xy 128.27 110.49)) + (stroke (width 0) (type default)) + (uuid 599adad3-7a0f-4d09-9ede-c43de69d236d) + ) + (wire (pts (xy 149.86 115.57) (xy 168.91 115.57)) + (stroke (width 0) (type default)) + (uuid 5ab17b3a-33fe-4cfb-8d76-8cbd61b08546) + ) + (wire (pts (xy 187.96 142.24) (xy 201.93 142.24)) + (stroke (width 0) (type default)) + (uuid 5afc460c-c4ed-489e-9a8f-07467b35f872) + ) + (wire (pts (xy 162.56 102.87) (xy 189.23 102.87)) + (stroke (width 0) (type default)) + (uuid 5c99ae97-deea-44f0-9393-bd3fb80f2c04) + ) + (bus (pts (xy 154.94 16.51) (xy 30.48 16.51)) + (stroke (width 0) (type default)) + (uuid 5f305b79-e25d-4f7d-8d51-f7232ea14b3c) + ) + + (wire (pts (xy 149.86 35.56) (xy 152.4 35.56)) + (stroke (width 0) (type default)) + (uuid 6107400c-ee5a-409a-8499-271869cdb29b) + ) + (wire (pts (xy 236.22 41.91) (xy 247.65 41.91)) + (stroke (width 0) (type default)) + (uuid 61af5858-4b83-44a6-94a5-87327e909619) + ) + (wire (pts (xy 182.88 125.73) (xy 189.23 125.73)) + (stroke (width 0) (type default)) + (uuid 61b2c501-7bc7-4028-95a5-3df5abefb09b) + ) + (wire (pts (xy 161.29 53.34) (xy 189.23 53.34)) + (stroke (width 0) (type default)) + (uuid 61fc4a9a-ee81-412e-9c26-c343ec5f50fd) + ) + (bus (pts (xy 233.68 59.69) (xy 233.68 62.23)) + (stroke (width 0) (type default)) + (uuid 62e4ea24-1797-41e4-a092-7043cc58b5ca) + ) + + (wire (pts (xy 149.86 113.03) (xy 167.64 113.03)) + (stroke (width 0) (type default)) + (uuid 630eb79f-9cc8-49ba-b7f6-1ef019141851) + ) + (wire (pts (xy 119.38 67.31) (xy 185.42 67.31)) + (stroke (width 0) (type default)) + (uuid 6704c38b-a7d7-4bc2-b0ae-a621c3e4da5e) + ) + (wire (pts (xy 158.75 82.55) (xy 182.88 82.55)) + (stroke (width 0) (type default)) + (uuid 67eb0f3b-d6af-463a-a244-2eef85992792) + ) + (wire (pts (xy 142.24 85.09) (xy 142.24 83.82)) + (stroke (width 0) (type default)) + (uuid 695bde8f-3e47-466a-94c0-7e6ebace292b) + ) + (bus (pts (xy 165.1 16.51) (xy 166.37 16.51)) + (stroke (width 0) (type default)) + (uuid 69aba57d-2655-42ab-adc8-b2fa1c8c5289) + ) + + (wire (pts (xy 121.92 83.82) (xy 121.92 115.57)) + (stroke (width 0) (type default)) + (uuid 6c49db92-231a-4809-9be9-2c4273392953) + ) + (wire (pts (xy 214.63 33.02) (xy 219.71 33.02)) + (stroke (width 0) (type default)) + (uuid 6d22a4d7-3a96-425b-8218-813bf203abd8) + ) + (bus (pts (xy 167.64 16.51) (xy 168.91 16.51)) + (stroke (width 0) (type default)) + (uuid 6e2a5aab-595f-4978-9dc4-f37caeb1e25f) + ) + + (wire (pts (xy 149.86 107.95) (xy 165.1 107.95)) + (stroke (width 0) (type default)) + (uuid 70bbe383-02b4-4b47-855a-03893c957bef) + ) + (wire (pts (xy 160.02 50.8) (xy 189.23 50.8)) + (stroke (width 0) (type default)) + (uuid 71012a63-26b2-4aaa-a3c2-3f340bdb96a1) + ) + (wire (pts (xy 234.95 100.33) (xy 234.95 148.59)) + (stroke (width 0) (type default)) + (uuid 71d2831e-053d-474b-b80e-0e2e30545ca1) + ) + (wire (pts (xy 156.21 43.18) (xy 189.23 43.18)) + (stroke (width 0) (type default)) + (uuid 72ca9d61-72bd-417c-8225-3446989f0c60) + ) + (bus (pts (xy 161.29 16.51) (xy 162.56 16.51)) + (stroke (width 0) (type default)) + (uuid 72de6e38-c3a1-416d-87eb-635c69b0c3d4) + ) + + (wire (pts (xy 161.29 19.05) (xy 161.29 53.34)) + (stroke (width 0) (type default)) + (uuid 73a52fc1-e0ad-4b13-af40-06d0516f325d) + ) + (wire (pts (xy 160.02 19.05) (xy 160.02 50.8)) + (stroke (width 0) (type default)) + (uuid 74c4006b-3ebb-467d-8e7c-bdc5e3d916a2) + ) + (wire (pts (xy 236.22 24.13) (xy 236.22 25.4)) + (stroke (width 0) (type default)) + (uuid 75624970-4b05-4753-b873-583aaabad8b4) + ) + (wire (pts (xy 182.88 58.42) (xy 182.88 82.55)) + (stroke (width 0) (type default)) + (uuid 758c1a24-9659-4d40-96b4-8d91e0926209) + ) + (wire (pts (xy 129.54 40.64) (xy 119.38 40.64)) + (stroke (width 0) (type default)) + (uuid 75a83827-1e5b-4134-968b-b171cc17637e) + ) + (bus (pts (xy 233.68 36.83) (xy 233.68 39.37)) + (stroke (width 0) (type default)) + (uuid 76b94c0c-ea95-4ca7-9df4-c70829f155dc) + ) + + (wire (pts (xy 236.22 39.37) (xy 247.65 39.37)) + (stroke (width 0) (type default)) + (uuid 76e967ab-fb78-4da6-bb37-5425847f6c60) + ) + (wire (pts (xy 236.22 57.15) (xy 247.65 57.15)) + (stroke (width 0) (type default)) + (uuid 772f6a10-7001-41bb-99cf-840203d13134) + ) + (bus (pts (xy 157.48 16.51) (xy 158.75 16.51)) + (stroke (width 0) (type default)) + (uuid 78b651d5-ea09-42f5-9f68-b1fb8be93762) + ) + + (wire (pts (xy 201.93 73.66) (xy 201.93 76.2)) + (stroke (width 0) (type default)) + (uuid 7abda411-4d7b-4fd0-a1f3-a139523f4771) + ) + (wire (pts (xy 149.86 58.42) (xy 151.13 58.42)) + (stroke (width 0) (type default)) + (uuid 7b563844-27c1-40de-975c-224b44ad9b87) + ) + (wire (pts (xy 236.22 64.77) (xy 247.65 64.77)) + (stroke (width 0) (type default)) + (uuid 7c0d2108-152b-426f-a2b5-06b48f183690) + ) + (wire (pts (xy 214.63 100.33) (xy 234.95 100.33)) + (stroke (width 0) (type default)) + (uuid 7d4405c9-f164-4dda-b375-7dbfa98c0aa3) + ) + (wire (pts (xy 234.95 148.59) (xy 109.22 148.59)) + (stroke (width 0) (type default)) + (uuid 7f305f58-6af7-445f-9495-fd675a9eb193) + ) + (wire (pts (xy 128.27 95.25) (xy 139.7 95.25)) + (stroke (width 0) (type default)) + (uuid 7f5766cb-5c16-4b26-85b5-481aedac0b46) + ) + (wire (pts (xy 236.22 46.99) (xy 247.65 46.99)) + (stroke (width 0) (type default)) + (uuid 7f979f07-e97c-4971-97b7-04c420ee149c) + ) + (wire (pts (xy 260.35 49.53) (xy 267.97 49.53)) + (stroke (width 0) (type default)) + (uuid 828f4d62-09b4-4211-bb94-87acfccb8438) + ) + (wire (pts (xy 151.13 58.42) (xy 151.13 76.2)) + (stroke (width 0) (type default)) + (uuid 8347764a-2f17-490f-8c50-f83be4287f7e) + ) + (bus (pts (xy 233.68 57.15) (xy 233.68 59.69)) + (stroke (width 0) (type default)) + (uuid 84ae1e65-848c-45ef-877f-ed22b93f9fbd) + ) + + (wire (pts (xy 236.22 52.07) (xy 247.65 52.07)) + (stroke (width 0) (type default)) + (uuid 856cd28c-d203-4e45-be25-0ffaf4886dd1) + ) + (wire (pts (xy 149.86 110.49) (xy 166.37 110.49)) + (stroke (width 0) (type default)) + (uuid 858d3775-5b7b-46dc-b950-9c1fabf245ad) + ) + (wire (pts (xy 142.24 80.01) (xy 143.51 80.01)) + (stroke (width 0) (type default)) + (uuid 85b6425f-8ce3-4f77-ab9b-f74ec93295f0) + ) + (wire (pts (xy 227.33 77.47) (xy 227.33 73.66)) + (stroke (width 0) (type default)) + (uuid 8600eb6e-7848-42b3-91c9-844d555ecaf4) + ) + (wire (pts (xy 139.7 92.71) (xy 139.7 93.98)) + (stroke (width 0) (type default)) + (uuid 887c0bd8-8134-44aa-be9f-0b65cb677659) + ) + (wire (pts (xy 236.22 54.61) (xy 247.65 54.61)) + (stroke (width 0) (type default)) + (uuid 898073a3-01db-4bba-a54f-8bf4873962b9) + ) + (bus (pts (xy 30.48 71.12) (xy 30.48 76.2)) + (stroke (width 0) (type default)) + (uuid 8a66ad52-1fc3-4a7e-8c26-3fa78f79d5a4) + ) + + (wire (pts (xy 236.22 67.31) (xy 247.65 67.31)) + (stroke (width 0) (type default)) + (uuid 8a791d61-68a9-42ba-9972-17389c04fda2) + ) + (bus (pts (xy 156.21 16.51) (xy 157.48 16.51)) + (stroke (width 0) (type default)) + (uuid 8b1942f1-520b-45ec-8f7a-168e13daab22) + ) + + (wire (pts (xy 149.86 48.26) (xy 158.75 48.26)) + (stroke (width 0) (type default)) + (uuid 8b5e3d17-09c2-482a-917a-dba2fc7fe3bb) + ) + (wire (pts (xy 139.7 63.5) (xy 139.7 64.77)) + (stroke (width 0) (type default)) + (uuid 8d91dba8-02b5-4b3d-9d26-2d6d83c12151) + ) + (bus (pts (xy 172.72 16.51) (xy 173.99 16.51)) + (stroke (width 0) (type default)) + (uuid 8dd5b7ba-80bc-462c-a983-b5718c42809b) + ) + + (wire (pts (xy 152.4 19.05) (xy 152.4 35.56)) + (stroke (width 0) (type default)) + (uuid 91a9dbfc-add6-45ec-b796-4fd7283fe2e8) + ) + (wire (pts (xy 139.7 95.25) (xy 139.7 97.79)) + (stroke (width 0) (type default)) + (uuid 921ebaeb-43c8-4f97-9631-f53b0ddde171) + ) + (bus (pts (xy 233.68 16.51) (xy 233.68 36.83)) + (stroke (width 0) (type default)) + (uuid 952fa369-c65d-4077-bf65-a413944519b4) + ) + + (wire (pts (xy 121.92 73.66) (xy 121.92 83.82)) + (stroke (width 0) (type default)) + (uuid 956a5ca7-8d46-46fe-a899-8c96814ea3af) + ) + (wire (pts (xy 158.75 19.05) (xy 158.75 48.26)) + (stroke (width 0) (type default)) + (uuid 97452aab-e729-4d37-81d1-ffe1c2ffd48e) + ) + (wire (pts (xy 149.86 43.18) (xy 156.21 43.18)) + (stroke (width 0) (type default)) + (uuid 9756bae7-3344-4cec-9830-c17378c72d31) + ) + (wire (pts (xy 189.23 133.35) (xy 187.96 133.35)) + (stroke (width 0) (type default)) + (uuid 98bc95ca-ba85-4282-a9b4-6e299b445d76) + ) + (bus (pts (xy 170.18 16.51) (xy 171.45 16.51)) + (stroke (width 0) (type default)) + (uuid 9c7c3dbf-23e4-4ef1-93f1-5e610e8ce36f) + ) + + (wire (pts (xy 33.02 78.74) (xy 49.53 78.74)) + (stroke (width 0) (type default)) + (uuid 9d1b454b-4895-443c-8648-4a64941d3728) + ) + (wire (pts (xy 167.64 113.03) (xy 189.23 113.03)) + (stroke (width 0) (type default)) + (uuid 9eb4b7e2-a6df-40c6-be75-6b7d44d944a6) + ) + (wire (pts (xy 187.96 133.35) (xy 187.96 142.24)) + (stroke (width 0) (type default)) + (uuid a0c4970a-d536-4ae9-a361-c13870d58357) + ) + (wire (pts (xy 85.09 81.28) (xy 124.46 81.28)) + (stroke (width 0) (type default)) + (uuid a1ea5c09-4c75-4dae-8dc3-e79d08f833d6) + ) + (bus (pts (xy 30.48 68.58) (xy 30.48 71.12)) + (stroke (width 0) (type default)) + (uuid a3b3fe94-b405-4071-8422-3e97c8572913) + ) + (bus (pts (xy 233.68 52.07) (xy 233.68 54.61)) + (stroke (width 0) (type default)) + (uuid ab9bfc1c-03e7-4cb8-b0fe-6d9f93bc4ce4) + ) + (bus (pts (xy 30.48 76.2) (xy 30.48 78.74)) + (stroke (width 0) (type default)) + (uuid ad158081-8c1e-45b6-b788-7da7ca08dcc7) + ) + + (wire (pts (xy 166.37 19.05) (xy 166.37 110.49)) + (stroke (width 0) (type default)) + (uuid afb97c4b-2d09-43ee-b03c-187138cbc17b) + ) + (wire (pts (xy 149.86 125.73) (xy 151.13 125.73)) + (stroke (width 0) (type default)) + (uuid b07a33e4-ff5f-4150-941f-9957f7f4ad92) + ) + (wire (pts (xy 124.46 93.98) (xy 124.46 118.11)) + (stroke (width 0) (type default)) + (uuid b23c02b7-3ede-4e10-a862-30e78ccae497) + ) + (bus (pts (xy 270.51 39.37) (xy 270.51 41.91)) + (stroke (width 0) (type default)) + (uuid b39d2a73-a9b0-45f5-bf29-ea2abc69049b) + ) + + (wire (pts (xy 201.93 142.24) (xy 201.93 143.51)) + (stroke (width 0) (type default)) + (uuid b6057350-bc82-47a2-ba8e-2b83975958e9) + ) + (wire (pts (xy 85.09 78.74) (xy 119.38 78.74)) + (stroke (width 0) (type default)) + (uuid b68a1281-a7e5-4a73-9be7-1e2404b0e627) + ) + (wire (pts (xy 219.71 33.02) (xy 219.71 83.82)) + (stroke (width 0) (type default)) + (uuid b70db388-d936-4723-9dba-023e6c7effd7) + ) + (wire (pts (xy 128.27 110.49) (xy 128.27 95.25)) + (stroke (width 0) (type default)) + (uuid b7d08660-7be5-4d9f-aeff-42b7506fc96f) + ) + (wire (pts (xy 185.42 67.31) (xy 185.42 63.5)) + (stroke (width 0) (type default)) + (uuid b7d8cc7c-abb1-42ec-a4be-e136689cd59d) + ) + (wire (pts (xy 139.7 29.21) (xy 139.7 30.48)) + (stroke (width 0) (type default)) + (uuid b86d9330-57d2-4562-8975-3a83311fd4f2) + ) + (wire (pts (xy 171.45 19.05) (xy 171.45 120.65)) + (stroke (width 0) (type default)) + (uuid b8d9d20c-149c-4dd6-a8df-1d4650429166) + ) + (wire (pts (xy 149.86 102.87) (xy 162.56 102.87)) + (stroke (width 0) (type default)) + (uuid b9e7206a-8971-41eb-99e7-76e4616ebebe) + ) + (wire (pts (xy 116.84 25.4) (xy 187.96 25.4)) + (stroke (width 0) (type default)) + (uuid bb41a215-c0f2-4acd-ad74-bfd362b91a0e) + ) + (bus (pts (xy 163.83 16.51) (xy 165.1 16.51)) + (stroke (width 0) (type default)) + (uuid bb5881d4-836b-4f25-bb8f-5657cd15207e) + ) + + (wire (pts (xy 236.22 72.39) (xy 247.65 72.39)) + (stroke (width 0) (type default)) + (uuid bb8293c6-71ff-4a0a-b927-89546f149f96) + ) + (wire (pts (xy 33.02 71.12) (xy 49.53 71.12)) + (stroke (width 0) (type default)) + (uuid bcb955f4-79df-4c8f-9f4d-e72303603cad) + ) + (wire (pts (xy 162.56 19.05) (xy 162.56 102.87)) + (stroke (width 0) (type default)) + (uuid bf6a430c-f11c-4490-9bc1-4e1486d6f262) + ) + (wire (pts (xy 119.38 107.95) (xy 119.38 78.74)) + (stroke (width 0) (type default)) + (uuid bfca7b38-1fd3-4e65-abae-e6931d729c04) + ) + (wire (pts (xy 170.18 19.05) (xy 170.18 118.11)) + (stroke (width 0) (type default)) + (uuid c1ede053-2a39-4e35-8533-a48053929c0d) + ) + (bus (pts (xy 233.68 62.23) (xy 233.68 64.77)) + (stroke (width 0) (type default)) + (uuid c3c34c5f-0f92-42fe-9d47-538028e1661d) + ) + + (wire (pts (xy 201.93 21.59) (xy 201.93 25.4)) + (stroke (width 0) (type default)) + (uuid c4869488-c7c2-48ba-beca-6f8c43cd7ac5) + ) + (wire (pts (xy 236.22 62.23) (xy 247.65 62.23)) + (stroke (width 0) (type default)) + (uuid c4b82746-ad1b-461f-99e5-b83b98d91392) + ) + (wire (pts (xy 143.51 85.09) (xy 142.24 85.09)) + (stroke (width 0) (type default)) + (uuid c538014e-7a4b-4dec-b0a2-fe722945312c) + ) + (wire (pts (xy 260.35 41.91) (xy 267.97 41.91)) + (stroke (width 0) (type default)) + (uuid c6acb0c7-e788-4c28-814a-53b33a4f7b6c) + ) + (wire (pts (xy 157.48 45.72) (xy 189.23 45.72)) + (stroke (width 0) (type default)) + (uuid c77abb8e-3804-4068-8003-2e2accbe8c71) + ) + (wire (pts (xy 201.93 140.97) (xy 201.93 142.24)) + (stroke (width 0) (type default)) + (uuid ca225e0a-c7e3-4f78-a6f8-7e68ee4241f9) + ) + (bus (pts (xy 270.51 36.83) (xy 270.51 39.37)) + (stroke (width 0) (type default)) + (uuid cadc6953-7ee4-4e5a-9d89-313f735a1dd5) + ) + + (wire (pts (xy 129.54 48.26) (xy 121.92 48.26)) + (stroke (width 0) (type default)) + (uuid cb016fc9-e03c-4ee7-9cd4-6e1d67006f8b) + ) + (bus (pts (xy 270.51 44.45) (xy 270.51 46.99)) + (stroke (width 0) (type default)) + (uuid cdccbb2f-d4f8-4f3e-9db7-c7668080c736) + ) + + (wire (pts (xy 154.94 19.05) (xy 154.94 40.64)) + (stroke (width 0) (type default)) + (uuid d02755c3-daa4-428d-8fed-cb309172de6d) + ) + (wire (pts (xy 116.84 146.05) (xy 116.84 25.4)) + (stroke (width 0) (type default)) + (uuid d07b17ec-018a-41cf-b8b1-301d10c479b4) + ) + (bus (pts (xy 270.51 16.51) (xy 270.51 29.21)) + (stroke (width 0) (type default)) + (uuid d07e24dc-cf69-4c2e-a867-aea8ff920e2a) + ) + + (wire (pts (xy 149.86 38.1) (xy 153.67 38.1)) + (stroke (width 0) (type default)) + (uuid d1b4bf30-42f3-42df-b078-5e6e00425b52) + ) + (wire (pts (xy 247.65 34.29) (xy 229.87 34.29)) + (stroke (width 0) (type default)) + (uuid d1b8cc2d-f879-4ff2-b8d1-75c7dd235849) + ) + (wire (pts (xy 260.35 44.45) (xy 267.97 44.45)) + (stroke (width 0) (type default)) + (uuid d3174002-3aae-4062-acfa-776c0c714044) + ) + (wire (pts (xy 166.37 110.49) (xy 189.23 110.49)) + (stroke (width 0) (type default)) + (uuid d3d50f34-4e18-4e71-bbe8-271c6763f9b8) + ) + (wire (pts (xy 168.91 19.05) (xy 168.91 115.57)) + (stroke (width 0) (type default)) + (uuid d5c213df-7251-488b-83c1-4c37b1c9921c) + ) + (wire (pts (xy 149.86 50.8) (xy 160.02 50.8)) + (stroke (width 0) (type default)) + (uuid d96580a0-7391-4b50-ac61-b91346a13d8a) + ) + (bus (pts (xy 270.51 41.91) (xy 270.51 44.45)) + (stroke (width 0) (type default)) + (uuid d974b4e7-21bd-42cc-8747-4a5d30842abb) + ) + + (wire (pts (xy 163.83 19.05) (xy 163.83 105.41)) + (stroke (width 0) (type default)) + (uuid dcad69a0-9f54-42af-9c59-018abf1315e6) + ) + (wire (pts (xy 260.35 36.83) (xy 267.97 36.83)) + (stroke (width 0) (type default)) + (uuid dd19f84c-6e72-4ae9-8adb-e10fe829af86) + ) + (wire (pts (xy 189.23 63.5) (xy 185.42 63.5)) + (stroke (width 0) (type default)) + (uuid de1f75da-1b65-4d91-83ba-b8b682ee88e4) + ) + (wire (pts (xy 163.83 105.41) (xy 189.23 105.41)) + (stroke (width 0) (type default)) + (uuid dffcc4cf-7bca-4c05-a09f-79233ac6da36) + ) + (wire (pts (xy 236.22 49.53) (xy 247.65 49.53)) + (stroke (width 0) (type default)) + (uuid e1a9b002-ffbc-4142-b1ec-3aacb71d3841) + ) + (wire (pts (xy 128.27 43.18) (xy 128.27 29.21)) + (stroke (width 0) (type default)) + (uuid e4003480-06e0-43e5-bcd1-72a1130d83ef) + ) + (wire (pts (xy 260.35 31.75) (xy 267.97 31.75)) + (stroke (width 0) (type default)) + (uuid e54f428c-959f-4d6a-b293-af91292daacc) + ) + (wire (pts (xy 260.35 46.99) (xy 267.97 46.99)) + (stroke (width 0) (type default)) + (uuid e744a687-9025-4c7c-8116-11b8f1e30dad) + ) + (wire (pts (xy 119.38 107.95) (xy 129.54 107.95)) + (stroke (width 0) (type default)) + (uuid edaabca9-ace4-4daa-9307-c657be33df49) + ) + (wire (pts (xy 121.92 83.82) (xy 142.24 83.82)) + (stroke (width 0) (type default)) + (uuid ef910863-46dd-4792-857e-00a5cb298dc0) + ) + (bus (pts (xy 233.68 54.61) (xy 233.68 57.15)) + (stroke (width 0) (type default)) + (uuid efb49574-8185-4ca1-b4a5-9eec23eb3950) + ) + (bus (pts (xy 233.68 39.37) (xy 233.68 41.91)) + (stroke (width 0) (type default)) + (uuid f0a8a60b-b044-41ac-86fd-599b99f12b48) + ) + + (wire (pts (xy 171.45 120.65) (xy 189.23 120.65)) + (stroke (width 0) (type default)) + (uuid f0bd7e49-513e-4e66-9683-a7ec6895551e) + ) + (bus (pts (xy 168.91 16.51) (xy 170.18 16.51)) + (stroke (width 0) (type default)) + (uuid f14cd3b9-1017-4c93-9988-b91644306098) + ) + + (wire (pts (xy 139.7 93.98) (xy 139.7 95.25)) + (stroke (width 0) (type default)) + (uuid f2240802-3276-4d5d-a358-e8b866c8b1e0) + ) + (bus (pts (xy 233.68 64.77) (xy 233.68 69.85)) + (stroke (width 0) (type default)) + (uuid f3db484b-05cf-480c-9570-3060157093ed) + ) + (bus (pts (xy 233.68 41.91) (xy 233.68 44.45)) + (stroke (width 0) (type default)) + (uuid f4cc9a25-9fa0-4db2-9a0f-41ad46340a25) + ) + (bus (pts (xy 270.51 31.75) (xy 270.51 34.29)) + (stroke (width 0) (type default)) + (uuid f630e72d-1e62-4352-877e-d72fb2267767) + ) + (bus (pts (xy 233.68 49.53) (xy 233.68 52.07)) + (stroke (width 0) (type default)) + (uuid f8096887-f5aa-4452-82e0-f3f2e1680ea7) + ) + + (wire (pts (xy 153.67 38.1) (xy 189.23 38.1)) + (stroke (width 0) (type default)) + (uuid f968b1fb-1ec7-435a-b1cb-dc389b491009) + ) + (wire (pts (xy 139.7 130.81) (xy 139.7 133.35)) + (stroke (width 0) (type default)) + (uuid fca43740-c1e6-42d7-b3a8-269711f6009c) + ) + (wire (pts (xy 189.23 66.04) (xy 187.96 66.04)) + (stroke (width 0) (type default)) + (uuid fdcae861-9b64-4ca9-8d7e-4c40c7e4b051) + ) + + (label "DISP.DB2" (at 260.35 36.83 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 0025784e-3ef9-4741-a17d-69e523f0944f) + ) + (label "DISP.DB6" (at 260.35 46.99 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 0964b47f-8563-4b56-98dd-7834791d9935) + ) + (label "DISP.RS" (at 247.65 39.37 180) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid 20d6b969-944f-472a-8732-dbf374884ed5) + ) + (label "DISP.DB13" (at 168.91 115.57 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 24d3956b-607f-42bf-b045-72159f07894e) + ) + (label "DISP.DB14" (at 236.22 62.23 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 34fd5b3c-d4f8-4be2-b02d-652d6adb7ba8) + ) + (label "DISP.REST" (at 247.65 72.39 180) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid 37203e15-0fc2-40e3-9090-d79b25eb874a) + ) + (label "DISP.DB8" (at 162.56 102.87 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 3a7f8ba2-9c8d-4b2d-9d2b-22fad07dc7c0) + ) + (label "DISP.DB5" (at 158.75 48.26 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 407d03a7-843f-4c5a-8814-cd0a304b1756) + ) + (label "DISP.DB13" (at 236.22 59.69 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 49a73d9f-3261-4cb4-bbc3-a4e4e40bb32c) + ) + (label "DISP.DB15" (at 236.22 64.77 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 503ba41b-d7bf-4ae0-8d42-5b6620c84eee) + ) + (label "DISP.WR" (at 49.53 78.74 180) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid 56d294dc-348c-4eb2-ae34-4133a5898657) + ) + (label "DISP.RD" (at 49.53 73.66 180) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid 58650acb-70bb-4f7a-a524-c1f238f9338e) + ) + (label "DISP.DB0" (at 260.35 31.75 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 5fcd9c97-8fdf-414a-b606-37c5f69bb46e) + ) + (label "DISP.DB5" (at 260.35 44.45 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 5fdc7386-83ac-4018-aad3-eb733b0fb502) + ) + (label "DISP.DB6" (at 160.02 50.8 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 60581412-3fa5-41fc-aae3-34fe6c3f4706) + ) + (label "DISP.DB3" (at 260.35 39.37 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 651ff7fc-8e8f-4176-a990-7f693e0e0414) + ) + (label "DISP.RS" (at 49.53 81.28 180) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid 663721c3-2b13-490c-86a1-010b0172887c) + ) + (label "DISP.DB14" (at 170.18 118.11 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 7169688a-e4cc-4b6b-bcc9-2e474db1143c) + ) + (label "DISP.DB12" (at 167.64 113.03 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 745e02da-26b8-409f-aeaf-60e6b121a994) + ) + (label "DISP.WR" (at 247.65 41.91 180) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid 7b56fb0d-f8f8-4505-b7d4-715c07a3579f) + ) + (label "DISP.DB10" (at 236.22 52.07 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 82c6b655-e603-4f88-a6ca-037638b3874a) + ) + (label "DISP.DB10" (at 165.1 107.95 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 82e60851-e383-42fe-bd93-7e4f6bb9348e) + ) + (label "DISP.DB9" (at 163.83 105.41 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 850299ad-7af5-402b-84c4-645aa0eae3d3) + ) + (label "DISP{DB[0..15] RS WR RD CS REST}" (at 241.3 16.51 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 8a071ded-ce69-4d22-bb1d-4b5b31415e27) + ) + (label "DISP.DB1" (at 260.35 34.29 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 8ead8bc9-cd20-489d-bc40-196d75651da0) + ) + (label "DISP.RD" (at 247.65 44.45 180) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid 8ef7bde5-2482-40f4-afb1-67dbe0d030e0) + ) + (label "DISP.DB9" (at 236.22 49.53 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid acae77e6-c0e1-4592-a621-3120e58115c9) + ) + (label "DISP.DB12" (at 236.22 57.15 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid ae6ed9ad-2791-4e07-ac70-9bcdec70ff32) + ) + (label "DISP.DB0" (at 151.13 35.56 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid b360dff8-4a86-498f-beac-82a9a25a09b5) + ) + (label "DISP.DB11" (at 167.64 110.49 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid b46074d5-9908-43bd-86ea-d63bfadd50aa) + ) + (label "DISP.DB2" (at 154.94 40.64 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid c1eda743-3177-4722-a365-d7a47b72a77a) + ) + (label "DISP.DB7" (at 260.35 49.53 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid c303f41e-a26f-4cb3-94f4-2a938e372de4) + ) + (label "DISP.DB8" (at 236.22 46.99 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid c6e7dc6a-2896-4387-9d7e-eb832b31c398) + ) + (label "DISP.DB4" (at 260.35 41.91 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid c82c2096-a6eb-4caf-80f1-de208975fa43) + ) + (label "DISP.DB11" (at 236.22 54.61 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid cd4acf27-4b5e-4503-984c-4d802e7a321b) + ) + (label "DISP.DB1" (at 153.67 38.1 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid cd4fc5de-de33-4b05-85cd-c98d98d21a77) + ) + (label "DISP.CS" (at 49.53 71.12 180) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid cdfef98d-3979-4186-9b9a-ec245205b3da) + ) + (label "DISP.DB7" (at 161.29 53.34 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid d105ebac-4c4e-4f6e-9c63-76dbcf1538d1) + ) + (label "DISP.CS" (at 247.65 67.31 180) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid d3db3b9a-c573-4a32-81c2-c4ebc4c16359) + ) + (label "DISP.DB3" (at 156.21 43.18 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid d51a360b-f6f6-44fe-8640-29369e8fb923) + ) + (label "DISP.REST" (at 49.53 68.58 180) + (effects (font (size 1.27 1.27)) (justify right bottom)) + (uuid d9cd6fde-3203-4295-8c2d-480edf87be2d) + ) + (label "DISP.DB15" (at 171.45 120.65 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid f34b7089-0f72-46fb-b7b2-38d6d5a5b854) + ) + (label "DISP.DB4" (at 157.48 45.72 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid fd3406a7-2f05-4a1a-b123-7b0406ddc79f) + ) + + (symbol (lib_id "power:+3V3") (at 139.7 21.59 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 0fa8a02a-c7dc-4673-8222-34e0f0caa12d) + (property "Reference" "#PWR04" (at 139.7 25.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+3V3" (at 139.7 16.51 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 139.7 21.59 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 139.7 21.59 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid b61b76fd-c8e7-4450-ab89-8204757591a9)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "#PWR04") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+3V3") (at 201.93 88.9 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 26c018a5-1dec-419a-a1f3-32af7b131051) + (property "Reference" "#PWR011" (at 201.93 92.71 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+3V3" (at 201.93 83.82 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 201.93 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 201.93 88.9 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9c0b33ac-c139-47af-82e1-4dc87506c7e8)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "#PWR011") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "74xx:74LS00") (at 151.13 82.55 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 27701ab9-4629-4614-af1c-b867e3184d55) + (property "Reference" "U6" (at 151.1217 73.66 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "74LS00" (at 151.1217 76.2 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 151.13 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "http://www.ti.com/lit/gpn/sn74ls00" (at 151.13 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 0fb53087-4f64-41e7-bf56-47485df77f5f)) + (pin "2" (uuid 2e01bba2-5957-4f19-a735-92c495f9ab3c)) + (pin "3" (uuid 10f8bc01-3cac-43fd-b2ce-64e165afaaa4)) + (pin "4" (uuid df7f441f-9efa-4e0a-9233-2ff6a899e54c)) + (pin "5" (uuid d709eb98-a182-492e-9b74-f43624fa1052)) + (pin "6" (uuid 6c7333e6-5bc5-4943-9d6e-27f6360528b9)) + (pin "10" (uuid 1d7771e9-03b2-4909-b9e9-6b6b178b9ab4)) + (pin "8" (uuid c99493ee-aadb-4cb4-a278-e14f0c416d9e)) + (pin "9" (uuid af668985-8401-4baf-8ad2-622450170ba4)) + (pin "11" (uuid f7a1e9aa-c6c8-42f5-ac8d-f1fed65f23f3)) + (pin "12" (uuid f1dcb451-187a-4704-b20f-64d822cf835f)) + (pin "13" (uuid cb7bdd6f-74b7-4040-9cc1-242334109bed)) + (pin "14" (uuid 95b2da34-4894-4d2e-9cad-c68e5de9d03a)) + (pin "7" (uuid 5ed14bf3-dac7-4fc4-89e2-6984c40267f1)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "U6") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+3V3") (at 201.93 21.59 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 38767afb-83df-4230-bdc7-a0d7eb73b913) + (property "Reference" "#PWR010" (at 201.93 25.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+3V3" (at 201.93 16.51 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 201.93 21.59 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 201.93 21.59 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 8e78858b-5a3d-46bf-a4de-a00c5be82207)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "#PWR010") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "74xx:74HC165") (at 201.93 48.26 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 392f20a1-faf7-4b49-ac37-24bf3668eb21) + (property "Reference" "U1" (at 203.8859 25.4 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "74HC165" (at 203.8859 27.94 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "" (at 201.93 48.26 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "https://assets.nexperia.com/documents/data-sheet/74HC_HCT165.pdf" (at 201.93 48.26 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid fa4223e2-c5b0-484a-840d-e10b701abcc1)) + (pin "10" (uuid e08c05e5-a7ba-426e-95ec-6cc7da841a88)) + (pin "11" (uuid b1103d6b-2aba-468c-8e7b-99325b256092)) + (pin "12" (uuid 4665dcd1-850f-4b50-89fc-636b59da234c)) + (pin "13" (uuid 93e9c9d9-0aef-44a4-b47e-e96b94bbd7b0)) + (pin "14" (uuid 99c878af-d7c2-4ef0-a816-7f6a728d9656)) + (pin "15" (uuid c703dace-32f4-4420-8fdc-11bb8cf18f5e)) + (pin "16" (uuid 294bd848-4ce3-42bb-9ebf-c57dc4809942)) + (pin "2" (uuid d24f9769-5fde-49c2-9063-8573d25b58f8)) + (pin "3" (uuid bd28b3db-afba-43a3-b72b-2aa998d1a464)) + (pin "4" (uuid 1eaae596-7564-490d-850e-25c436934515)) + (pin "5" (uuid 41d549d0-4cee-48c7-a3a8-03351c3f4eb1)) + (pin "6" (uuid ba61db77-98de-4a3c-97bf-b4befd5426ff)) + (pin "7" (uuid 36a29932-9d8f-4445-9a76-99ae9a27b3f5)) + (pin "8" (uuid f05bafaa-8b5f-427f-aa58-4315408edeb7)) + (pin "9" (uuid 4df067eb-58ee-449e-a231-9b58158fc8a4)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "U1") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "74xx:74HC595") (at 139.7 113.03 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 40b9c8c9-01e4-4e00-bdbb-c2dcf4bf2442) + (property "Reference" "U5" (at 141.6559 95.25 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "74HC595" (at 141.6559 97.79 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "" (at 139.7 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/sn74hc595.pdf" (at 139.7 113.03 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 64613168-16d4-44b9-bdeb-1bf9e583909d)) + (pin "10" (uuid 0a65bdb3-7756-4e21-86c2-859aa1c9ab7b)) + (pin "11" (uuid cf12248e-ba44-477e-b2a0-4e3ff4cb9a39)) + (pin "12" (uuid e12e52cc-05cd-44cf-a0f8-edff0b7dd7c9)) + (pin "13" (uuid 3cbb11b4-8bf5-40ac-853c-12482a19eae6)) + (pin "14" (uuid 574c3a6d-9af0-4a5d-8db9-c875562a5d5d)) + (pin "15" (uuid 91f6ec66-0657-471f-8273-e44e79f5314b)) + (pin "16" (uuid a1ab94f9-510d-4a33-a0aa-92d14b74273b)) + (pin "2" (uuid d4070512-ec40-481d-a9e2-a3895eff7a90)) + (pin "3" (uuid 442d8c41-82be-4fe7-ae79-871de350314d)) + (pin "4" (uuid 4d0ea662-e283-4930-b1db-08d9f31e2c54)) + (pin "5" (uuid 10f463a6-f436-488f-aaec-e7f3a08dd70c)) + (pin "6" (uuid a2f349ad-2b12-44f7-901b-998ed67c3594)) + (pin "7" (uuid 42a0eefa-8cd6-476b-a0b8-47dd70cb4a2b)) + (pin "8" (uuid 6d2f4ae8-e98d-49af-8d46-b5c8dd2fd9ec)) + (pin "9" (uuid d261171e-db06-4422-bab1-59044af0424d)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "U5") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:R_Small") (at 132.715 93.98 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 4290d382-8213-4eb4-a664-59e078c577db) + (property "Reference" "R2" (at 132.715 88.9 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "R_Small" (at 132.715 91.44 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 132.715 93.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 132.715 93.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 8a7a5b10-5ca4-4c17-bccb-598c93803a75)) + (pin "2" (uuid a9dcea01-ffa0-41be-bd19-740f04ba8f0d)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "R2") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "74xx:74HC165") (at 201.93 115.57 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 9922a0ec-771d-4a69-97a8-62904b955bfd) + (property "Reference" "U3" (at 203.8859 92.71 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "74HC165" (at 203.8859 95.25 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "" (at 201.93 115.57 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "https://assets.nexperia.com/documents/data-sheet/74HC_HCT165.pdf" (at 201.93 115.57 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f245afc0-43dd-47fe-b41e-d46e1727ee90)) + (pin "10" (uuid 77c1064a-59b8-4b65-b8cf-a3f9611eb83b)) + (pin "11" (uuid 2da36cb5-4388-4c72-b413-0f3ff7668b14)) + (pin "12" (uuid b8a37f81-c362-4b69-aaa6-e8e2d98faf45)) + (pin "13" (uuid 2916a11a-7e1d-4566-8e18-9daf1e47bde9)) + (pin "14" (uuid 33fe0899-fd5b-48fb-a68d-5a0ebd823787)) + (pin "15" (uuid 1cc88427-a48f-411f-be85-76ebe09d557c)) + (pin "16" (uuid f4142b45-1c76-435e-a765-b0db0393206d)) + (pin "2" (uuid 439c9452-a1d4-41f0-9aa6-91af0ffcd460)) + (pin "3" (uuid 6df43dfa-8ac4-4b01-a548-6fef51b5fd44)) + (pin "4" (uuid 9e18b7d5-82ab-4ecc-a840-89f41c67c030)) + (pin "5" (uuid 79df9764-4269-4b0a-9aad-6ec5035ff5ab)) + (pin "6" (uuid 8e05fd0d-fce6-4cf0-8023-80932ccb4bb3)) + (pin "7" (uuid f66da262-dcf3-461c-90bb-9c3f1263235c)) + (pin "8" (uuid 7ee81343-14e6-4317-9e7a-0b9031774a8a)) + (pin "9" (uuid ac17c71b-12a6-4b87-835b-a7bceba08951)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "U3") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+3V3") (at 229.87 31.75 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 9dd974cc-97ff-4817-8331-60d058f5e666) + (property "Reference" "#PWR02" (at 229.87 35.56 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+3V3" (at 229.87 26.67 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 229.87 31.75 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 229.87 31.75 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 215254dc-638e-46a3-90fa-3f87be22a7f5)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "#PWR02") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "74xx:74HC595") (at 139.7 45.72 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid 9fc82b4e-8d53-4a48-89d0-4391b3abae91) + (property "Reference" "U4" (at 141.6559 27.94 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "74HC595" (at 141.6559 30.48 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "" (at 139.7 45.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "http://www.ti.com/lit/ds/symlink/sn74hc595.pdf" (at 139.7 45.72 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid c9df422e-d3a2-44d0-ae10-4091399d2d53)) + (pin "10" (uuid 0c3c60e9-5862-46cb-a588-22ef436162ba)) + (pin "11" (uuid a17c0e6a-1177-4d30-ada7-d67797baa9b0)) + (pin "12" (uuid 23449dd6-5f01-4220-bfe8-b01357a9907e)) + (pin "13" (uuid 7c3bbcba-8958-4e1e-8170-e7bc26bf59ae)) + (pin "14" (uuid a251141f-6d40-414a-9c16-5e1d5cdf7bd7)) + (pin "15" (uuid 50e77f89-c59f-407f-9dc0-4f72df8766a1)) + (pin "16" (uuid 86de2a6d-abfb-458d-88fc-a310c2e97a85)) + (pin "2" (uuid 0b309ce7-8bbe-4a85-8285-a94222710e52)) + (pin "3" (uuid e2a6f0a8-906d-46cd-9595-3fa1ff208ad6)) + (pin "4" (uuid 23e10f66-0d8a-48db-9a94-63c8b00e74de)) + (pin "5" (uuid 447aa94e-a927-419c-8a13-af0e7256c7a6)) + (pin "6" (uuid 02df8ece-4a6b-4967-816c-e6c64d9d2c1b)) + (pin "7" (uuid bc3ea428-fe25-4e1b-9830-7bce23cb749b)) + (pin "8" (uuid 5d515d6a-b53c-4482-be47-c9c6ff981148)) + (pin "9" (uuid 8566ff78-f220-417c-bef9-376802e77c4e)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "U4") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 201.93 143.51 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid a54ecccc-84df-4460-9aea-86432666f6da) + (property "Reference" "#PWR08" (at 201.93 149.86 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 201.93 148.59 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 201.93 143.51 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 201.93 143.51 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 2cfd9c16-af40-4f6f-b722-4a11975e98e2)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "#PWR08") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 139.7 133.35 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid b20ec0a8-607d-45d6-946b-77ef826175c5) + (property "Reference" "#PWR09" (at 139.7 139.7 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 139.7 138.43 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 139.7 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 139.7 133.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 2de95af4-b4df-49d6-8e2d-6b487f94f4c8)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "#PWR09") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+3V3") (at 139.7 92.71 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid b7819d17-f8b8-4879-9ecc-d0e314971d8a) + (property "Reference" "#PWR05" (at 139.7 96.52 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+3V3" (at 139.7 87.63 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 139.7 92.71 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 139.7 92.71 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 1b74d1c8-505e-4f4f-8b35-e36be8bf7ae4)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "#PWR05") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 236.22 25.4 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid b9692789-6fe9-40ae-bcfb-d1f95df79fb3) + (property "Reference" "#PWR01" (at 236.22 31.75 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 236.22 30.48 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 236.22 25.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 236.22 25.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid c5d8851b-d549-4d46-b242-c7bd06c02196)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "#PWR01") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "rppico:Pico") (at 67.31 57.15 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid c508d930-0fcc-4777-ad9f-5e18f35c0389) + (property "Reference" "U2" (at 67.31 25.4 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Pico" (at 67.31 27.94 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "RPi_Pico:RPi_Pico_SMD_TH" (at 67.31 57.15 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 67.31 57.15 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid eeca1052-5a73-46d1-8604-dbcf4d727d0d)) + (pin "10" (uuid a9c5f9c1-15c0-4848-b946-26d8857dba5e)) + (pin "11" (uuid 92efda36-041f-42ba-908c-80951b356d2b)) + (pin "12" (uuid 8261eee4-0abf-4ab0-aefb-82b8c755a83c)) + (pin "13" (uuid bf289d3d-00f4-44c3-a8ef-9ff0e58c8730)) + (pin "14" (uuid 69104e13-fde6-4ceb-92bf-35499ec192de)) + (pin "15" (uuid 7d58c2c6-dfba-4ea1-9968-e6d8efa7161c)) + (pin "16" (uuid 601da16c-41f9-4f2c-8724-bf55deb1b9ce)) + (pin "17" (uuid f196940d-7ae6-4734-b70a-b73ca2fcbbcd)) + (pin "18" (uuid 304b7d99-ad21-49ad-9220-d8437c549e4c)) + (pin "19" (uuid 7a741d3c-4335-458d-9863-d7bacded1208)) + (pin "2" (uuid 689c05b6-cc44-42fb-be4a-e0244dfbbe0a)) + (pin "20" (uuid 6a00fd04-5877-4ec9-bd52-84956918f23f)) + (pin "21" (uuid e44fef29-e22d-4fb9-92f2-04110a7b2711)) + (pin "22" (uuid 4ce36209-82d0-4370-bf63-28ce7e7353f1)) + (pin "23" (uuid c4869177-cf18-4e88-890e-cc285d6b2258)) + (pin "24" (uuid 1510b8f3-5cca-4ecd-8309-c46a14d03e0d)) + (pin "25" (uuid 7934ba91-d5d0-4776-ad1d-9f6677f4fbfe)) + (pin "26" (uuid 5894d694-47bc-44dd-9447-99076d8f0b9f)) + (pin "27" (uuid 21a1056c-3a95-4fec-90b5-841edd595d0d)) + (pin "28" (uuid 3157ee9d-b9f4-4f8d-a852-2ffd20f589fb)) + (pin "29" (uuid 764f2c8e-b11b-485f-b7ab-9763f663513a)) + (pin "3" (uuid 18549d5f-b879-4f11-8d0e-b7a28887482b)) + (pin "30" (uuid fbdaa3ac-4ef5-47a7-af78-e182a3de67c8)) + (pin "31" (uuid e6124ebe-7031-40df-8432-1ad27b4ce4dd)) + (pin "32" (uuid e9ebab5c-5d93-45bc-976f-177e53a3a7f4)) + (pin "33" (uuid 2965e431-9ead-479a-9ac8-5ab42eb49884)) + (pin "34" (uuid 26c1dcf2-2fa8-4765-9093-bf1150ea2a26)) + (pin "35" (uuid 848398d2-fe54-4fd0-9e8f-0d321ed1da1b)) + (pin "36" (uuid d14b603e-fe28-4b28-b3bb-2e35391d48d1)) + (pin "37" (uuid dbfc7ebb-f50d-4e37-acae-30caebba9716)) + (pin "38" (uuid 794d2691-fefb-453a-9ea8-59189acfbf39)) + (pin "39" (uuid 4107e8ef-0fdc-4c00-8166-f576e9c13b0f)) + (pin "4" (uuid 8021c46c-56d6-48c2-b992-5c40b17534c6)) + (pin "40" (uuid 14edfc12-916a-40ff-ba6d-3106fcc4027e)) + (pin "41" (uuid c8e6170b-4a3c-4ce6-85eb-6e473174f133)) + (pin "42" (uuid 9f776ccb-0772-4d59-9d72-26479d00b020)) + (pin "43" (uuid 8852ad5c-6075-4986-ba55-ae6630f25623)) + (pin "5" (uuid e0bd6fc0-643c-4efe-9f12-cace2f85dcc3)) + (pin "6" (uuid b5631659-4f8a-4f03-9a58-6092c718118a)) + (pin "7" (uuid a97cc777-e69f-4c6e-9d9f-825d9bf09ad5)) + (pin "8" (uuid 1014935a-acce-4db7-8b37-b781475c2e16)) + (pin "9" (uuid 880033e1-c2c2-4c2a-a684-545b3c7c0641)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "U2") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 201.93 76.2 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid e2eee0bc-3ce5-495f-a512-ed9147e35719) + (property "Reference" "#PWR07" (at 201.93 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 201.93 81.28 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 201.93 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 201.93 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid da148831-99a9-463d-b1a0-cbd6218d568a)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "#PWR07") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Device:R") (at 233.68 77.47 90) (unit 1) + (in_bom yes) (on_board yes) (dnp no) + (uuid e3d77f0c-6d76-4b62-9991-25334631a259) + (property "Reference" "R1" (at 233.68 74.93 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "25R 1/4W" (at 233.68 80.01 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 233.68 79.248 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 233.68 77.47 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 27e16203-8db5-4f90-b434-27a02db344f4)) + (pin "2" (uuid 9bb66d00-7b27-4ab3-8035-6f54da3e2526)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "R1") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "Connector_Generic:Conn_02x20_Top_Bottom") (at 252.73 54.61 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid e8b7b06b-9676-4cd9-b1af-b01d5959a56a) + (property "Reference" "J2" (at 254 25.4 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Conn_02x20_Top_Bottom" (at 254 27.94 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Connector_IDC:IDC-Header_2x20_P2.54mm_Vertical" (at 252.73 54.61 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (at 252.73 54.61 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9e32b934-3b42-4394-9e35-aa9d47bbc12d)) + (pin "10" (uuid 7f891a55-85e1-44ca-be19-1d5e521a885c)) + (pin "11" (uuid ca9fdaa6-8d6d-4daf-b643-4cf7ffdc4350)) + (pin "12" (uuid 7a9ceab8-3e44-4385-a483-a67b33a5f91b)) + (pin "13" (uuid 391f21ff-95ac-4109-a96c-30a978ac9cdc)) + (pin "14" (uuid 9d960348-911d-4567-baad-78f65a70dd9e)) + (pin "15" (uuid 413ef6c9-ac58-4e43-9ea7-046a3e2ed4a5)) + (pin "16" (uuid 8420b7a1-ce5b-44b8-8205-c3e69251979b)) + (pin "17" (uuid 55bee702-ef1c-466a-99cc-28d9c62db028)) + (pin "18" (uuid 240c22bb-f2d4-49f6-b0cb-e1c91e944444)) + (pin "19" (uuid e73e8f36-93cd-4504-b6c6-48d6d1787ee9)) + (pin "2" (uuid 73b58ee5-3200-4bba-bde5-3983ebf71dbe)) + (pin "20" (uuid 31416630-16d4-46ae-81f3-9f7a4390299d)) + (pin "21" (uuid 6cb96332-973a-43e2-8785-69b5c46e4e32)) + (pin "22" (uuid e886ea8b-b25a-4e12-b2f4-fb7dd762c10b)) + (pin "23" (uuid b53af235-b94e-48e5-b0f1-3a5e8605330e)) + (pin "24" (uuid e8b9fc54-2336-4c8d-9c24-f26005adee5b)) + (pin "25" (uuid 60ba56b1-706d-4ae9-850b-bf7c9c2eb693)) + (pin "26" (uuid 8c9b320e-c6d5-456d-970e-931fdcf2d26e)) + (pin "27" (uuid 365ad7e3-42ed-4ea6-bd3e-0f068bd3abf2)) + (pin "28" (uuid f1289f85-9e4f-4d32-9aeb-dfac7aaef83f)) + (pin "29" (uuid b63cfaa4-2889-4b60-bdbe-c525fe2e9516)) + (pin "3" (uuid 986444cf-172a-4ceb-8ff7-76f65201dcc6)) + (pin "30" (uuid 1ba08a05-9714-4509-ae01-fb9ec6f1a1f1)) + (pin "31" (uuid e8e13b22-20d4-4da7-8069-e4521d2b53d8)) + (pin "32" (uuid 3fcaa5b2-ba5b-4ac0-b3ac-09bfa425220d)) + (pin "33" (uuid d0da2a93-f53c-486a-840f-5b591f42d032)) + (pin "34" (uuid 804803e8-96b7-4539-82ff-c30f61700d4c)) + (pin "35" (uuid daffb1bb-9c28-488b-bede-f7add0353468)) + (pin "36" (uuid 407e8f46-44f8-453a-9a18-ad7f5cb9da4d)) + (pin "37" (uuid e6b14990-956b-43ef-994f-4755a7787983)) + (pin "38" (uuid 3a30e046-9808-496a-bce0-69c7ed1f3e6a)) + (pin "39" (uuid a9cb3339-972f-4ada-b5de-e57d7f8214b3)) + (pin "4" (uuid a735c130-eb72-4ad3-97eb-7ad00450cb19)) + (pin "40" (uuid d73bb642-ef11-4c85-a1bb-404805c2326b)) + (pin "5" (uuid 8efce727-28ff-4b52-b3d2-de091810b0c5)) + (pin "6" (uuid 782eee56-2858-4ed7-887f-9564a4321233)) + (pin "7" (uuid 99d62bab-a980-46ab-8aa5-a2b411758321)) + (pin "8" (uuid ed9f169f-9d89-43d9-909b-7f835b31def7)) + (pin "9" (uuid b765dd7a-920c-43bc-8029-d0f21e8738e4)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "J2") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:GND") (at 139.7 64.77 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid eb6fdbdf-c0d2-4eb4-8528-be77e4aae1de) + (property "Reference" "#PWR06" (at 139.7 71.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (at 139.7 69.85 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 139.7 64.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 139.7 64.77 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid b5f46793-1779-4176-b280-19956a899df6)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "#PWR06") (unit 1) + ) + ) + ) + ) + + (symbol (lib_id "power:+5V") (at 227.33 73.66 0) (unit 1) + (in_bom yes) (on_board yes) (dnp no) (fields_autoplaced) + (uuid f374283f-d677-43ee-871b-70d75a17f217) + (property "Reference" "#PWR03" (at 227.33 77.47 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (at 227.33 68.58 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (at 227.33 73.66 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (at 227.33 73.66 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 09dc1d48-cbc2-4c42-8f18-fa7d72d41033)) + (instances + (project "rp2040_radio" + (path "/a850cd64-290c-40af-a783-f83343c37ff2" + (reference "#PWR03") (unit 1) + ) + ) + ) + ) + + (sheet_instances + (path "/" (page "1")) + ) +) diff --git a/hw/rp2040_radio/sym-lib-table b/hw/rp2040_radio/sym-lib-table new file mode 100644 index 0000000..d9c7d35 --- /dev/null +++ b/hw/rp2040_radio/sym-lib-table @@ -0,0 +1,4 @@ +(sym_lib_table + (version 7) + (lib (name "rppico")(type "KiCad")(uri "/home/matthias/devel/rp2040-hid/hw/libs/RP-Pico Libraries/MCU_RaspberryPi_and_Boards.kicad_sym")(options "")(descr "")) +) diff --git a/src/main.c b/src/app_main.c similarity index 78% rename from src/main.c rename to src/app_main.c index c9d0e0a..6d64508 100644 --- a/src/main.c +++ b/src/app_main.c @@ -21,8 +21,8 @@ __attribute__((packed)) struct button_report { uint32_t buttons; }; -#define APP_MODE_MASK 0x0f -#define APP_FLAG_MACH 0x10 +#define APP_MODE_MASK 0x0f +#define APP_FLAG_MACH 0x10 #define APP_FLAG_PITCH 0x20 #define APP_UPDATE 0 @@ -65,63 +65,63 @@ static int min_as = 0, max_as = 999, max_mach = 990; static void render_uint(int start, int len, unsigned val, bool leading_zeros) { const int end = start + len - 1; - for (int i = 0; i < len; ++i) { - if (val || i == 0 || leading_zeros) - sevenseg_set_digit(end - i, val % 10); - else - sevenseg_set_digit(end - i, LED_BLANK); - val /= 10; + for(int i = 0;i < len;++i) { + if (val || i == 0 || leading_zeros) + sevenseg_set_digit(end - i, val % 10); + else + sevenseg_set_digit(end - i, LED_BLANK); + val /= 10; } } static void render_blank(int start, int len) { - for (int i = 0; i < len; ++i) { - sevenseg_set_digit(start + i, LED_BLANK); + for(int i = 0;i < len;++i) { + sevenseg_set_digit(start+i, LED_BLANK); } -} +} static void update_hdg_display(void) { if (show_hdg) { - render_uint(0, 3, hdg, true); + render_uint(0, 3, hdg, true); } else { - render_blank(0, 3); + render_blank(0, 3); } } static void update_alt_display(void) { if (show_alt) { - render_uint(3, 5, alt, false); + render_uint(3, 5, alt, false); } else { - render_blank(3, 5); + render_blank(3, 5); } } static void update_vs_display(void) { if (pitch_mode) { - int val = vs; - unsigned int val_abs = val < 0 ? -val : val; - if (val < 0) { - sevenseg_set_digit(8, LED_MINUS); - } else { - sevenseg_set_digit(8, LED_BLANK); - } - render_uint(9, 2, val_abs, false); - sevenseg_set_digit(11, LED_DEGREE); + int val = vs; + unsigned int val_abs = val < 0 ? -val : val; + if (val < 0) { + sevenseg_set_digit(8, LED_MINUS); + } else { + sevenseg_set_digit(8, LED_BLANK); + } + render_uint(9, 2, val_abs, false); + sevenseg_set_digit(11, LED_DEGREE); } else if (show_vs) { - int val = vs; - unsigned val_abs = val < 0 ? -val : val; - render_uint(8, 4, val_abs, false); - if (val >= 1000 || val <= -1000) { - sevenseg_mod_digit(8, val < 0 ? LED_DECIMAL : 0); - } else if (val < 0) { - sevenseg_set_digit(8, LED_MINUS); - } + int val = vs; + unsigned val_abs = val < 0 ? -val : val; + render_uint(8, 4, val_abs, false); + if (val >= 1000 || val <= -1000) { + sevenseg_mod_digit(8, val < 0 ? LED_DECIMAL : 0); + } else if (val < 0) { + sevenseg_set_digit(8, LED_MINUS); + } } else { - render_blank(8, 4); + render_blank(8, 4); } } @@ -131,12 +131,12 @@ static void update_as_display(void) int val = as; if (mach_mode) { sevenseg_set_digit(12, 0 | LED_DECIMAL); - render_uint(13, 3, val, true); + render_uint(13, 3, val, true); } else { - render_uint(12, 4, val, false); + render_uint(12, 4, val, false); } } else { - render_blank(12, 4); + render_blank(12, 4); } } @@ -144,37 +144,37 @@ static int crement_val(bool inc, int val, int min, int max, int step, bool wrap) { // round to step in correct direction if (inc) { - val = ((val - step + 1) / step) * step; + val = ((val - step + 1) / step) * step; } else { - val = ((val + step - 1) / step) * step; + val = ((val + step - 1) / step) * step; } if (inc) { - return val >= max - step + 1 ? (wrap ? min : max) : val + step; + return val >= max - step + 1 ? (wrap ? min : max) : val + step; } else { - return val <= min + step ? (wrap ? max : min) : val - step; + return val <= min + step ? (wrap ? max : min) : val - step; } } void rotary_event(int rot_ch, bool ccw) { if (rot_ch == 3) { - hdg = crement_val(!ccw, hdg, 0, 359, 1, true); + hdg = crement_val(!ccw, hdg, 0, 359, 1, true); update_hdg_display(); } else if (rot_ch == 2) { - alt = crement_val(!ccw, alt, 0, 50000, 100, false); + alt = crement_val(!ccw, alt, 0, 50000, 100, false); update_alt_display(); } else if (rot_ch == 1) { - if (pitch_mode) { - vs = crement_val(!ccw, vs, -20, 20, 1, false); - } else { - vs = crement_val(!ccw, vs, -5000, 5000, 100, false); - } + if (pitch_mode) { + vs = crement_val(!ccw, vs, -20, 20, 1, false); + } else { + vs = crement_val(!ccw, vs, -5000, 5000, 100, false); + } update_vs_display(); } else { if (mach_mode) { - as = crement_val(!ccw, as, 0, 990, 10, false); + as = crement_val(!ccw, as, 0, 990, 10, false); } else { - as = crement_val(!ccw, as, min_as, max_as, 1, false); + as = crement_val(!ccw, as, min_as, max_as, 1, false); } update_as_display(); } @@ -263,19 +263,19 @@ static void app_update_report(struct app_report const *report) hdg = report->update.hdg; update_hdg_display(); send_heading_reports = true; - show_hdg = true; + show_hdg = true; } else if (report->update.hdg == -2) { - show_hdg = false; + show_hdg = false; } if (report->update.alt != 0xffff) { - if (report->update.alt == 0xfffe) { - show_alt = false; - } else { - alt = report->update.alt; - update_alt_display(); - send_alt_reports = true; - show_alt = true; - } + if (report->update.alt == 0xfffe) { + show_alt = false; + } else { + alt = report->update.alt; + update_alt_display(); + send_alt_reports = true; + show_alt = true; + } } if (report->update.vs != -1) { if (report->update.vs == -2) { @@ -329,9 +329,9 @@ void tud_hid_set_report_cb(uint8_t instance, uint8_t report_id, hid_report_type_ case APP_INIT: app_init_report(&report); break; - case APP_BOOTLOADER: - reset_usb_boot(0, 0); - break; + case APP_BOOTLOADER: + reset_usb_boot(0, 0); + break; default: break; } diff --git a/src/fonts.h b/src/fonts.h new file mode 100644 index 0000000..253b6ff --- /dev/null +++ b/src/fonts.h @@ -0,0 +1,354 @@ +/** \file fonts.h + * \brief Fixed-width fonts for use with the SSD1289 LCD controller library and mbed + * + * Original work by Henning Karlsen in his UTFT display library for Arduino/chipKIT. + * \sa Comments in ssd1289.h + * + * This header provides 3 fixed-width fonts - 2 with all printable characters from the + * ASCII table and one 7-segment font with only the numbers 0-9. The smallest font is + * 8px wide and 12px tall, the big font is 16x16 pixels, and the 7-segment font is the + * biggest. + * + * If none of the provided fonts is suitable for your reuqirements, you can provide + * your own font, if the following rules are followed: + * + * 1) The library is not designed to deal with TrueType or Postscript fonts. Only + * fixed-width fonts can be used. + * + * 2) The font data should include only printable characters. For example, the provided + * fonts show either only numbers (7-segment), or contain the Latin-1 characters in + * the ASCII table starting from position 32 (the space character ' '). + * + * 3) No characters can be skipped. If you start with capital 'A' and wish to include + * small-case letters in your font as well, then all the characters in between 'A' + * and 'z' must be included in the font. If you WISH TO AVOID PRINTING a specific + * caracter, do not skip it, but include the appropriate amount of empty (0) bits + * to make-up for the "hidden" value. + * + * 4) Every pixel in the character is represented by a bit. It is not required, that a + * character is represented by a full number of bytes; however if the last character + * in the font does not end in a full byte, then add the appropriate 0 bits as fillers. + * For example a character in a 10x18 font (10px wide, 18px high) has 180 bits, which + * is 22 bytes and 4 remaining bits per character. If all whole sum of the bits of + * each character in the font is not evenly divisible by 8, then add as many 0 bits to + * the last character in the font, until this condition is satisfied. + * + * 5) The font array must start with the following 4 bytes before the first byte of the + * first character in the font: a) the width of the characters; b) the height of the + * characters; c) the offset of the first character in the font (the number of the + * first character as found in the ASCII table); and d) total number of characters in + * the font (placeholders for "hidden" characters are counted as well). + * + * As example let's continue the aforementioned 10x18 font. This would mean that each + * character is 10 bits wide and 18 tall. To design a character, 0s and 1s are used in + * a grid with the character dimensions, where 0 represents and empty, "background color" + * pixel, while 1 represents a "foreground" pixel. So to print "0" on the screen, the + * character data might look like the following: + * \code + * 0000000000 + * 0111111110 + * 0111111110 + * 0110000110 + * 0110000110 + * 0110000110 + * 0110000110 + * 0110000110 + * 0110000110 + * 0110000110 + * 0110000110 + * 0110000110 + * 0110000110 + * 0110000110 + * 0111111110 + * 0111111110 + * 0000000000 + * 0000000000 + * \endcode + * When all characters in the font have their bit grids, just place them in order one after + * another, and remove the "new lines" - you will have the whole font array in one very very + * long line. Start from the beginning of this line and break it up in pieces of 1 byte (8 + * bits). Our "0" will look at first something like: + * \code + * 000000000001111111100111111110011000011001100001100110000110011000011001100001100110000110011000011001100001100110000110011000011001100001100111111110011111111000000000000000000000 + * \endcode + * and after breaking up + * \code + * 00000000 + * 00011111 + * 11100111 + * 11111001 + * 10000110 + * 01100001 + * 10011000 + * 01100110 + * 00011001 + * 10000110 + * 01100001 + * 10011000 + * 01100110 + * 00011001 + * 10000110 + * 01100001 + * 10011000 + * 01100111 + * 11111001 + * 11111110 + * 00000000 + * 00000000 + * 0000 + * \endcode + * If this were the last character int the font array, just add the four 0 bits to fill-up + * to a full byte, otherwise concatenate the first four bits from the next character, etc., + * etc. When you have all te bytes for the font, convert them to hexadecimal format for + * more compact representation. + * + * The new font array is almost done. In order to satisfy requirement #5, prepend the + * following 4 bytes to the beginning of the array: 0x0A for the font width; 0x12 for the + * font height; 0x20 for offset, if the first character in the font is , or 0x60 if + * "0" is the first character; and 0x?? for the total number of characters in the font. + * That's it, the font is done. Just use the array name with the #SetFont(const char*) + * function as with the fonts contained in this header file. + * + * Copyright (C)2010-2012 Henning Karlsen. All right reserved. + * Copyright (C)2012 Todor Todorov. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to: + * + * Free Software Foundation, Inc. + * 51 Franklin St, 5th Floor, Boston, MA 02110-1301, USA + */ +#ifndef SSD1289_FONTS_H +#define SSD1289_FONTS_H + +/** Small font, 8x12 pixels, 1st character, 95 total characters */ +const char Font8x12[] = { + // 0x08,0x0C,0x20,0x5F, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // + 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00, // ! + 0x00,0x28,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " + 0x00,0x00,0x28,0x28,0xFC,0x28,0x50,0xFC,0x50,0x50,0x00,0x00, // # + 0x00,0x20,0x78,0xA8,0xA0,0x60,0x30,0x28,0xA8,0xF0,0x20,0x00, // $ + 0x00,0x00,0x48,0xA8,0xB0,0x50,0x28,0x34,0x54,0x48,0x00,0x00, // % + 0x00,0x00,0x20,0x50,0x50,0x78,0xA8,0xA8,0x90,0x6C,0x00,0x00, // & + 0x00,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' + 0x00,0x04,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x04,0x00, // ( + 0x00,0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x00, // ) + 0x00,0x00,0x00,0x20,0xA8,0x70,0x70,0xA8,0x20,0x00,0x00,0x00, // * + 0x00,0x00,0x20,0x20,0x20,0xF8,0x20,0x20,0x20,0x00,0x00,0x00, // + + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x80, // , + 0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00, // - + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00, // . + 0x00,0x08,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x80,0x00, // / + 0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 0 + 0x00,0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 1 + 0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x40,0x80,0xF8,0x00,0x00, // 2 + 0x00,0x00,0x70,0x88,0x08,0x30,0x08,0x08,0x88,0x70,0x00,0x00, // 3 + 0x00,0x00,0x10,0x30,0x50,0x50,0x90,0x78,0x10,0x18,0x00,0x00, // 4 + 0x00,0x00,0xF8,0x80,0x80,0xF0,0x08,0x08,0x88,0x70,0x00,0x00, // 5 + 0x00,0x00,0x70,0x90,0x80,0xF0,0x88,0x88,0x88,0x70,0x00,0x00, // 6 + 0x00,0x00,0xF8,0x90,0x10,0x20,0x20,0x20,0x20,0x20,0x00,0x00, // 7 + 0x00,0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x88,0x70,0x00,0x00, // 8 + 0x00,0x00,0x70,0x88,0x88,0x88,0x78,0x08,0x48,0x70,0x00,0x00, // 9 + 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x20,0x00,0x00, // : + 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x20,0x00, // ; + 0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00, // < + 0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x00,0x00, // = + 0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00, // > + 0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x20,0x00,0x20,0x00,0x00, // ? + 0x00,0x00,0x70,0x88,0x98,0xA8,0xA8,0xB8,0x80,0x78,0x00,0x00, // @ + 0x00,0x00,0x20,0x20,0x30,0x50,0x50,0x78,0x48,0xCC,0x00,0x00, // A + 0x00,0x00,0xF0,0x48,0x48,0x70,0x48,0x48,0x48,0xF0,0x00,0x00, // B + 0x00,0x00,0x78,0x88,0x80,0x80,0x80,0x80,0x88,0x70,0x00,0x00, // C + 0x00,0x00,0xF0,0x48,0x48,0x48,0x48,0x48,0x48,0xF0,0x00,0x00, // D + 0x00,0x00,0xF8,0x48,0x50,0x70,0x50,0x40,0x48,0xF8,0x00,0x00, // E + 0x00,0x00,0xF8,0x48,0x50,0x70,0x50,0x40,0x40,0xE0,0x00,0x00, // F + 0x00,0x00,0x38,0x48,0x80,0x80,0x9C,0x88,0x48,0x30,0x00,0x00, // G + 0x00,0x00,0xCC,0x48,0x48,0x78,0x48,0x48,0x48,0xCC,0x00,0x00, // H + 0x00,0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0xF8,0x00,0x00, // I + 0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0xE0,0x00, // J + 0x00,0x00,0xEC,0x48,0x50,0x60,0x50,0x50,0x48,0xEC,0x00,0x00, // K + 0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x44,0xFC,0x00,0x00, // L + 0x00,0x00,0xD8,0xD8,0xD8,0xD8,0xA8,0xA8,0xA8,0xA8,0x00,0x00, // M + 0x00,0x00,0xDC,0x48,0x68,0x68,0x58,0x58,0x48,0xE8,0x00,0x00, // N + 0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // O + 0x00,0x00,0xF0,0x48,0x48,0x70,0x40,0x40,0x40,0xE0,0x00,0x00, // P + 0x00,0x00,0x70,0x88,0x88,0x88,0x88,0xE8,0x98,0x70,0x18,0x00, // Q + 0x00,0x00,0xF0,0x48,0x48,0x70,0x50,0x48,0x48,0xEC,0x00,0x00, // R + 0x00,0x00,0x78,0x88,0x80,0x60,0x10,0x08,0x88,0xF0,0x00,0x00, // S + 0x00,0x00,0xF8,0xA8,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // T + 0x00,0x00,0xCC,0x48,0x48,0x48,0x48,0x48,0x48,0x30,0x00,0x00, // U + 0x00,0x00,0xCC,0x48,0x48,0x50,0x50,0x30,0x20,0x20,0x00,0x00, // V + 0x00,0x00,0xA8,0xA8,0xA8,0x70,0x50,0x50,0x50,0x50,0x00,0x00, // W + 0x00,0x00,0xD8,0x50,0x50,0x20,0x20,0x50,0x50,0xD8,0x00,0x00, // X + 0x00,0x00,0xD8,0x50,0x50,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // Y + 0x00,0x00,0xF8,0x90,0x10,0x20,0x20,0x40,0x48,0xF8,0x00,0x00, // Z + 0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00, // [ + 0x00,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x10,0x08,0x00,0x00, // + 0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00, // ] + 0x00,0x20,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC, // _ + 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' + 0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x38,0x48,0x3C,0x00,0x00, // a + 0x00,0x00,0xC0,0x40,0x40,0x70,0x48,0x48,0x48,0x70,0x00,0x00, // b + 0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x40,0x40,0x38,0x00,0x00, // c + 0x00,0x00,0x18,0x08,0x08,0x38,0x48,0x48,0x48,0x3C,0x00,0x00, // d + 0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x78,0x40,0x38,0x00,0x00, // e + 0x00,0x00,0x1C,0x20,0x20,0x78,0x20,0x20,0x20,0x78,0x00,0x00, // f + 0x00,0x00,0x00,0x00,0x00,0x3C,0x48,0x30,0x40,0x78,0x44,0x38, // g + 0x00,0x00,0xC0,0x40,0x40,0x70,0x48,0x48,0x48,0xEC,0x00,0x00, // h + 0x00,0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x70,0x00,0x00, // i + 0x00,0x00,0x10,0x00,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0xE0, // j + 0x00,0x00,0xC0,0x40,0x40,0x5C,0x50,0x70,0x48,0xEC,0x00,0x00, // k + 0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0xF8,0x00,0x00, // l + 0x00,0x00,0x00,0x00,0x00,0xF0,0xA8,0xA8,0xA8,0xA8,0x00,0x00, // m + 0x00,0x00,0x00,0x00,0x00,0xF0,0x48,0x48,0x48,0xEC,0x00,0x00, // n + 0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x30,0x00,0x00, // o + 0x00,0x00,0x00,0x00,0x00,0xF0,0x48,0x48,0x48,0x70,0x40,0xE0, // p + 0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x48,0x48,0x38,0x08,0x1C, // q + 0x00,0x00,0x00,0x00,0x00,0xD8,0x60,0x40,0x40,0xE0,0x00,0x00, // r + 0x00,0x00,0x00,0x00,0x00,0x78,0x40,0x30,0x08,0x78,0x00,0x00, // s + 0x00,0x00,0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x18,0x00,0x00, // t + 0x00,0x00,0x00,0x00,0x00,0xD8,0x48,0x48,0x48,0x3C,0x00,0x00, // u + 0x00,0x00,0x00,0x00,0x00,0xEC,0x48,0x50,0x30,0x20,0x00,0x00, // v + 0x00,0x00,0x00,0x00,0x00,0xA8,0xA8,0x70,0x50,0x50,0x00,0x00, // w + 0x00,0x00,0x00,0x00,0x00,0xD8,0x50,0x20,0x50,0xD8,0x00,0x00, // x + 0x00,0x00,0x00,0x00,0x00,0xEC,0x48,0x50,0x30,0x20,0x20,0xC0, // y + 0x00,0x00,0x00,0x00,0x00,0x78,0x10,0x20,0x20,0x78,0x00,0x00, // z + 0x00,0x18,0x10,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x18,0x00, // { + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, // | + 0x00,0x60,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0x60,0x00, // } + 0x40,0xA4,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ +}; + +/** Big font, 16x16 pixels, 1st character, 95 total characters */ +const char Font16x16[] = { + 0x10,0x10,0x20,0x5F, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // + 0x00,0x00,0x00,0x00,0x07,0x00,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x00,0x00, // ! + 0x00,0x00,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x06,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " + 0x00,0x00,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x7F,0xFE,0x7F,0xFE,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x7F,0xFE,0x7F,0xFE,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x00,0x00, // # + 0x00,0x00,0x02,0x40,0x02,0x40,0x0F,0xF8,0x1F,0xF8,0x1A,0x40,0x1A,0x40,0x1F,0xF0,0x0F,0xF8,0x02,0x58,0x02,0x58,0x1F,0xF8,0x1F,0xF0,0x02,0x40,0x02,0x40,0x00,0x00, // $ + 0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x10,0x0E,0x30,0x0E,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x70,0x0C,0x70,0x08,0x70,0x00,0x00,0x00,0x00,0x00,0x00, // % + 0x00,0x00,0x00,0x00,0x0F,0x00,0x19,0x80,0x19,0x80,0x19,0x80,0x0F,0x00,0x0F,0x08,0x0F,0x98,0x19,0xF8,0x18,0xF0,0x18,0xE0,0x19,0xF0,0x0F,0x98,0x00,0x00,0x00,0x00, // & + 0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' + 0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xF0,0x00,0x00,0x00,0x00, // ( + 0x00,0x00,0x00,0x00,0x0F,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x0F,0x00,0x00,0x00,0x00,0x00, // ) + 0x00,0x00,0x00,0x00,0x01,0x80,0x11,0x88,0x09,0x90,0x07,0xE0,0x07,0xE0,0x3F,0xFC,0x3F,0xFC,0x07,0xE0,0x07,0xE0,0x09,0x90,0x11,0x88,0x01,0x80,0x00,0x00,0x00,0x00, // * + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x0F,0xF0,0x0F,0xF0,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // + + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x0E,0x00,0x00,0x00, // , + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00, // , + 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x06,0x00,0x0E,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x00,0x00,0x00,0x00, // / + + 0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x78,0x1C,0xF8,0x1C,0xF8,0x1D,0xB8,0x1D,0xB8,0x1F,0x38,0x1F,0x38,0x1E,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 0 + 0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x03,0x80,0x1F,0x80,0x1F,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x1F,0xF0,0x00,0x00,0x00,0x00, // 1 + 0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x38,0x1C,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // 2 + 0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x38,0x00,0x38,0x00,0x70,0x03,0xC0,0x03,0xC0,0x00,0x70,0x00,0x38,0x1C,0x38,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // 3 + 0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0xE0,0x03,0xE0,0x06,0xE0,0x0C,0xE0,0x18,0xE0,0x1F,0xF8,0x1F,0xF8,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x03,0xF8,0x00,0x00,0x00,0x00, // 4 + 0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xE0,0x1F,0xF0,0x00,0x78,0x00,0x38,0x1C,0x38,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // 5 + 0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0x00,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xF0,0x1F,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 6 + 0x00,0x00,0x00,0x00,0x1F,0xFC,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00, // 7 + 0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0x38,0x07,0xE0,0x07,0xE0,0x1C,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 8 + 0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0xF8,0x0F,0xF8,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x07,0xC0,0x00,0x00,0x00,0x00, // 9 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ; + 0x00,0x00,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x00, // < + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // = + 0x00,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x00,0x00, // > + 0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1E,0x78,0x18,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00, // ? + + 0x00,0x00,0x0F,0xF8,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0xFC,0x1C,0xFC,0x1C,0xFC,0x1C,0xFC,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xF0,0x07,0xF8,0x00,0x00, // @ + 0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x00,0x00,0x00,0x00, // A + 0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1F,0xF0,0x00,0x00,0x00,0x00, // B + 0x00,0x00,0x00,0x00,0x07,0xF0,0x0E,0x38,0x1C,0x38,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x38,0x0E,0x38,0x07,0xF0,0x00,0x00,0x00,0x00, // C + 0x00,0x00,0x00,0x00,0x1F,0xE0,0x0E,0x70,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x70,0x1F,0xE0,0x00,0x00,0x00,0x00, // D + 0x00,0x00,0x00,0x00,0x1F,0xF8,0x0E,0x18,0x0E,0x08,0x0E,0x00,0x0E,0x30,0x0F,0xF0,0x0F,0xF0,0x0E,0x30,0x0E,0x00,0x0E,0x08,0x0E,0x18,0x1F,0xF8,0x00,0x00,0x00,0x00, // E + 0x00,0x00,0x00,0x00,0x1F,0xF8,0x0E,0x18,0x0E,0x08,0x0E,0x00,0x0E,0x30,0x0F,0xF0,0x0F,0xF0,0x0E,0x30,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // F + 0x00,0x00,0x00,0x00,0x07,0xF0,0x0E,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0xF8,0x1C,0x38,0x1C,0x38,0x0E,0x38,0x07,0xF8,0x00,0x00,0x00,0x00, // G + 0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1F,0xF0,0x1F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // H + 0x00,0x00,0x00,0x00,0x0F,0xE0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x0F,0xE0,0x00,0x00,0x00,0x00, // I + 0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x38,0x70,0x38,0x70,0x38,0x70,0x38,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // J + 0x00,0x00,0x00,0x00,0x1E,0x38,0x0E,0x38,0x0E,0x70,0x0E,0xE0,0x0F,0xC0,0x0F,0x80,0x0F,0x80,0x0F,0xC0,0x0E,0xE0,0x0E,0x70,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // K + 0x00,0x00,0x00,0x00,0x1F,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x08,0x0E,0x18,0x0E,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // L + 0x00,0x00,0x00,0x00,0x1C,0x1C,0x1E,0x3C,0x1F,0x7C,0x1F,0xFC,0x1F,0xFC,0x1D,0xDC,0x1C,0x9C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00, // M + 0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1E,0x1C,0x1F,0x1C,0x1F,0x9C,0x1D,0xDC,0x1C,0xFC,0x1C,0x7C,0x1C,0x3C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00, // N + 0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0xF0,0x0E,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x0E,0x38,0x07,0xF0,0x03,0xE0,0x00,0x00,0x00,0x00, // O + + 0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // P + 0x00,0x00,0x00,0x00,0x03,0xE0,0x0F,0x78,0x0E,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x7C,0x1C,0xFC,0x0F,0xF8,0x0F,0xF8,0x00,0x38,0x00,0xFC,0x00,0x00, // Q + 0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x70,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // R + 0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x00,0x0F,0xE0,0x07,0xF0,0x00,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // S + 0x00,0x00,0x00,0x00,0x1F,0xFC,0x19,0xCC,0x11,0xC4,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x07,0xF0,0x00,0x00,0x00,0x00, // T + 0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // U + 0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x00,0x00,0x00,0x00, // V + 0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x0F,0xF8,0x0F,0xF8,0x07,0x70,0x07,0x70,0x00,0x00,0x00,0x00, // W + 0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x03,0x80,0x07,0xC0,0x0E,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // X + 0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x0F,0xE0,0x00,0x00,0x00,0x00, // Y + 0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x38,0x18,0x38,0x10,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x08,0x1C,0x18,0x1C,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // Z + 0x00,0x00,0x00,0x00,0x07,0xF0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0xF0,0x00,0x00,0x00,0x00, // [ + 0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0x07,0x00,0x00,0x00,0x00, // + 0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x07,0xF0,0x00,0x00,0x00,0x00, // ] + 0x00,0x00,0x01,0x80,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0x7F,0xFF, // _ + + 0x00,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x70,0x00,0x70,0x0F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // a + 0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1B,0xF0,0x00,0x00,0x00,0x00, // b + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x00,0x1C,0x00,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // c + 0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x70,0x00,0x70,0x00,0x70,0x0F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // d + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1F,0xF0,0x1C,0x00,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // e + 0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0x70,0x07,0x70,0x07,0x00,0x07,0x00,0x1F,0xE0,0x1F,0xE0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00, // f + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xD8,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xF0,0x07,0xF0,0x00,0x70,0x1C,0x70,0x0F,0xE0, // g + 0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0xF0,0x0F,0x38,0x0F,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // h + 0x00,0x00,0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x0F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x0F,0xF8,0x00,0x00,0x00,0x00, // i + 0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x00,0x03,0xF0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x1C,0x70,0x0C,0xF0,0x07,0xE0, // j + 0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x38,0x0E,0x70,0x0E,0xE0,0x0F,0xC0,0x0E,0xE0,0x0E,0x70,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // k + 0x00,0x00,0x00,0x00,0x0F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x0F,0xF8,0x00,0x00,0x00,0x00, // l + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x00,0x00,0x00,0x00, // m + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // n + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // o + + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0E,0x00,0x0E,0x00,0x1F,0x00, // p + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xB0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x1F,0xE0,0x00,0xE0,0x00,0xE0,0x01,0xF0, // q + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xF0,0x0F,0xF8,0x0F,0x38,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // r + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x30,0x1C,0x30,0x0F,0x80,0x03,0xE0,0x18,0x70,0x18,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // s + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x07,0x00,0x1F,0xF0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x70,0x07,0x70,0x03,0xE0,0x00,0x00,0x00,0x00, // t + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // u + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x00,0x00,0x00,0x00, // v + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x9C,0x1C,0x9C,0x0F,0xF8,0x07,0x70,0x07,0x70,0x00,0x00,0x00,0x00, // w + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0xE0,0x1C,0xE0,0x0F,0xC0,0x07,0x80,0x07,0x80,0x0F,0xC0,0x1C,0xE0,0x1C,0xE0,0x00,0x00,0x00,0x00, // x + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x07,0xF0,0x03,0xE0,0x00,0xE0,0x01,0xC0,0x1F,0x80, // y + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x18,0xE0,0x11,0xC0,0x03,0x80,0x07,0x00,0x0E,0x20,0x1C,0x60,0x1F,0xE0,0x00,0x00,0x00,0x00, // z + 0x00,0x00,0x00,0x00,0x01,0xF8,0x03,0x80,0x03,0x80,0x03,0x80,0x07,0x00,0x1C,0x00,0x1C,0x00,0x07,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0xF8,0x00,0x00,0x00,0x00, // { + 0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00, // | + 0x00,0x00,0x00,0x00,0x1F,0x80,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0xE0,0x00,0x38,0x00,0x38,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x1F,0x80,0x00,0x00,0x00,0x00, // } + 0x00,0x00,0x00,0x00,0x1F,0x1C,0x3B,0x9C,0x39,0xDC,0x38,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 // ~ +}; + +/** 7-segment font, only digits 0-9, 10 total characters */ +const char Font7Segment[] = { + 0x20,0x32,0x30,0x0A, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x0C,0xFF,0xFE,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x38,0x00,0x00,0x18,0x20,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x38,0x00,0x00,0x18,0x3E,0x00,0x00,0x78,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x1E,0x00,0x00,0xF0,0x0C,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 1 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x00,0xFF,0xFE,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x01,0xFF,0xFE,0x18,0x03,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x27,0xFF,0xFF,0xC0,0x39,0xFF,0xFF,0x00,0x3E,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0C,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x00,0xFF,0xFE,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x01,0xFF,0xFE,0x18,0x03,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 3 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x0C,0x00,0x00,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x39,0xFF,0xFE,0x18,0x23,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 4 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x0C,0xFF,0xFE,0x00,0x1E,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x39,0xFF,0xFE,0x00,0x23,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 5 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x0C,0xFF,0xFE,0x00,0x1E,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x39,0xFF,0xFE,0x00,0x23,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x27,0xFF,0xFF,0xC0,0x39,0xFF,0xFF,0x18,0x3E,0x00,0x00,0x78,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x1E,0x00,0x00,0xF0,0x0C,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x00,0xFF,0xFE,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x0C,0xFF,0xFE,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x39,0xFF,0xFE,0x18,0x23,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x27,0xFF,0xFF,0xC0,0x39,0xFF,0xFF,0x18,0x3E,0x00,0x00,0x78,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x1E,0x00,0x00,0xF0,0x0C,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x0C,0xFF,0xFE,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x39,0xFF,0xFE,0x18,0x23,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9 +}; + +#endif /* SSD1289_FONTS_H */ diff --git a/src/lcdbus.pio b/src/lcdbus.pio new file mode 100644 index 0000000..601a290 --- /dev/null +++ b/src/lcdbus.pio @@ -0,0 +1,9 @@ +.program lcdbus +.side_set 2 + +pull side 2 +loop: +out pins, 1 side 0 +in pins, 1 side 0 +jmp !OSRE loop side 1 +push side 2 \ No newline at end of file diff --git a/src/lcdtest.c b/src/lcdtest.c new file mode 100644 index 0000000..a2858bc --- /dev/null +++ b/src/lcdtest.c @@ -0,0 +1,215 @@ +#include "fonts.h" +#include +#include +#include + +#include "lcdbus.pio.h" + +PIO pio = pio0; +static uint sm; + +#define LCD_SDI_PIN 20 +#define LCD_SDO_PIN 19 +#define LCD_FCK_PIN 18 +#define LCD_SCK_PIN 17 +#define LCD_OE_PIN 16 + +#define LCD_RS_PIN 15 +#define LCD_WR_PIN 14 +#define LCD_RD_PIN 13 +#define LCD_CS_PIN 12 +#define LCD_RESET_PIN 11 + +static uint16_t lcd_bus_transact(uint16_t out) +{ + pio_sm_put(pio, sm, ((uint32_t)out)<<16); + return pio_sm_get_blocking(pio, sm); +} + +static void lcd_write(bool dc, uint16_t val) +{ + gpio_put_masked((1u << LCD_CS_PIN) | (1u << LCD_WR_PIN) | (1u << LCD_RS_PIN), (dc << LCD_RS_PIN)); + gpio_put(LCD_OE_PIN, false); + lcd_bus_transact(val); + gpio_put_masked((1u << LCD_CS_PIN) | (1u << LCD_WR_PIN) | (1u << LCD_RS_PIN), + (1u << LCD_CS_PIN) | (1u << LCD_WR_PIN) | (1u << LCD_RS_PIN)); + gpio_put(LCD_OE_PIN, true); + // busy_wait_us(1); +} + +static uint16_t lcd_read(bool dc) +{ + gpio_put_masked((1u << LCD_CS_PIN) | (1u << LCD_RD_PIN) | (1u << LCD_RS_PIN), (dc << LCD_RS_PIN)); + // wait 250 ns + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + asm volatile ("nop\n"); + const uint16_t ret = lcd_bus_transact(0); + gpio_put_masked((1u << LCD_CS_PIN) | (1u << LCD_RD_PIN) | (1u << LCD_RS_PIN), + (1u << LCD_CS_PIN) | (1u << LCD_RD_PIN) | (1u << LCD_RS_PIN)); + return ret; +} + +static uint16_t lcd_reg_read(uint8_t reg) +{ + lcd_write(false, reg); + return lcd_read(true); +} + +static uint16_t lcd_reg_write(uint8_t reg, uint16_t val) +{ + lcd_write(false, reg); + lcd_write(true, val); +} + +int main(void) +{ + setup_default_uart(); + printf("lcdtest.c\n"); + + gpio_init_mask(0x3f << 11); + gpio_set_dir_out_masked(0x3f << 11); + // gpio_init(LCD_OE_PIN); + // gpio_set_dir(LCD_OE_PIN, true); + gpio_put_masked(0x3f << 11, 0x3f << 11); + gpio_put(LCD_OE_PIN, true); + + uint offset = pio_add_program(pio, &lcdbus_program); + sm = pio_claim_unused_sm(pio, true); + pio_sm_config c = lcdbus_program_get_default_config(offset); + sm_config_set_out_pins(&c, LCD_SDO_PIN, 1); + sm_config_set_in_pins(&c, LCD_SDI_PIN); + sm_config_set_sideset_pins(&c, LCD_SCK_PIN); + sm_config_set_out_shift(&c, false, false, 16); + sm_config_set_in_shift(&c, false, false, 16); + sm_config_set_clkdiv(&c, 4); + pio_sm_set_pindirs_with_mask(pio, sm, + (1u << LCD_SDO_PIN) | (1u << LCD_SCK_PIN) | (1u << LCD_FCK_PIN), + (1u << LCD_SDO_PIN) | (1u << LCD_SCK_PIN) | (1u << LCD_FCK_PIN) | (1u << LCD_SDI_PIN)); + pio_gpio_init(pio, LCD_SDO_PIN); + pio_gpio_init(pio, LCD_SDI_PIN); + pio_gpio_init(pio, LCD_SCK_PIN); + pio_gpio_init(pio, LCD_FCK_PIN); + pio_sm_init(pio, sm, offset, &c); + pio_sm_set_enabled(pio, sm, true); + + //gpio_put(LCD_OE_PIN, false); + sleep_ms(100); + //lcd_write(true, 0x0000); + uint16_t r1 = lcd_read(false); + if (r1 != 0x8989) { + printf("Display chip id not OK (%04hx)\n", r1); + return 0; + } + + /* lcd_reg_write(0x07, 0x0021); */ + /* lcd_reg_write(0x00, 0x0001); */ + /* lcd_reg_write(0x07, 0x0023); */ + /* lcd_reg_write(0x10, 0x0000); */ + /* sleep_ms(30); */ + /* lcd_reg_write(0x07, 0x0033); */ + /* lcd_reg_write(0x03, 0xA8A4); */ + // Initialization sequence taken from UTFT for SSD1289 + // I don't know what it does, but it doesn't flicker... + lcd_reg_write(0x00,0x0001); + lcd_reg_write(0x03,0xA8A4); + lcd_reg_write(0x0C,0x0000); + lcd_reg_write(0x0D,0x080C); + lcd_reg_write(0x0E,0x2B00); + lcd_reg_write(0x1E,0x00B7); + lcd_reg_write(0x01,0x2B3F); + lcd_reg_write(0x02,0x0600); + lcd_reg_write(0x10,0x0000); + lcd_reg_write(0x11,0x6070); + lcd_reg_write(0x05,0x0000); + lcd_reg_write(0x06,0x0000); + lcd_reg_write(0x16,0xEF1C); + lcd_reg_write(0x17,0x0003); + lcd_reg_write(0x07,0x0233); + lcd_reg_write(0x0B,0x0000); + lcd_reg_write(0x0F,0x0000); + lcd_reg_write(0x41,0x0000); + lcd_reg_write(0x42,0x0000); + lcd_reg_write(0x48,0x0000); + lcd_reg_write(0x49,0x013F); + lcd_reg_write(0x4A,0x0000); + lcd_reg_write(0x4B,0x0000); + lcd_reg_write(0x44,0xEF00); + lcd_reg_write(0x45,0x0000); + lcd_reg_write(0x46,0x013F); + lcd_reg_write(0x30,0x0707); + lcd_reg_write(0x31,0x0204); + lcd_reg_write(0x32,0x0204); + lcd_reg_write(0x33,0x0502); + lcd_reg_write(0x34,0x0507); + lcd_reg_write(0x35,0x0204); + lcd_reg_write(0x36,0x0204); + lcd_reg_write(0x37,0x0502); + lcd_reg_write(0x3A,0x0302); + lcd_reg_write(0x3B,0x0302); + lcd_reg_write(0x23,0x0000); + lcd_reg_write(0x24,0x0000); + lcd_reg_write(0x25,0x8000); + + lcd_reg_write(0x4f,0x0000); + lcd_reg_write(0x4e,0x0000); + lcd_write(false, 0x22); + for (int i = 0;i < 320*240;++i) { + lcd_write(true, 0x0000); + } + + const char* const greeting = "Hello, world!"; + const int greeting_len = strlen(greeting); + for (int row = 0;row < 320;++row) { + for (int col = 0; col < 240;++col) { + // which character to display + const int char_r = row / 12; + const int char_c = col / 8; + // position inside char + const int pos_r = row % 12; + const int pos_c = col % 8; + + const int index = char_r*30+char_c; + char data = 0; + if (index < greeting_len) { + data = Font8x12[(greeting[index]-0x20)*12 + pos_r]; + } + + const bool pixel = (data & (1u << (7-pos_c))) != 0; + if (pixel) { + lcd_write(true, 0xffff); + } else { + lcd_write(true, 0x0000); + } + } + } +}