Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
avrkurs
avrkurs
Commits
9a4c5ad3
Commit
9a4c5ad3
authored
Mar 11, 2019
by
medlem
Browse files
converted to cleaner oled code, working version still in 'Copy'
parent
2b902f90
Changes
8
Hide whitespace changes
Inline
Side-by-side
Session3-LF/Task2_LF - Copy/Task2_LF/Task2_LF.componentinfo.xml
View file @
9a4c5ad3
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
<Description></Description>
<Description></Description>
<Files
xmlns:d4p1=
"http://schemas.microsoft.com/2003/10/Serialization/Arrays"
>
<Files
xmlns:d4p1=
"http://schemas.microsoft.com/2003/10/Serialization/Arrays"
>
<d4p1:anyType
i:type=
"FileInfo"
>
<d4p1:anyType
i:type=
"FileInfo"
>
<AbsolutePath>
C:/Program Files (x86)\Atmel\Studio\7.0\Packs\
A
tmel\ATmega_DFP\1.2.2
72
\include
</AbsolutePath>
<AbsolutePath>
C:/Program Files (x86)\Atmel\Studio\7.0\Packs\
a
tmel\ATmega_DFP\1.2.2
09
\include
</AbsolutePath>
<Attribute></Attribute>
<Attribute></Attribute>
<Category>
include
</Category>
<Category>
include
</Category>
<Condition>
C
</Condition>
<Condition>
C
</Condition>
...
@@ -26,18 +26,18 @@
...
@@ -26,18 +26,18 @@
<SourcePath></SourcePath>
<SourcePath></SourcePath>
</d4p1:anyType>
</d4p1:anyType>
<d4p1:anyType
i:type=
"FileInfo"
>
<d4p1:anyType
i:type=
"FileInfo"
>
<AbsolutePath>
C:/Program Files (x86)\Atmel\Studio\7.0\Packs\
A
tmel\ATmega_DFP\1.2.2
72
\include\avr\iom4809.h
</AbsolutePath>
<AbsolutePath>
C:/Program Files (x86)\Atmel\Studio\7.0\Packs\
a
tmel\ATmega_DFP\1.2.2
09
\include\avr\iom4809.h
</AbsolutePath>
<Attribute></Attribute>
<Attribute></Attribute>
<Category>
header
</Category>
<Category>
header
</Category>
<Condition>
C
</Condition>
<Condition>
C
</Condition>
<FileContentHash>
fQaG1DJ4X5qUUwRvErAbNQ
==
</FileContentHash>
<FileContentHash>
mWiFIOAGwUPlW0rYsXcjkg
==
</FileContentHash>
<FileVersion></FileVersion>
<FileVersion></FileVersion>
<Name>
include/avr/iom4809.h
</Name>
<Name>
include/avr/iom4809.h
</Name>
<SelectString></SelectString>
<SelectString></SelectString>
<SourcePath></SourcePath>
<SourcePath></SourcePath>
</d4p1:anyType>
</d4p1:anyType>
<d4p1:anyType
i:type=
"FileInfo"
>
<d4p1:anyType
i:type=
"FileInfo"
>
<AbsolutePath>
C:/Program Files (x86)\Atmel\Studio\7.0\Packs\
A
tmel\ATmega_DFP\1.2.2
72
\templates\main.c
</AbsolutePath>
<AbsolutePath>
C:/Program Files (x86)\Atmel\Studio\7.0\Packs\
a
tmel\ATmega_DFP\1.2.2
09
\templates\main.c
</AbsolutePath>
<Attribute>
template
</Attribute>
<Attribute>
template
</Attribute>
<Category>
source
</Category>
<Category>
source
</Category>
<Condition>
C Exe
</Condition>
<Condition>
C Exe
</Condition>
...
@@ -48,7 +48,7 @@
...
@@ -48,7 +48,7 @@
<SourcePath></SourcePath>
<SourcePath></SourcePath>
</d4p1:anyType>
</d4p1:anyType>
<d4p1:anyType
i:type=
"FileInfo"
>
<d4p1:anyType
i:type=
"FileInfo"
>
<AbsolutePath>
C:/Program Files (x86)\Atmel\Studio\7.0\Packs\
A
tmel\ATmega_DFP\1.2.2
72
\templates\main.cpp
</AbsolutePath>
<AbsolutePath>
C:/Program Files (x86)\Atmel\Studio\7.0\Packs\
a
tmel\ATmega_DFP\1.2.2
09
\templates\main.cpp
</AbsolutePath>
<Attribute>
template
</Attribute>
<Attribute>
template
</Attribute>
<Category>
source
</Category>
<Category>
source
</Category>
<Condition>
C Exe
</Condition>
<Condition>
C Exe
</Condition>
...
@@ -59,7 +59,7 @@
...
@@ -59,7 +59,7 @@
<SourcePath></SourcePath>
<SourcePath></SourcePath>
</d4p1:anyType>
</d4p1:anyType>
<d4p1:anyType
i:type=
"FileInfo"
>
<d4p1:anyType
i:type=
"FileInfo"
>
<AbsolutePath>
C:/Program Files (x86)\Atmel\Studio\7.0\Packs\
A
tmel\ATmega_DFP\1.2.2
72
\gcc\dev\atmega4809
</AbsolutePath>
<AbsolutePath>
C:/Program Files (x86)\Atmel\Studio\7.0\Packs\
a
tmel\ATmega_DFP\1.2.2
09
\gcc\dev\atmega4809
</AbsolutePath>
<Attribute></Attribute>
<Attribute></Attribute>
<Category>
libraryPrefix
</Category>
<Category>
libraryPrefix
</Category>
<Condition>
GCC
</Condition>
<Condition>
GCC
</Condition>
...
@@ -71,8 +71,8 @@
...
@@ -71,8 +71,8 @@
</d4p1:anyType>
</d4p1:anyType>
</Files>
</Files>
<PackName>
ATmega_DFP
</PackName>
<PackName>
ATmega_DFP
</PackName>
<PackPath>
C:/Program Files (x86)/Atmel/Studio/7.0/Packs/
A
tmel/ATmega_DFP/1.2.2
72
/Atmel.ATmega_DFP.pdsc
</PackPath>
<PackPath>
C:/Program Files (x86)/Atmel/Studio/7.0/Packs/
a
tmel/ATmega_DFP/1.2.2
09
/Atmel.ATmega_DFP.pdsc
</PackPath>
<PackVersion>
1.2.2
72
</PackVersion>
<PackVersion>
1.2.2
09
</PackVersion>
<PresentInProject>
true
</PresentInProject>
<PresentInProject>
true
</PresentInProject>
<ReferenceConditionId>
ATmega4809
</ReferenceConditionId>
<ReferenceConditionId>
ATmega4809
</ReferenceConditionId>
<RteComponents
xmlns:d4p1=
"http://schemas.microsoft.com/2003/10/Serialization/Arrays"
>
<RteComponents
xmlns:d4p1=
"http://schemas.microsoft.com/2003/10/Serialization/Arrays"
>
...
...
Session3-LF/Task2_LF - Copy/Task2_LF/Task2_LF.cproj
View file @
9a4c5ad3
...
@@ -72,79 +72,79 @@
...
@@ -72,79 +72,79 @@
<PropertyGroup
Condition=
" '$(Configuration)' == 'Release' "
>
<PropertyGroup
Condition=
" '$(Configuration)' == 'Release' "
>
<ToolchainSettings>
<ToolchainSettings>
<AvrGcc>
<AvrGcc>
<avrgcc.common.Device>
-mmcu=atmega4809 -B "%24(PackRepoDir)\
A
tmel\ATmega_DFP\1.2.2
72
\gcc\dev\atmega4809"
</avrgcc.common.Device>
<avrgcc.common.Device>
-mmcu=atmega4809 -B "%24(PackRepoDir)\
a
tmel\ATmega_DFP\1.2.2
09
\gcc\dev\atmega4809"
</avrgcc.common.Device>
<avrgcc.common.outputfiles.hex>
True
</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.hex>
True
</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>
True
</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.lss>
True
</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>
True
</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.eep>
True
</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>
True
</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.srec>
True
</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>
False
</avrgcc.common.outputfiles.usersignatures>
<avrgcc.common.outputfiles.usersignatures>
False
</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
True
</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
True
</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
True
</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
True
</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<ListValues>
<Value>
NDEBUG
</Value>
<Value>
NDEBUG
</Value>
</ListValues>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.directories.IncludePaths>
<avrgcc.compiler.directories.IncludePaths>
<ListValues>
<ListValues>
<Value>
%24(PackRepoDir)\
A
tmel\ATmega_DFP\1.2.2
72
\include
</Value>
<Value>
%24(PackRepoDir)\
a
tmel\ATmega_DFP\1.2.2
09
\include
</Value>
</ListValues>
</ListValues>
</avrgcc.compiler.directories.IncludePaths>
</avrgcc.compiler.directories.IncludePaths>
<avrgcc.compiler.optimization.level>
Optimize for size (-Os)
</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.level>
Optimize for size (-Os)
</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.PackStructureMembers>
True
</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.PackStructureMembers>
True
</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
True
</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
True
</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.warnings.AllWarnings>
True
</avrgcc.compiler.warnings.AllWarnings>
<avrgcc.compiler.warnings.AllWarnings>
True
</avrgcc.compiler.warnings.AllWarnings>
<avrgcc.linker.libraries.Libraries>
<avrgcc.linker.libraries.Libraries>
<ListValues>
<ListValues>
<Value>
libm
</Value>
<Value>
libm
</Value>
</ListValues>
</ListValues>
</avrgcc.linker.libraries.Libraries>
</avrgcc.linker.libraries.Libraries>
<avrgcc.assembler.general.IncludePaths>
<avrgcc.assembler.general.IncludePaths>
<ListValues>
<ListValues>
<Value>
%24(PackRepoDir)\
A
tmel\ATmega_DFP\1.2.2
72
\include
</Value>
<Value>
%24(PackRepoDir)\
a
tmel\ATmega_DFP\1.2.2
09
\include
</Value>
</ListValues>
</ListValues>
</avrgcc.assembler.general.IncludePaths>
</avrgcc.assembler.general.IncludePaths>
</AvrGcc>
</AvrGcc>
</ToolchainSettings>
</ToolchainSettings>
</PropertyGroup>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)' == 'Debug' "
>
<PropertyGroup
Condition=
" '$(Configuration)' == 'Debug' "
>
<ToolchainSettings>
<ToolchainSettings>
<AvrGcc>
<AvrGcc>
<avrgcc.common.Device>
-mmcu=atmega4809 -B "%24(PackRepoDir)\
A
tmel\ATmega_DFP\1.2.2
72
\gcc\dev\atmega4809"
</avrgcc.common.Device>
<avrgcc.common.Device>
-mmcu=atmega4809 -B "%24(PackRepoDir)\
a
tmel\ATmega_DFP\1.2.2
09
\gcc\dev\atmega4809"
</avrgcc.common.Device>
<avrgcc.common.outputfiles.hex>
True
</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.hex>
True
</avrgcc.common.outputfiles.hex>
<avrgcc.common.outputfiles.lss>
True
</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.lss>
True
</avrgcc.common.outputfiles.lss>
<avrgcc.common.outputfiles.eep>
True
</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.eep>
True
</avrgcc.common.outputfiles.eep>
<avrgcc.common.outputfiles.srec>
True
</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.srec>
True
</avrgcc.common.outputfiles.srec>
<avrgcc.common.outputfiles.usersignatures>
False
</avrgcc.common.outputfiles.usersignatures>
<avrgcc.common.outputfiles.usersignatures>
False
</avrgcc.common.outputfiles.usersignatures>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
True
</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
True
</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
True
</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
True
</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
<avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.symbols.DefSymbols>
<ListValues>
<ListValues>
<Value>
DEBUG
</Value>
<Value>
DEBUG
</Value>
</ListValues>
</ListValues>
</avrgcc.compiler.symbols.DefSymbols>
</avrgcc.compiler.symbols.DefSymbols>
<avrgcc.compiler.directories.IncludePaths>
<avrgcc.compiler.directories.IncludePaths>
<ListValues>
<ListValues>
<Value>
%24(PackRepoDir)\
A
tmel\ATmega_DFP\1.2.2
72
\include
</Value>
<Value>
%24(PackRepoDir)\
a
tmel\ATmega_DFP\1.2.2
09
\include
</Value>
</ListValues>
</ListValues>
</avrgcc.compiler.directories.IncludePaths>
</avrgcc.compiler.directories.IncludePaths>
<avrgcc.compiler.optimization.level>
Optimize most (-O3)
</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.level>
Optimize most (-O3)
</avrgcc.compiler.optimization.level>
<avrgcc.compiler.optimization.PackStructureMembers>
True
</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.PackStructureMembers>
True
</avrgcc.compiler.optimization.PackStructureMembers>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
True
</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
True
</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
<avrgcc.compiler.optimization.DebugLevel>
Default (-g2)
</avrgcc.compiler.optimization.DebugLevel>
<avrgcc.compiler.optimization.DebugLevel>
Default (-g2)
</avrgcc.compiler.optimization.DebugLevel>
<avrgcc.compiler.warnings.AllWarnings>
True
</avrgcc.compiler.warnings.AllWarnings>
<avrgcc.compiler.warnings.AllWarnings>
True
</avrgcc.compiler.warnings.AllWarnings>
<avrgcc.linker.libraries.Libraries>
<avrgcc.linker.libraries.Libraries>
<ListValues>
<ListValues>
<Value>
libm
</Value>
<Value>
libm
</Value>
</ListValues>
</ListValues>
</avrgcc.linker.libraries.Libraries>
</avrgcc.linker.libraries.Libraries>
<avrgcc.assembler.general.IncludePaths>
<avrgcc.assembler.general.IncludePaths>
<ListValues>
<ListValues>
<Value>
%24(PackRepoDir)\
A
tmel\ATmega_DFP\1.2.2
72
\include
</Value>
<Value>
%24(PackRepoDir)\
a
tmel\ATmega_DFP\1.2.2
09
\include
</Value>
</ListValues>
</ListValues>
</avrgcc.assembler.general.IncludePaths>
</avrgcc.assembler.general.IncludePaths>
<avrgcc.assembler.debugging.DebugLevel>
Default (-Wa,-g)
</avrgcc.assembler.debugging.DebugLevel>
<avrgcc.assembler.debugging.DebugLevel>
Default (-Wa,-g)
</avrgcc.assembler.debugging.DebugLevel>
</AvrGcc>
</AvrGcc>
</ToolchainSettings>
</ToolchainSettings>
</PropertyGroup>
</PropertyGroup>
<ItemGroup>
<ItemGroup>
...
@@ -154,19 +154,10 @@
...
@@ -154,19 +154,10 @@
<Compile
Include=
"adc.h"
>
<Compile
Include=
"adc.h"
>
<SubType>
compile
</SubType>
<SubType>
compile
</SubType>
</Compile>
</Compile>
<Compile
Include=
"
display
.c"
>
<Compile
Include=
"
oled
.c"
>
<SubType>
compile
</SubType>
<SubType>
compile
</SubType>
</Compile>
</Compile>
<Compile
Include=
"display.h"
>
<Compile
Include=
"oled.h"
>
<SubType>
compile
</SubType>
</Compile>
<Compile
Include=
"driv_OLED.c"
>
<SubType>
compile
</SubType>
</Compile>
<Compile
Include=
"driv_OLED.h"
>
<SubType>
compile
</SubType>
</Compile>
<Compile
Include=
"font8x8.h"
>
<SubType>
compile
</SubType>
<SubType>
compile
</SubType>
</Compile>
</Compile>
<Compile
Include=
"fonts.h"
>
<Compile
Include=
"fonts.h"
>
...
...
Session3-LF/Task2_LF - Copy/Task2_LF/display.c
deleted
100644 → 0
View file @
2b902f90
//
// display.c
//
#define F_CPU 3333333UL
// System headers
#include <avr/io.h>
#include <util/delay.h>
#include <stdbool.h>
// Project headers
#include "display.h"
#include "spi.h"
#include "font8x8.h"
#define DSP_MODE_bm (1 << 3)
#define DSP_MODE_PORT PORTC
#define DSP_RST_bm (1 << 7)
#define DSP_RST_PORT PORTC
// This file contains a simple driver for the display so that one can print characters and strings.
// You shouldn't need to do anything in this file for things to work.
// Of course, you're welcome to check it out if you want to see how things work under the hood.
void
DISP_rst
();
void
DISP_transmit_cmd
(
uint8_t
cmd
);
void
DISP_transmit_data
(
uint8_t
data
);
void
DISP_set_mode
(
bool
mode
);
int
cursor_row
=
0
;
int
cursor_col
=
0
;
void
DISP_print
(
const
char
*
str
)
{
while
(
*
str
!=
'\0'
)
{
DISP_putc
(
*
str
);
str
++
;
}
}
void
DISP_putc
(
char
c
)
{
if
(
c
==
'\n'
)
{
if
(
cursor_col
==
0
)
{
DISP_putc
(
' '
);
}
while
(
cursor_col
!=
0
)
{
DISP_putc
(
' '
);
}
return
;
}
else
if
(
c
==
'\t'
)
{
int
count
=
3
-
(
cursor_col
%
4
);
for
(
int
i
=
0
;
i
<
count
;
i
++
)
{
DISP_putc
(
' '
);
}
return
;
}
else
if
(
c
<
0x20
)
{
return
;
}
else
if
(
c
<
0x7F
)
{
uint8_t
d
[
8
]
=
{
pgm_read_byte
(
&
(
font8x8_basic
[(
int
)
c
-
0x20
][
0
])),
pgm_read_byte
(
&
(
font8x8_basic
[(
int
)
c
-
0x20
][
1
])),
pgm_read_byte
(
&
(
font8x8_basic
[(
int
)
c
-
0x20
][
2
])),
pgm_read_byte
(
&
(
font8x8_basic
[(
int
)
c
-
0x20
][
3
])),
pgm_read_byte
(
&
(
font8x8_basic
[(
int
)
c
-
0x20
][
4
])),
pgm_read_byte
(
&
(
font8x8_basic
[(
int
)
c
-
0x20
][
5
])),
pgm_read_byte
(
&
(
font8x8_basic
[(
int
)
c
-
0x20
][
6
])),
pgm_read_byte
(
&
(
font8x8_basic
[(
int
)
c
-
0x20
][
7
]))
};
for
(
uint8_t
b
=
0
;
b
<
8
;
b
++
)
{
uint8_t
db
=
0
;
db
|=
(((
d
[
0
]
>>
b
)
&
0x1
)
<<
0
);
db
|=
(((
d
[
1
]
>>
b
)
&
0x1
)
<<
1
);
db
|=
(((
d
[
2
]
>>
b
)
&
0x1
)
<<
2
);
db
|=
(((
d
[
3
]
>>
b
)
&
0x1
)
<<
3
);
db
|=
(((
d
[
4
]
>>
b
)
&
0x1
)
<<
4
);
db
|=
(((
d
[
5
]
>>
b
)
&
0x1
)
<<
5
);
db
|=
(((
d
[
6
]
>>
b
)
&
0x1
)
<<
6
);
db
|=
(((
d
[
7
]
>>
b
)
&
0x1
)
<<
7
);
DISP_transmit_data
(
db
);
}
}
else
if
(
c
<
0xA0
)
{
return
;
}
else
if
(
c
>
0xC0
)
{
uint8_t
d
[
8
]
=
{
pgm_read_byte
(
&
(
font8x8_ext_latin
[(
int
)
c
-
0xc0
][
0
])),
pgm_read_byte
(
&
(
font8x8_ext_latin
[(
int
)
c
-
0xc0
][
1
])),
pgm_read_byte
(
&
(
font8x8_ext_latin
[(
int
)
c
-
0xc0
][
2
])),
pgm_read_byte
(
&
(
font8x8_ext_latin
[(
int
)
c
-
0xc0
][
3
])),
pgm_read_byte
(
&
(
font8x8_ext_latin
[(
int
)
c
-
0xc0
][
4
])),
pgm_read_byte
(
&
(
font8x8_ext_latin
[(
int
)
c
-
0xc0
][
5
])),
pgm_read_byte
(
&
(
font8x8_ext_latin
[(
int
)
c
-
0xc0
][
6
])),
pgm_read_byte
(
&
(
font8x8_ext_latin
[(
int
)
c
-
0xc0
][
7
]))
};
for
(
uint8_t
b
=
0
;
b
<
8
;
b
++
)
{
uint8_t
db
=
0
;
db
|=
(((
d
[
0
]
>>
b
)
&
0x1
)
<<
0
);
db
|=
(((
d
[
1
]
>>
b
)
&
0x1
)
<<
1
);
db
|=
(((
d
[
2
]
>>
b
)
&
0x1
)
<<
2
);
db
|=
(((
d
[
3
]
>>
b
)
&
0x1
)
<<
3
);
db
|=
(((
d
[
4
]
>>
b
)
&
0x1
)
<<
4
);
db
|=
(((
d
[
5
]
>>
b
)
&
0x1
)
<<
5
);
db
|=
(((
d
[
6
]
>>
b
)
&
0x1
)
<<
6
);
db
|=
(((
d
[
7
]
>>
b
)
&
0x1
)
<<
7
);
DISP_transmit_data
(
db
);
}
}
cursor_col
++
;
cursor_col
%=
16
;
if
(
cursor_col
==
0
)
{
cursor_row
++
;
cursor_row
%=
4
;
}
}
void
DISP_clear
()
{
if
(
cursor_row
==
0
)
{
DISP_print
(
"
\n
"
);
}
while
(
cursor_row
!=
0
)
{
DISP_print
(
"
\n
"
);
}
for
(
int
i
=
0
;
i
<
4
*
16
;
i
++
)
{
DISP_putc
(
' '
);
}
}
void
DISP_write_bitmap
(
const
uint8_t
*
bm
)
{
for
(
uint8_t
y
=
0
;
y
<
4
;
y
++
)
{
for
(
uint8_t
x
=
0
;
x
<
16
;
x
++
)
{
uint8_t
d
[
8
]
=
{
pgm_read_byte
(
&
(
bm
[(
8
*
y
+
0
)
*
16
+
x
])),
pgm_read_byte
(
&
(
bm
[(
8
*
y
+
1
)
*
16
+
x
])),
pgm_read_byte
(
&
(
bm
[(
8
*
y
+
2
)
*
16
+
x
])),
pgm_read_byte
(
&
(
bm
[(
8
*
y
+
3
)
*
16
+
x
])),
pgm_read_byte
(
&
(
bm
[(
8
*
y
+
4
)
*
16
+
x
])),
pgm_read_byte
(
&
(
bm
[(
8
*
y
+
5
)
*
16
+
x
])),
pgm_read_byte
(
&
(
bm
[(
8
*
y
+
6
)
*
16
+
x
])),
pgm_read_byte
(
&
(
bm
[(
8
*
y
+
7
)
*
16
+
x
]))
};
for
(
uint8_t
b
=
0
;
b
<
8
;
b
++
)
{
uint8_t
db
=
0
;
db
|=
(((
d
[
0
]
>>
b
)
&
0x1
)
<<
0
);
db
|=
(((
d
[
1
]
>>
b
)
&
0x1
)
<<
1
);
db
|=
(((
d
[
2
]
>>
b
)
&
0x1
)
<<
2
);
db
|=
(((
d
[
3
]
>>
b
)
&
0x1
)
<<
3
);
db
|=
(((
d
[
4
]
>>
b
)
&
0x1
)
<<
4
);
db
|=
(((
d
[
5
]
>>
b
)
&
0x1
)
<<
5
);
db
|=
(((
d
[
6
]
>>
b
)
&
0x1
)
<<
6
);
db
|=
(((
d
[
7
]
>>
b
)
&
0x1
)
<<
7
);
DISP_transmit_data
(
db
);
}
}
}
}
void
DISP_transmit_cmd
(
uint8_t
cmd
)
{
DISP_set_mode
(
0
);
SPI_MasterTransmit
(
cmd
);
}
void
DISP_transmit_data
(
uint8_t
data
)
{
DISP_set_mode
(
1
);
SPI_MasterTransmit
(
data
);
}
// mode: 1 = data, 0 = cmd
void
DISP_set_mode
(
bool
mode
)
{
if
(
mode
)
{
DSP_MODE_PORT
.
OUTSET
=
DSP_MODE_bm
;
}
else
{
DSP_MODE_PORT
.
OUTCLR
=
DSP_MODE_bm
;
}
}
void
DISP_init
()
{
DSP_RST_PORT
.
DIRSET
=
DSP_RST_bm
;
DSP_MODE_PORT
.
DIRSET
=
DSP_MODE_bm
;
SPI_MasterInit
();
DISP_set_mode
(
1
);
DISP_rst
();
DISP_transmit_cmd
(
0xAE
);
// display off
// p32
DISP_transmit_cmd
(
0xD5
);
// clock
DISP_transmit_cmd
(
0xF0
);
// upper nibble is rate, lower nibble is divisor
// p31
DISP_transmit_cmd
(
0xA8
);
// mux ratio p31
DISP_transmit_cmd
(
0x20
);
// rtfm
// p31
DISP_transmit_cmd
(
0xD3
);
// display offset
DISP_transmit_cmd
(
0x00
);
// rtfm
// p3 (appendix)
DISP_transmit_cmd
(
0x8D
);
// charge pump
DISP_transmit_cmd
(
0x14
);
// enable
// p30, p34
DISP_transmit_cmd
(
0x20
);
// memory addr mode
DISP_transmit_cmd
(
0x00
);
// horizontal
// p31
DISP_transmit_cmd
(
0xA1
);
// segment remap
DISP_transmit_cmd
(
0xA5
);
// display on
// p31
DISP_transmit_cmd
(
0xC8
);
// com scan direction
// p31
DISP_transmit_cmd
(
0x7F
);
// display start line
// p31
DISP_transmit_cmd
(
0x22
);
// set page address
DISP_transmit_cmd
(
0x00
);
DISP_transmit_cmd
(
0x03
);
// p31, p40
DISP_transmit_cmd
(
0xDA
);
// com hardware cfg
DISP_transmit_cmd
(
0x02
);
// com cfg
// p28
DISP_transmit_cmd
(
0x81
);
// contrast aka current
DISP_transmit_cmd
(
0xFF
);
// 128 is midpoint
// p32
DISP_transmit_cmd
(
0xD9
);
// precharge
DISP_transmit_cmd
(
0x11
);
// rtfm
// p32
DISP_transmit_cmd
(
0xDB
);
// vcomh deselect level
DISP_transmit_cmd
(
0x20
);
// rtfm
DISP_transmit_cmd
(
0xA6
);
// non-inverted
DISP_transmit_cmd
(
0xA4
);
// display scan on
DISP_transmit_cmd
(
0xAF
);
// drivers on
DISP_clear
();
}
void
DISP_rst
()
{
DSP_RST_PORT
.
OUTCLR
=
DSP_RST_bm
;
_delay_ms
(
10
);
DSP_RST_PORT
.
OUTSET
=
DSP_RST_bm
;
_delay_ms
(
10
);
}
Session3-LF/Task2_LF - Copy/Task2_LF/display.h
deleted
100644 → 0
View file @
2b902f90
//
// display.h
//
#ifndef DISPLAY_H_
#define DISPLAY_H_
// Below are the public functions that you can use to play with the screen
// Call this method to initialize the screen. This must be done before using any other functions
void
DISP_init
();
// Call this method to write a bitmap to the screen. The bitmap must be a 32x16(512) array of bytes
// where each row of 16 bytes (128 bits) is one row of monochrome pixels on the screen.
// Black = 0, White = 1
void
DISP_write_bitmap
(
const
uint8_t
*
bitmap
);
// This clears the display
void
DISP_clear
();
// Print a single character to the screen
void
DISP_putc
(
char
c
);
// Print a string literal to the screen
void
DISP_print
(
const
char
*
str
);