ssd1306_oled 驱动移植完成

This commit is contained in:
许晟昊 2024-12-06 15:24:21 +08:00
parent 157e1b5938
commit 5b30352baa
8 changed files with 1421 additions and 463 deletions

View File

@ -45,7 +45,8 @@ extern "C" {
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
#include "sys.h"
#include "delay.h"
#include "lib.h" #include "lib.h"
#include "bsp.h" #include "bsp.h"
@ -76,6 +77,8 @@ void Error_Handler(void);
/* Private defines -----------------------------------------------------------*/ /* Private defines -----------------------------------------------------------*/
#define LED_BLUE_Pin LL_GPIO_PIN_13 #define LED_BLUE_Pin LL_GPIO_PIN_13
#define LED_BLUE_GPIO_Port GPIOC #define LED_BLUE_GPIO_Port GPIOC
#define PWMA_Pin LL_GPIO_PIN_1
#define PWMA_GPIO_Port GPIOA
#define OLED_SDA_Pin LL_GPIO_PIN_12 #define OLED_SDA_Pin LL_GPIO_PIN_12
#define OLED_SDA_GPIO_Port GPIOB #define OLED_SDA_GPIO_Port GPIOB
#define OLDE_SCK_Pin LL_GPIO_PIN_13 #define OLDE_SCK_Pin LL_GPIO_PIN_13

View File

@ -55,6 +55,9 @@ void MX_GPIO_Init(void)
/**/ /**/
LL_GPIO_ResetOutputPin(LED_BLUE_GPIO_Port, LED_BLUE_Pin); LL_GPIO_ResetOutputPin(LED_BLUE_GPIO_Port, LED_BLUE_Pin);
/**/
LL_GPIO_ResetOutputPin(PWMA_GPIO_Port, PWMA_Pin);
/**/ /**/
LL_GPIO_ResetOutputPin(GPIOB, OLED_SDA_Pin|OLDE_SCK_Pin); LL_GPIO_ResetOutputPin(GPIOB, OLED_SDA_Pin|OLDE_SCK_Pin);
@ -71,13 +74,20 @@ void MX_GPIO_Init(void)
LL_GPIO_Init(GPIOC, &GPIO_InitStruct); LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/**/ /**/
GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_3 GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_2|LL_GPIO_PIN_3|LL_GPIO_PIN_4
|LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7 |LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|LL_GPIO_PIN_8
|LL_GPIO_PIN_8|LL_GPIO_PIN_9|LL_GPIO_PIN_10|LL_GPIO_PIN_11 |LL_GPIO_PIN_9|LL_GPIO_PIN_10|LL_GPIO_PIN_11|LL_GPIO_PIN_12
|LL_GPIO_PIN_12|LL_GPIO_PIN_15; |LL_GPIO_PIN_15;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct); LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/**/
GPIO_InitStruct.Pin = PWMA_Pin;
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
LL_GPIO_Init(PWMA_GPIO_Port, &GPIO_InitStruct);
/**/ /**/
GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10 GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10
|LL_GPIO_PIN_11|LL_GPIO_PIN_14|LL_GPIO_PIN_15|LL_GPIO_PIN_3 |LL_GPIO_PIN_11|LL_GPIO_PIN_14|LL_GPIO_PIN_15|LL_GPIO_PIN_3
@ -89,7 +99,7 @@ void MX_GPIO_Init(void)
/**/ /**/
GPIO_InitStruct.Pin = OLED_SDA_Pin|OLDE_SCK_Pin; GPIO_InitStruct.Pin = OLED_SDA_Pin|OLDE_SCK_Pin;
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct); LL_GPIO_Init(GPIOB, &GPIO_InitStruct);

View File

@ -90,7 +90,7 @@ int main(void)
SystemClock_Config(); SystemClock_Config();
/* USER CODE BEGIN SysInit */ /* USER CODE BEGIN SysInit */
delay_init((SystemCoreClock / 1000000));
/* USER CODE END SysInit */ /* USER CODE END SysInit */
/* Initialize all configured peripherals */ /* Initialize all configured peripherals */

View File

@ -125,7 +125,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>CMSIS_AGDI</Key> <Key>CMSIS_AGDI</Key>
<Name>UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_128 -FL020000 -FS08000000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name> <Name>-X"" -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@ -148,56 +148,14 @@
<Name></Name> <Name></Name>
</SetRegEntry> </SetRegEntry>
</TargetDriverDllRegistry> </TargetDriverDllRegistry>
<Breakpoint> <Breakpoint/>
<Bp> <WatchWindow1>
<Number>0</Number> <Ww>
<Type>0</Type> <count>0</count>
<LineNumber>241</LineNumber> <WinNumber>1</WinNumber>
<EnabledFlag>1</EnabledFlag> <ItemText>buffer</ItemText>
<Address>134220930</Address> </Ww>
<ByteObject>0</ByteObject> </WatchWindow1>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>../Core/Src/stm32f1xx_it.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\motor\../Core/Src/stm32f1xx_it.c\241</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>47</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>startup_stm32f103xb.s</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>255</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>startup_stm32f103xb.s</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>
</Tracepoint> </Tracepoint>
@ -240,12 +198,6 @@
<pszMrulep></pszMrulep> <pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp> <pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp> <pMultCmdsp></pMultCmdsp>
<SystemViewers>
<Entry>
<Name>System Viewer\TIM4</Name>
<WinId>35905</WinId>
</Entry>
</SystemViewers>
</TargetOption> </TargetOption>
</Target> </Target>

View File

@ -1,8 +1,8 @@
:020000040800F2 :020000040800F2
:100000008018002005010008A905000893010008D8 :10000000801C002005010008250B0008930600084D
:10001000A505000871010008A907000800000000FC :10001000210B00088D060008250D000800000000D7
:10002000000000000000000000000000AF05000814 :100020000000000000000000000000002B0B000892
:100030009101000800000000AD050008B1050008AE :100030009106000800000000290B00082D0B0008A5
:100040001F0100081F0100081F0100081F01000810 :100040001F0100081F0100081F0100081F01000810
:100050001F0100081F0100081F0100081F01000800 :100050001F0100081F0100081F0100081F01000800
:100060001F0100081F0100081F0100081F010008F0 :100060001F0100081F0100081F0100081F010008F0
@ -10,291 +10,621 @@
:100080001F0100081F0100081F0100081F010008D0 :100080001F0100081F0100081F0100081F010008D0
:100090001F0100081F0100081F0100081F010008C0 :100090001F0100081F0100081F0100081F010008C0
:1000A0001F0100081F0100081F0100081F010008B0 :1000A0001F0100081F0100081F0100081F010008B0
:1000B000A90600081F0100081F0100081F01000811 :1000B000250C00081F0100081F0100081F0100088F
:1000C0001F0100081F0100081F0100081F01000890 :1000C0001F0100081F0100081F0100081F01000890
:1000D0001F0100081F0100081F0100081F01000880 :1000D0001F0100081F0100081F0100081F01000880
:1000E0001F0100081F0100081F010008DFF810D0E1 :1000E0001F0100081F0100081F010008DFF810D0E1
:1000F00000F02CF800480047350E0008AFF30080F0 :1000F00000F0BAFA0048004785100008AFF300800E
:10010000801800200648804706480047FEE7FEE7C3 :10010000801C00200648804706480047FEE7FEE7BF
:10011000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B7 :10011000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B7
:10012000A5060008ED000008D2B201E000F8012B9E :10012000210C0008ED000008D2B201E000F8012B1C
:10013000491EFBD270470022F6E710B513460A4667 :10013000491EFBD270470022F6E710B513460A4667
:1001400004461946FFF7F0FF204610BD064C074D48 :1001400004461946FFF7F0FF204610BDF0B480EAE0
:1001500006E0E06840F0010394E807009847103497 :100150000102D40F4200B2EB410F02D20246084620
:10016000AC42F6D3FFF7C6FFF811000818120008DA :1001600011464A0042D0C30DDDB2C1F3C752AD1AE9
:1001700000BFFEE770B504460D4600BF2CB901F084 :10017000202D35DAC1F3160141F4000204B15242D8
:1001800001F801E000BF00BFFCE700BF012070BD27 :10018000C5F1200602FA06F12A411044B3EBD05F14
:10019000704700BFFEE7000008B5054989690143C3 :1001900023D0C4B1012DA0EBC35009DCF0BC4FF05B
:1001A000034A9161114689690140009100BF08BD71 :1001A000004202EAC352DBB200F5000000F0D0B911
:1001B000001002402DE9F04102460B461868C0F3DA :1001B000400000F1807000EBC350A0F1807040EA75
:1001C0000F2595FAA5F0B0FA80F480E00120A04058 :1001C000D170490009E0490841EAC071A0EBC35071
:1001D000284000287AD0082C04D240F2011000FAFE :1001D00000F50000400800EBC350F0BC00F0AFB9E0
:1001E00004F106E0A4F108004FF00116864046F045 :1001E0006142012202EB4101001BF6E7F0BC7047BF
:1001F0008061586808280ED11869D66826EA112649 :1001F00081F00041AAE780F00040A7E780EA010211
:100200000F0A97FAA7F7B7FA87F700FA07F73E43FE :1002000010B502F00043400022D04A001FD0010E7A
:10021000D66000BF00BF586802EB116691FAA1FCDE :1002100001EB1261C0F35600C2F3560240F4000035
:10022000BCFA8CFC4FEA8C084FF00F0C0CFA08FC5F :1002200042F40002A0FB022000047F39140400D035
:10023000376827EA0C0791FAA1FCBCFA8CFC4FEA5C :10023000401C50EA124001D44000491EC2B20C06D4
:100240008C0C00FA0CFC47EA0C07376000BF5868BA :1002400004EBD010401C4008802A02D003E00020BC
:10025000012802D05868092838D1986802EB116645 :1002500010BD20F00100002900DA0020184310BD75
:1002600091FAA1FCBCFA8CFC4FEA8C084FF0030C0D :1002600030B480EA010202F0004530F0004221F093
:100270000CFA08FC376827EA0C0791FAA1FCBCFAD3 :10027000004013D090B1C30DD40DC2F31601C0F3EA
:100280008CFC4FEA8C0C00FA0CFC47EA0C07376038 :100280001600E41A41F4000140F400027D3491426A
:1002900000BFD86802EB116691FAA1FCBCFA8CFC95 :1002900001D3641C00E04900002C02DA30BC0020CD
:1002A0004FEA8C084FF0040C0CFA08FC376827EA78 :1002A00070474FF400000023914201D3891A0343A1
:1002B0000C0791FAA1FCBCFA8CFC4FEA8C0C00FAFA :1002B00040084FEA4101F7D151B1914202D14FF0CC
:1002C0000CFC47EA0C07376000BF00BF641C25FA2E :1002C000004105E002D24FF0010101E06FF00101B1
:1002D00004F000287FF47AAFBDE8F081C1F30F226B :1002D00003EBC450284430BC00F031B92DE9FE4F87
:1002E0004261704702480068401C0149086070473D :1002E000804681EA0300C00F0C46009021F00041D7
:1002F0000C0000204FF47A71B0FBF1F2521E4FF067 :1002F00023F00045B8EB0200A94105D24046214653
:10030000E0235A6100229A6105221A6100BF7047FA :1003000090461C460B46024623F00040104347D05F
:1003100001490860704700000000002010B5024647 :10031000270DC7F30A00C3F30A510290401A019057
:1003200013681C48824208D0B2F1804F05D01A48A9 :1003200040286BDAC3F3130040F4801B0098924618
:10033000824202D01948824204D123F070004C68F6 :1003300020B10023D2EB030A63EB0B0B0198594663
:1003400040EA04031348824208D0B2F1804F05D03E :10034000C0F14002504600F0C9F806460D4650463E
:100350001148824202D01148824204D123F44070F5 :100350005946019A00F0E1F810EB080061410024D1
:10036000CC6840EA040313608868D06200BF088844 :1003600087EA115284EAE7731A4340D0009A62B3D5
:10037000906200BF0748824203D10869106300BF42 :10037000019A012A4FEA075215DC001B61EB0201CA
:1003800000BF00BF506940F00100506100BF002075 :100380004FF0004202EA0752CDE90042001C41F55D
:1003900010BD0000002C0140000400400008004097 :10039000801132462B4600F018F903B0BDE8F08F0B
:1003A0000146086900F001007047000000B585B003 :1003A00040462146F9E7001B61EB0201001C41F5C4
:1003B00014216846FFF7BFFE1020FFF7EDFE202056 :1003B000801300185B412018A2F5001747EB0301DA
:1003C000FFF7EAFE0420FFF7E7FE0820FFF7E4FE50 :1003C00040EAD570B6196D4111E06D084FEA360666
:1003D0001C491D48FFF782FF1C491D48FFF77EFF9F :1003D00045EAC0754FEA0752001B61EB0201001CA1
:1003E0001848009001200190022002900020039004 :1003E00041F5801149084FEA300000195141324669
:1003F00069461548FFF7DEFE164800900020019080 :1003F0002B4603B0BDE8F04F00F0D8B800980122BA
:1004000069461148FFF7D6FE13480090002001907E :1004000040000023D0EB020263EBE073009821462A
:1004100069461248FFF7CEFE114800900020019077 :100410004FEAE074B8EB000061EB0401E9E783F018
:1004200069460B48FFF7C6FE08480090012001907E :1004200000435BE781F0004158E796230022114624
:10043000022002900020039069460548FFF7BAFEAB :1004300000F08EB820F00040C10DC0F3160040F46B
:1004400005B000BD20002004001001403000300441 :1004400000007F2901DA00207047962903DCC1F102
:10045000000C0140C000C004FFFF9F0400080140E1 :100450009601C8407047963988407047C1F30A52E8
:10046000FFFFCF042DE9F04186B0142101A8FFF76A :1004600010B5C1F3130140F2FF3341F480119A42F9
:1004700062FE01204849C9690143474AD1611146DA :1004700001DA002010BD40F233439A42A2F2334227
:10048000C9690140009100BF00BF1C21434B1B689C :1004800003DC524200F039F810BD904010BD00F07E
:10049000C3F302200F2400250346C3F1070CBCF16F :10049000004230F000400AD0C10D01F56071C0F398
:1004A000040F02D94FF0040C01E0C3F1070C6746BA :1004A000160042EA0151C20840071143704700207C
:1004B00003F1040CBCF1070F02D24FF0000C01E075 :1004B00001467047002801DBC0F10040002901DB44
:1004C000A3F1030C66464FF0010C0CFA07FCACF1EB :1004C000C1F1004181427047002801DBC0F10040CA
:1004D000010C0CEA040C0CFA06FC4FF0010808FAB7 :1004D000002901DBC1F1004188427047202A04DB7A
:1004E00006F8A8F1010808EA05084CEA080200BF6E :1004E000203A00FA02F1002070479140C2F1200347
:1004F000002904DB1007030E2948435407E01007C6 :1004F00020FA03F3194390407047202A04DB203A86
:10050000040E26480C3001F00F031B1FC45400BF1B :1005000021FA02F00021704721FA02F3D040C2F133
:100510001C20002809DB00F01F0201219140420944 :1005100020029140084319467047202A06DBCB177A
:10052000920002F1E022C2F8001100BF41F61F4024 :10052000203A41FA02F043EAE07306E041FA02F3AE
:10053000ADF8040000200290632003900020049096 :10053000D040C2F12002914008431946704700297B
:1005400001A94FF08040FFF7E9FE00BF4FF0804067 :10054000A8BF7047401C490008BF20F00100704759
:10055000006820F080004FF08041086000BF00205C :1005500010B4B0FA80FC00FA0CF050EA010404BFB9
:10056000896844F20702914301434FF08042916051 :1005600010BC704749B1CCF1200421FA04F411FA0F
:1005700000BF00BF1146496821F07001014351607E :100570000CF118BF012121430843A3EB0C01CB1D53
:1005800000BF00BF1046806820F0800011468860E0 :100580004FEA00614FEA102042BF002010BC7047C4
:1005900000BF06B0BDE8F081001002400CED00E0A5 :1005900000EBC35010440029A4BF10BC7047401C9E
:1005A00000E400E000BFFEE700BFFEE770477047D1 :1005A000490008BF20F0010010BC704710B5141EB0
:1005B0007047000010B502203749096821F0070193 :1005B00073F1000408DA401C41F1000192185B411C
:1005C0000143354A116000BF00BF00BF32480068D8 :1005C0001A4301D120F0010010BD2DE9F04D9246F3
:1005D00000F007000228F8D100BF3048006840F45E :1005D0009B4611B1B1FA81F202E0B0FA80F220320A
:1005E00080302E49086000BF00BF00BF2B48006864 :1005E0009046FFF77BFF04460F4640EA0A0041EAC7
:1005F000C0F340400028F8D04FF480304FF4E011B1 :1005F0000B0153465A46084313D0114653EA0100F3
:10060000264A526822F47C1200F440330B431A430A :1006000019D0C8F140025046FFF777FF05460E4665
:10061000224B5A6000BF00BF1846006840F080704F :10061000504659464246FFF761FF084305D0012086
:100620001946086000BF00BF00BF1C480068C0F347 :1006200004E020463946BDE8F08D0020054346EA47
:1006300040600028F8D000201849496821F0F001F6 :10063000E0762C4337430A986305E40AA0EB0800F0
:100640000143164A516000BF10151146496821F454 :100640000022FD0A44EA47540A3002D50020014640
:10065000E0610143516000BF00201146496821F468 :10065000E9E7010510196941DDE90845001969411B
:1006600060510143516000BF02201146496821F0EA :10066000BDE8F04DA2E70000064C074D06E0E0684B
:1006700003010143516000BF00BF00BF074840684D :1006700040F0010394E8070098471034AC42F6D3E9
:1006800000F00C000828F8D10548FFF733FE0448B5 :10068000FFF738FD94260008B426000800BFFEE7F7
:10069000FFF73EFE10BD00000020024000100240A7 :10069000704700BFFEE7000008B5054989690143BE
:1006A00000A24A047047000010B54FF08040FFF7E9 :1006A000034A9161114689690140009100BF08BD6C
:1006B00077FE012874D100BF00BF80070069C0F336 :1006B000001002402DE9F04102460B461868C0F3D5
:1006C000400068B100BF4FF08040C068C0F34000F8 :1006C0000F2595FAA5F0B0FA80F480E00120A04053
:1006D00030B100BF6FF002008107086100BF00BFAA :1006D000284000287AD0082C04D240F2011000FAF9
:1006E00000BF4FF080400069C0F3800070B100BFD0 :1006E00004F106E0A4F108004FF00116864046F040
:1006F0004FF08040C068C0F3800038B100BF6FF099 :1006F0008061586808280ED11869D66826EA112644
:1007000004004FF08041086100BF00BF00BF4FF000 :100700000F0A97FAA7F7B7FA87F700FA07F73E43F9
:1007100080400069C0F3C00070B100BF4FF080405E :10071000D66000BF00BF586802EB116691FAA1FCD9
:10072000C068C0F3C00038B100BF6FF008004FF0E0 :10072000BCFA8CFC4FEA8C084FF00F0C0CFA08FC5A
:100730008041086100BF00BF00BF4FF080400069EA :10073000376827EA0C0791FAA1FCBCFA8CFC4FEA57
:10074000C0F3001070B100BF4FF08040C068C0F32C :100740008C0C00FA0CFC47EA0C07376000BF5868B5
:10075000001038B100BF6FF010004FF08041086109 :10075000012802D05868092838D1986802EB116640
:1007600000BF00BF4FF08040FFF71AFE01280DD1F7 :1007600091FAA1FCBCFA8CFC4FEA8C084FF0030C08
:1007700000BF8007C06800F0010038B100BF6FF013 :100770000CFA08FC376827EA0C0791FAA1FCBCFACE
:1007800001004FF08041086100BF00BF00BFFFF7CC :100780008CFC4FEA8C0C00FA0CFC47EA0C07376033
:10079000A9FD00BF03480068401C0249086000BF73 :1007900000BFD86802EB116691FAA1FCBCFA8CFC90
:1007A00010BD00006000002000BFFEE702E008C8A6 :1007A0004FEA8C084FF0040C0CFA08FC376827EA73
:1007B000121F08C1002AFAD170477047002001E0DB :1007B0000C0791FAA1FCBCFA8CFC4FEA8C0C00FAF5
:1007C00001C1121F002AFBD170472DE9FC410446EC :1007C0000CFC47EA0C07376000BF00BF641C25FA29
:1007D0000CB1012100E00021084640F26F21FFF733 :1007D00004F000287FF47AAFBDE8F081024690680B
:1007E000C9FC25462C462E686F68D7E90401CDE97F :1007E000C1F30F231840C1F30F23984201D1012018
:1007F00000016868D0F80CC097E80F00E047204679 :1007F00070470020FCE7C1F30F2242617047C1F34C
:1008000000F070FAD6E90401CDE900012868D0F8BB :100800000F2242617047C1F30F220261704770B539
:1008100008C096E80F00E047204600F063FAD6E9EA :1008100000EB116391FAA1F5B5FA85F5AE000F254D
:100820000401CDE900012868D0F80CC096E80F005B :10082000B5401C68AC4391FAA1F5B5FA85F5AD0069
:10083000E047BDE8FC810000014601F1100000E046 :1008300002FA05F52C431C6070BD000002480068F8
:10084000001D02681AB9024A12689042F8D3704734 :10084000401C014908607047100000204FF47A7185
:100850002000002010B50648046803E02046FFF79A :10085000B0FBF1F2521E4FF0E0235A6100229A6180
:10086000EBFF0446034800688442F7D310BD000044 :1008600005221A6100BF7047014908607047000007
:100870001C000020200000202DE9FC4104460CB1A2 :100870000000002010B5024613681C48824208D0D0
:10088000012100E00021084640F28B21FFF772FCB5 :10088000B2F1804F05D01A48824202D01948824204
:1008900025462C462E686F68D7E90401CDE9000192 :1008900004D123F070004C6840EA040313488242FC
:1008A0006868D0F808C097E80F00E047204600F0DD :1008A00008D0B2F1804F05D01148824202D01148E1
:1008B00019FAD6E90401CDE900012868D0F808C08A :1008B000824204D123F44070CC6840EA0403136000
:1008C00096E80F00E047204600F00CFAD6E9040154 :1008C0008868D06200BF0888906200BF07488242F3
:1008D000CDE900012868D0F80CC096E80F00E04789 :1008D00003D10869106300BF00BF00BF506940F03A
:1008E000BDE8FC810FB4DDE900108A68C0F30F2376 :1008E0000100506100BF002010BD0000002C01403D
:1008F0001A40C0F30F239A4201D1012200E00022E6 :1008F00000040040000800400146086900F00100C3
:10090000D0B204B070472DE9FC47054689460DB1C9 :100900007047000000B585B014216846FFF713FC5E
:10091000012100E0002108465F21FFF72BFC4FF08A :100910001020FFF7C1FE2020FFF7BEFE0420FFF7E6
:10092000000AD0462C462668676800BF3AE0D7E93F :10092000BBFE0820FFF7B8FE25492648FFF763FF06
:100930000401CDE900016068D0F808C097E80F0015 :1009300040F202212448FFF75EFF24492448FFF7D4
:10094000E047D6E90401CDE900012068D0F808C0ED :100940005AFF1F48009001200190022002900020D1
:1009500096E80F00E0474FEA48604FEA10682846E3 :10095000039069461B48FFF7ADFE1E48009000203B
:1009600000F0C0F9D7E90401CDE900016068D0F8D2 :10096000019069461748FFF7A5FE1B48009000203C
:1009700014C097E80F00E04718B108F1010000F03B :10097000019069461448FFF79DFE40F20220009066
:10098000FF08D6E90401CDE900012068D0F80CC0C9 :1009800001200190022002900020039069460E4849
:1009900096E80F00E047284600F0A4F90AF10100AC :10099000FFF790FE114800900020019069460C4836
:1009A00000F0FF0ABAF1080FC1DBB9F1010F03D162 :1009A000FFF788FE09480090012001900320029083
:1009B0002846FFF70AFF02E02846FFF75DFF4046A2 :1009B0000020039069460648FFF77CFE05B000BDA5
:1009C000BDE8FC870FB4DDE90001C1F30F224261ED :1009C00020002004001001400008014030003004E5
:1009D00000BF04B070470FB4DDE90001C1F30F227E :1009D000000C0140C000C004FFFD9F04FFFFCF04D6
:1009E000026100BF04B070472DE9FC4104460CB120 :1009E0002DE9F04186B0142101A8FFF7A4FB0120F6
:1009F000012100E0002108460F21FFF7BBFB25463F :1009F0004849C9690143474AD1611146C969014063
:100A00002C462E686F68D7E90401CDE900016868BB :100A0000009100BF00BF1C21434B1B68C3F30220B1
:100A1000D0F808C097E80F00E047D6E90401CDE917 :100A10000F2400250346C3F1070CBCF1040F02D9D3
:100A200000012868D0F808C096E80F00E04720468B :100A20004FF0040C01E0C3F1070C674603F1040C1E
:100A300000F058F9D7E90401CDE900016868D0F861 :100A3000BCF1070F02D24FF0000C01E0A3F1030C50
:100A40000CC097E80F00E047204600F04BF9D6E9CC :100A400066464FF0010C0CFA07FCACF1010C0CEA05
:100A50000401CDE900012868D0F80CC096E80F0029 :100A5000040C0CFA06FC4FF0010808FA06F8A8F19D
:100A6000E047204600F03EF9BDE8FC812DE9FC415D :100A6000010808EA05084CEA080200BF002904DB77
:100A700004460CB1012100E0002108462D21FFF7BA :100A70001007030E2948435407E01007040E2648C8
:100A800079FB25462C462E686F68D6E90401CDE92E :100A80000C3001F00F031B1FC45400BF1C200028B2
:100A900000012868D0F80CC096E80F00E047D7E9BD :100A900009DB00F01F02012191404209920002F19E
:100AA0000401CDE900016868D0F80CC097E80F0098 :100AA000E022C2F8001100BF41F61F40ADF804007B
:100AB000E047204600F016F9D6E90401CDE900012F :100AB00000200290632003900020049001A94FF0D1
:100AC0002868D0F808C096E80F00E047D7E904018D :100AC0008040FFF7D7FE00BF4FF08040006820F065
:100AD000CDE900016868D0F808C097E80F00E0474A :100AD00080004FF08041086000BF0020896844F228
:100AE000204600F0FFF8BDE8FC810FB430B5DDE929 :100AE0000702914301434FF08042916000BF00BF75
:100AF0000301C268C1F30F2323EA020402EA0305DB :100AF0001146496821F070010143516000BF00BFF9
:100B000044EA0544046100BF30BC5DF814FB2DE9E4 :100B00001046806820F080001146886000BF06B063
:100B1000FC4104460CB1012100E0002108464021BF :100B1000BDE8F081001002400CED00E000E400E0D0
:100B2000FFF728FB4FF0000825462C462E686F681B :100B200000BFFEE700BFFEE7704770477047000058
:100B3000D7E90401CDE900016868D0F808C097E85A :100B300010B502203749096821F007010143354A01
:100B40000F00E047D6E90401CDE900012868D0F89C :100B4000116000BF00BF00BF3248006800F007001E
:100B500008C096E80F00E047204600F0C3F80CE01C :100B50000228F8D100BF3048006840F480302E49A8
:100B600008F1010000F0FF08B8F1FA0F05DD20469A :100B6000086000BF00BF00BF2B480068C0F34040D2
:100B7000FFF77CFF0020BDE8FC81D7E90401CDE947 :100B70000028F8D04FF480304FF4E011264A526834
:100B800000016868D0F814C097E80F00E04700281B :100B800022F47C1200F440330B431A43224B5A6088
:100B9000E6D1D6E90401CDE900012868D0F80CC0FF :100B900000BF00BF1846006840F08070194608602A
:100BA00096E80F00E047204600F09CF80120E2E7BD :100BA00000BF00BF00BF1C480068C0F340600028C1
:100BB0002DE9FC47064688464FF000090EB1012199 :100BB000F8D000201849496821F0F0010143164A95
:100BC00000E0002108468821FFF7D4FA3446276860 :100BC000516000BF10151146496821F4E0610143EE
:100BD00065684FF0000946E008F0800050B1D5E9A3 :100BD000516000BF00201146496821F46051014373
:100BE0000401CDE900016068D0F808C095E80F0065 :100BE000516000BF02201146496821F00301014312
:100BF000E04709E0D5E90401CDE900016068D0F8DB :100BF000516000BF00BF00BF0748406800F00C0014
:100C00000CC095E80F00E047D7E90401CDE90001E9 :100C00000828F8D10548FFF721FE0448FFF72CFE1D
:100C10002068D0F808C097E80F00E047304600F0A1 :100C100010BD0000002002400010024000A24A0463
:100C200061F84FEA48604FEA1068D7E90401CDE95E :100C20007047000010B54FF08040FFF765FE0128C7
:100C300000012068D0F80CC097E80F00E04730466C :100C300074D100BF00BF80070069C0F3400068B1F5
:100C400000F050F8B9F1070F09D1D5E90401CDE959 :100C400000BF4FF08040C068C0F3400030B100BF2B
:100C500000016068D0F808C095E80F00E04709F18E :100C50006FF002008107086100BF00BF00BF4FF0C6
:100C6000010000F0FF09B9F1080FB5DBBDE8FC8712 :100C600080400069C0F3800070B100BF4FF0804049
:100C700070B506460D4600240BE0E00045FA00F092 :100C7000C068C0F3800038B100BF6FF004004FF0CF
:100C8000C1B23046FFF794FF3046FFF740FF601CCB :100C80008041086100BF00BF00BF4FF08040006995
:100C9000C4B2022CF1DB70BD00200B49086000BF1C :100C9000C0F3C00070B100BF4FF08040C068C0F327
:100CA00000BF4FF08040006840F001004FF08041ED :100CA000C00038B100BF6FF008004FF0804108610C
:100CB000086000BF00BF0846C06840F00100C8607F :100CB00000BF00BF00BF4FF080400069C0F30010CC
:100CC00000BF00BF704700000400002010B50248BC :100CC00070B100BF4FF08040C068C0F3001038B171
:100CD00000F07AF810BD00000400002010B500F00C :100CD00000BF6FF010004FF08041086100BF00BFFF
:100CE000A7F910BD70B504460CB1012100E0002148 :100CE0004FF08040FFF708FE01280DD100BF8007BC
:100CF000084640F25921FFF73DFA0025258900E01A :100CF000C06800F0010038B100BF6FF001004FF094
:100D000000BF281EA5F101018DB2F9D170BD000010 :100D00008041086100BF00BF00BFFFF797FD00BF33
:100D10002DE9F04105460E4618273946002000F01F :100D100003480068401C0249086000BF10BD000085
:100D200069F904460CB1012100E000210846362192 :100D20006000002000BFFEE702E008C8121F08C1F3
:100D3000FFF720FA256066600548A0600548E0607E :100D3000002AFAD170477047002001E001C1121F5C
:100D400005482061054860612046BDE8F08100004B :100D4000002AFBD170470000014601F1100000E0CD
:100D5000D7090008C5090008EB0A0008E5080008E3 :100D5000001D02681AB9024A12689042F8D370471F
:100D6000F7B515465C263146002000F043F90446ED :100D60002400002010B50648046803E02046FFF781
:100D700020466946082203E011F8013B00F8013BD8 :100D7000EBFF0446034800688442F7D310BD00002F
:100D8000131EA2F10106B2B2F6D100BF25810848B8 :100D8000200000202400002010B501E000F8011B25
:100D9000A0630849E163084921640849A16408493E :100D9000131EA2F10104A2B2F8D110BD00200B492C
:100DA00061640849E1640020A4F858002046FEBDB3 :100DA000086000BF00BF4FF08040006840F00100C5
:100DB000E90900086D0A00080F0B00080709000880 :100DB0004FF08041086000BF00BF0846C06840F0A7
:100DC000B10B0008710C000838B5014600200090F6 :100DC0000100C86000BF00BF7047000004000020A1
:100DD000086810B1152821D116E000BF124B134C42 :100DD00010B5024800F020F910BD0000040000200A
:100DE000E068C3F30F2222EA000400EA020544EAA5 :100DE00010B500F01FFD10BD0149086070470000FC
:100DF00005440E4D2C6100BF00BF0D4800684860DF :100DF0000C00002070B5034600224FF0E026756914
:100E000000BF1520086000BF094A48681268101A20 :100E00000D4E366803FB06F44FF0E026B16910E0A2
:100E1000642801D2002038BD00BFDFE70020086051 :100E10004FF0E026B06988420BD0884202D20E1A09
:100E200000900320F7E7000020002004001001409C :100E2000324402E02E1A0E4432440146A24200D35C
:100E30006000002008B501201F49896901431E4A4E :100E300000E0EDE700BF70BD0C00002010B500BF62
:100E40009161114689690140009100BF00BF000710 :100E400001220E490E48FFF7E2FC00BF0B490C4897
:100E50001146C9690143D1611146C9690140009138 :100E5000FFF7D9FC0B490A48FFF7D5FC0420FFF740
:100E600000BF00BF03200246144B19684FF6FF0372 :100E6000C9FF06490648FFF7CAFC0420FFF7C2FF86
:100E70001940134B0B4343EA0221104B196000BF8A :100E700004490348FFF7C3FC10BD00001000100434
:100E800000BF1048406820F0E06040F000700D495D :100E8000000C01402000200410B500BF01220E49D3
:100E9000486000BFFFF78EFBFFF788FAFFF7E2FA22 :100E90000E48FFF7BCFC00BF0D490C48FFF7AFFC44
:100EA000002000F011F8FFF719FFFFF7F5FE01E051 :100EA00009490A48FFF7ABFC0420FFF7A3FF0849F4
:100EB000FFF70CFFFCE70000001002400CED00E023 :100EB0000648FFF7A8FC04490448FFF7A4FC0420F7
:100EC0000000FA050000014010B504460C4951F835 :100EC000FFF798FF10BD000010001004000C014057
:100ED00024104A000B4951F82400002100F09EF82C :100ED0002000200410B50024082213491348FFF70E
:100EE000094951F824200749083951F82400002104 :100EE00096FC11491148FFF78EFC0420FFF782FFA2
:100EF00000F094F8012103480830015510BD0000AE :100EF0000F490E48FFF787FC0420FFF77BFF07E050
:100F0000E011000854000020F01100082DE9F0471E :100F0000601CC4B2FA2C03DDFFF7BEFF002010BD49
:100F100004460F460025A9462348005D20B9224813 :100F100005490648FFF762FC0028F1D1044903485F
:100F200018380168204688471FB94FF0FF30BDE8E8 :100F2000FFF76DFC0120F2E710001004000C0140F7
:100F3000F0871E4850F82400B7FBF0F61B4850F825 :100F30002000200470B50446002500BF0122174997
:100F40002400B7FBF0F100FB117000B1761C1848CB :100F40001748FFF764FC00BF16491548FFF757FC28
:100F500050F82400451E22E01348083850F82400B9 :100F500000BF1FE0E00920B110491148FFF753FC22
:100F600030F8150010B909F1010901E04FF000094E :100F600003E00E490E48FFF74AFC6006040E02201B
:100F7000B14513D14FF0000809E00B48083850F88C :100F7000FFF740FF0B490A48FFF745FC0220FFF747
:100F8000240005EB080220F8126008F10108B045C2 :100F800039FF08490648FFF73AFC0220FFF732FF15
:100F9000F3D3064850F824006843C8E76D1E002DBF :100F9000681CC5B2082DDDDB70BD00001000100418
:100FA000DADA4FF0FF30C2E75C000020E8110008F9 :100FA000000C01402000200438B5044600208DF8D4
:100FB000E011000810B501460023002207E00B48AD :100FB00000008DF80140FFF741FF7820FFF7BAFFEE
:100FC00050F8210030F8120000B15B1C521C084898 :100FC000FFF788FF9DF80000FFF7B4FFFFF782FFEF
:100FD00050F821009042F2D864205843044C54F851 :100FD0009DF80100FFF7AEFFFFF77CFFFFF754FF1E
:100FE0002140B0FBF4F0C0B210BD0000540000205E :100FE00038BD38B5044640208DF800008DF801402A
:100FF000E011000870B504460E4631462046FFF762 :100FF000FFF724FF7820FFF79DFFFFF76BFF9DF8B9
:1010000085FF0546681C08B9002070BD024850F8ED :101000000000FFF797FFFFF765FF9DF80100FFF76E
:1010100024002844F9E700004C00002030B50346C6 :1010100091FFFFF75FFF38BD38B501460020009013
:1010200001E003F8011B141EA2F10102F9D130BD49 :10102000086810B1152821D116E000BF124B134CEF
:101030001CB52F492F48FFF76BFE00902E492D4815 :10103000E068C3F30F2222EA000400EA020544EA52
:10104000FFF766FE01900022DDE90001FFF788FE50 :1010400005440E4D2C6100BF00BF0D48006848608C
:101050002A490860AE2000F055F8D52000F052F87B :1010500000BF1520086000BF094A48681268101ACE
:10106000802000F04FF8A82000F04CF83F2000F05E :10106000642801D2002038BD00BFDFE700200860FF
:1010700049F8D32000F046F8002000F043F8402063 :1010700000900320F7E7000020002004001001404A
:1010800000F040F88D2000F03DF8142000F03AF810 :101080006000002008B50120234989690143224AF4
:10109000202000F037F8002000F034F8A12000F004 :101090009161114689690140009100BF00BF0007BE
:1010A00031F8C82000F02EF8DA2000F02BF81220DA :1010A0001146C9690143D1611146C96901400091E6
:1010B00000F028F8812000F025F8CF2000F022F879 :1010B00000BF00BF03200246184B19684FF6FF031C
:1010C000D92000F01FF8F12000F01CF8DB2000F020 :1010C0001940174B0B4343EA0221144B196000BF30
:1010D00019F8402000F016F8A42000F013F8A6201C :1010D00000BF1448406820F0E06040F00070114903
:1010E00000F010F8AF2000F00DF800F009F81CBD7A :1010E000486000BFFFF724FD0F4800680F49B0FBC0
:1010F00020002004000C01401000100464000020B7 :1010F000F1F084B22046FFF777FEFFF703FCFFF71D
:101100007047000038B5044600208DF800008DF8C7 :101100006FFC002000F014F8FFF76AFEFFF746FEC0
:1011100001401B480068816B1948006888471848DF :1011100001E0FFF75DFEFCE7001002400CED00E08F
:1011200000687821426C16480068904714480068AF :101120000000FA05000001400000002040420F00CE
:10113000016C1348006888479DF80010104800684B :1011300010B504460C4951F824104A000B4951F8E7
:10114000426C0F48006890470D480068016C0C48DD :101140002400002100F036F8094951F8242007490D
:10115000006888479DF8011009480068426C0848FB :10115000083951F82400002100F02CF8012103483F
:101160000068904706480068016C05480068884799 :101160000830015510BD0000781900085400002017
:1011700003480068C16B02480068884738BD00001A :101170008819000810B501460023002207E00B483B
:101180006400002000BF00BF00BF00BF00BFBFF36E :1011800050F8210030F8120000B15B1C521C0848D6
:101190004F8F00BF00BF00BF0948006800F4E06047 :1011900050F821009042F2D864205843044C54F88F
:1011A00008490843001D0649086000BF00BF00BF92 :1011A0002140B0FBF4F0C0B210BD0000540000209C
:1011B000BFF34F8F00BF00BF00BF00BF00BFFDE700 :1011B0007819000830B5034601E003F8011B141E3E
:1011C0000CED00E00000FA055F6C697374006C6957 :1011C000A2F10102F9D130BD2DE9FF4F83B00746EE
:1011D000737420616C6C20636F6D6D616E640000D0 :1011D0000E4692464FF0000B0024A14657A103C9CA
:1011E00000020000000000000800000008000000ED :1011E000CDE9010120E01AF80900203800F0FF0BDA
:1011F000001000000000000018120008000000208D :1011F0007E2F02DD0027701CC6B200240CE00BEB32
:1012000078000000AC070008901200087800002069 :101200004B00504901EB4000005D07EBC611214443
:1012100008180000BC0700080024F40000000000CB :101210004D4A5054601CC4B2062CF0DBB81DC7B256
:1012200000000000000000000000000000000000BE :1012200009F1010000F0FF091AF809000028DAD1DD
:1012300000000000000000000000000000000000AE :1012300046481099FEF7E2FF0090FFF7FBF8804662
:10124000000000000000000000000000000000009E :1012400000250EE00A20B8FBF0F100FB118040B24F
:10125000000000000000000000000000C90E0008AF :10125000C5F1060101AA50540A20B8FBF0F8681C39
:10126000B50F000880000020400000208010002002 :1012600045B2032DEEDB04250EE00A20B8FBF0F1B9
:10127000420000200000000000000000000000000C :1012700000FB118040B2C5F1060101AA50540A20BA
:10128000C8110008CE110008C6E533B4550800089F :10128000B8FBF0F8681C45B2072DEEDB304910982A
:10129000FFF71AF901D800250CE02E491098FFF746
:1012A00013F901D8012505E000211098FFF70CF98A
:1012B00000D8022522E001A8405D103000F0FF0BAD
:1012C0007E2F02DD0027701CC6B200240CE00BEB61
:1012D0004B001C4901EB4000005D07EBC6112144A7
:1012E000194A5054601CC4B2062CF0DBB81DC7B2BA
:1012F00009F1010000F0FF09681C45B2072DDADB97
:10130000002015E00699203901F0FF0B00240CE0C5
:101310000BEB4B010B4A02EB4101095D07EBC612D7
:101320002244094B9954611CCCB2062CF0DB401CC2
:101330000728E7DB07B0BDE8F08F0000000000FEE3
:10134000000000007A1A00088014002000007A448F
:101350000000C842000020412DE9F04F87B005464B
:101360000E46174698460020049005900690814648
:101370000024824600213846FFF79CF807D22D2230
:101380002046611CCCB204A90A5487F00047F549F5
:101390003846FFF799F802D207B0BDE8F08FC4F1E4
:1013A000080000F0FF09F0493846FFF78DF85DD2DC
:1013B000ED493846FEF754FFEC490390FEF7C6FEB0
:1013C0008346FFF737F8C2B22046611CCCB204A9AD
:1013D0000A543846FFF72EF8C0B242F2107190FB63
:1013E000F1F201FB12004FF47A7190FBF1F0303012
:1013F000C2B22046611CCCB204A90A543846FFF799
:1014000019F8C0B24FF47A7190FBF1F201FB1200AF
:10141000642190FBF1F03030C2B22046611CCCB2A6
:1014200004A90A543846FFF705F8C0B2642190FBBE
:10143000F1F201FB12000A2190FBF1F03030C2B250
:101440002046611CCCB204A90A543846FEF7F2FFCC
:10145000C0B20A2190FBF1F201FB12003030C2B29F
:101460002046611CCCB204A90A54CCE0C0493846DD
:10147000FFF72AF84CD23846FEF7DCFFC0B242F242
:10148000107190FBF1F201FB12004FF47A7190FBA6
:10149000F1F03030C2B22046611CCCB204A90A542B
:1014A0003846FEF7C7FFC0B24FF47A7190FBF1F2F5
:1014B00001FB1200642190FBF1F03030C2B22046F3
:1014C000611CCCB204A90A543846FEF7B3FFC0B27F
:1014D000642190FBF1F201FB12000A2190FBF1F074
:1014E0003030C2B22046611CCCB204A90A5438463E
:1014F000FEF7A0FFC0B20A2190FBF1F201FB12003F
:101500003030C2B22046611CCCB204A90A547AE041
:1015100098493846FEF7D8FF37D23846FEF78AFF9B
:10152000C0B24FF47A7190FBF1F201FB120064211A
:1015300090FBF1F03030C2B22046611CCCB204A95D
:101540000A543846FEF776FFC0B2642190FBF1F2F0
:1015500001FB12000A2190FBF1F03030C2B22046AC
:10156000611CCCB204A90A543846FEF763FFC0B22E
:101570000A2190FBF1F201FB12003030C2B220468A
:10158000611CCCB204A90A543DE07B493846FEF701
:101590009BFF23D23846FEF74DFFC0B2642190FB7B
:1015A000F1F201FB12000A2190FBF1F03030C2B2DF
:1015B0002046611CCCB204A90A543846FEF73AFF13
:1015C000C0B20A2190FBF1F201FB12003030C2B22E
:1015D0002046611CCCB204A90A5414E0002138460C
:1015E000FEF772FF0FD83846FEF724FFC0B20A217B
:1015F00090FBF1F201FB12003030C2B22046611CB8
:10160000CCB204A90A54B8F1000F71DD072C6FDACF
:101610002E222046611CCCB204A90A543846FEF79B
:1016200009FF00F0FF0B5846FEF7FFFE3946039016
:10163000FEF7E1FD0746B8F1010F20D1082C1EDAB4
:101640004D493846FEF7DAFD07463846FEF71FFFDC
:1016500000224A4BCDE90001FEF740FECDE9020130
:10166000FEF7FCFEC0B20A2190FBF1F201FB120072
:101670003030C2B22046611CCCB204A90A54B8F181
:10168000020F35DB082C33DA3A493846FEF7B6FD4F
:1016900007463846FEF7CEFEC0B2642190FBF1F259
:1016A00001FB12000A2190FBF1F03030C2B220465B
:1016B000611CCCB204A90A54082C19DA3846FEF78A
:1016C000E6FE00222D4BCDE90001FEF707FECDE935
:1016D0000201FEF7C3FEC0B20A2190FBF1F201FB4A
:1016E00012003030C2B22046611CCCB204A90A54A8
:1016F00031E004A810F80A00203800F0FF09782D26
:1017000002DD0025701CC6B200240AE004EB0910BB
:101710001B49085C05EBC61121441A4A5054601C51
:10172000C4B2082CF2DB00240CE004EB09100830F2
:101730001349095C701C05EBC0102044114A115478
:10174000601CC4B2082CF0DB05F10800C5B20AF138
:10175000010000F0FF0A04A810F80A000028C8D110
:1017600000BF19E60000FA4600401C460000404257
:1017700000007A440000C842000020410000E03F21
:10178000A21C000880140020F0B503461446002275
:101790000020002530E0665D203EF2B2782B02DDAD
:1017A00000234E1CF1B200200CE000EB0216144F97
:1017B000BE5D03EBC1170744DFF848C00CF80760B3
:1017C000461CF0B20828F0DB00200EE000EB021609
:1017D00008360B4FBF5D4E1C03EBC6160644DFF800
:1017E00024C00CF80670461CF0B20828EEDB03F1AA
:1017F0000806F3B26E1CF5B2665D002ECBD1F0BDCB
:10180000A21C00088014002010B504464FF480622A
:1018100021460348FFF7B8FA00F080F810BD000039
:101820008014002010B5AE20FFF7BEFB2020FFF78C
:10183000BBFB1020FFF7B8FBC820FFF7B5FB00206B
:10184000FFF7B2FB1020FFF7AFFB4020FFF7ACFB28
:101850008120FFF7A9FBFF20FFF7A6FBA120FFF7E0
:10186000A3FBA620FFF7A0FBA820FFF79DFB3F20CE
:10187000FFF79AFBA420FFF797FBD320FFF794FB19
:101880000020FFF791FBD520FFF78EFBF020FFF73C
:101890008BFBD920FFF788FB2220FFF785FBDA209E
:1018A000FFF782FB1220FFF77FFBDB20FFF77CFBBB
:1018B0002020FFF779FB8D20FFF776FB1420FFF740
:1018C00073FBAF20FFF770FB0020FFF79DFF00F0D8
:1018D00001F810BD08B50BA200210846FFF754FF20
:1018E00002230A4A00212820FFF736FD0848562324
:1018F00008A2032100900020FFF766FC00F00EF81C
:1019000008BD00005445535400000000F62874C17F
:101910000000C0412040414443313A0070B50024EA
:1019200018E004F1B001C8B2FFF73EFB0120FFF759
:101930003BFB1020FFF738FB002507E005EBC41147
:10194000064A505CFFF74DFB681CC5B2802DF5DBE5
:10195000601CC4B2082CE4DB70BD000080140020C1
:101960005F6C697374006C69737420616C6C2063C4
:101970006F6D6D616E6400000002000000000000E9
:101980000800000008000000001000000000000037
:10199000081C3044586C800000000004040400005F
:1019A000080000000800000800000008000204060B
:1019B000080A0C0001020304050600F808888808DC
:1019C000080000E010080810E00000192120201194
:1019D0000E00000F102020100F001060028C0080FD
:1019E00000F0020418000080000004047E010807D3
:1019F000003F4040404078000700202424A4FE23FC
:101A0000222000F8080808F8000010080601FF016D
:101A10000600003F1010103F0000109453321E3299
:101A20005210007E4242427E0000000000FF494901
:101A30004949494949FF0000000008CC4A49484A41
:101A4000CC18007F88888482E00000FF1212529236
:101A50007F00007E88888482E00000000000000093
:101A6000000000000000000000000000363600000A
:101A70000000000000000000000000000000000066
:101A80000000002F000000000700070000147F1472
:101A90007F1400242A7F2A12006264081323003670
:101AA0004955225000000503000000001C2241009F
:101AB000000041221C000014083E08140008083EE3
:101AC0000808000000A060000008080808080000DE
:101AD00060600000002010080402003E5149453EAD
:101AE0000000427F400000426151494600214145CB
:101AF0004B31001814127F10002745454539003C32
:101B00004A494930000171090503003649494936FF
:101B100000064949291E00003636000000005636EE
:101B200000000008142241000014141414140000D2
:101B30004122140800020151090600324959513E60
:101B4000007C1211127C007F49494936003E414118
:101B50004122007F4141221C007F49494941007FC9
:101B600009090901003E4149497A007F0808087FB8
:101B70000000417F4100002040413F01007F0814E8
:101B80002241007F40404040007F020C027F007FE6
:101B90000408107F003E4141413E007F09090906CB
:101BA000003E4151215E007F0919294600464949FE
:101BB00049310001017F0101003F4040403F001FCB
:101BC0002040201F003F4038403F0063140814634A
:101BD00000070870080700615149454300007F4134
:101BE000410000552A552A55000041417F0000045C
:101BF0000201020400404040404000000102040095
:101C0000002054545478007F4844443800384444F9
:101C1000442000384444487F003854545418000885
:101C20007E0901020018A4A4A47C007F08040478A3
:101C30000000447D4000004080847D00007F10282B
:101C400044000000417F4000007C04180478007CC0
:101C50000804047800384444443800FC2424241840
:101C60000018242418FC007C08040408004854547C
:101C7000542000043F444020003C4040207C001C95
:101C80002040201C003C4030403C004428102844A8
:101C9000001CA0A0A07C004464544C4414141414F0
:101CA000141400000000000000000000000000000C
:101CB0000000000000F800000000000000333000C9
:101CC000000000100C06100C0600000000000000D0
:101CD000000040C07840C0784000043F04043F0446
:101CE0000400007088FC08300000001820FF211E4E
:101CF0000000F008F000E018000000211C031E2185
:101D00001E0000F00888700000001E2123241927FF
:101D1000211010160E00000000000000000000005E
:101D20000000000000E01804020000000007182076
:101D3000400000020418E0000000004020180700E6
:101D40000000404080F0804040000202010F01028C
:101D50000200000000F0000000000101011F01016D
:101D60000100000000000000000080B070000000D2
:101D7000000000000000000000000001010101015E
:101D800001010000000000000000003030000000F1
:101D900000000000000080601804006018060100C8
:101DA000000000E010080810E000000F10202010D4
:101DB0000F00001010F8000000000020203F20203D
:101DC00000000070080808887000003028242221D4
:101DD000300000300888884830000018202020118A
:101DE0000E000000C02010F8000000070424243F6B
:101DF000240000F808888808080000192120201114
:101E00000E0000E0108888180000000F112020113B
:101E10000E0000380808C83808000000003F000025
:101E200000000070880808887000001C2221212210
:101E30001C0000E010080810E00000003122221110
:101E40000F00000000C0C0000000000000303000A3
:101E50000000000000800000000000008060000022
:101E6000000000008040201008000001020408105B
:101E7000200040404040404040000404040404046A
:101E80000400000810204080000000201008040218
:101E90000100007048080808F0000000003036011A
:101EA0000000C030C828E810E000071827242314D9
:101EB0000B000000C038E0000000203C2302022795
:101EC000382008F8888888700000203F20202011E2
:101ED0000E00C0300808080838000718202020101D
:101EE000080008F808080810E000203F2020201013
:101EF0000F0008F88888E8081000203F20202320E1
:101F0000180008F88888E8081000203F2000030027
:101F10000000C03008080838000007182020221EE2
:101F2000020008F808000008F808203F21010121FC
:101F30003F20000808F8080800000020203F20206B
:101F4000000000000808F8080800C08080807F00BA
:101F5000000008F888C028180800203F2001263813
:101F6000200008F8080000000000203F202020206A
:101F7000300008F8F800F8F80800203F003F003F64
:101F8000200008F830C00008F808203F200007189B
:101F90003F00E01008080810E0000F10202020107B
:101FA0000F0008F808080808F000203F210101018F
:101FB0000000E01008080810E0000F182424385032
:101FC0004F0008F8888888887000203F2000030CA4
:101FD00030200070880808083800003820212122AD
:101FE0001C00180808F8080818000000203F20000E
:101FF000000008F808000008F808001F2020202032
:102000001F000878880000C83808000007380E0153
:102010000000F80800F80008F800033C0700073C3F
:102020000300081868808068180820302C03032CEF
:1020300030200838C800C83808000000203F2000C1
:10204000000010080808C838080020382621202081
:102050001800000000FE020202000000007F404065
:102060004000000C30C000000000000000010638F5
:10207000C00000020202FE000000004040407F005D
:102080000000000004020202040000000000000042
:102090000000000000000000000080808080808040
:1020A0008080000202040000000000000000000028
:1020B000000000008080808000000019242222227D
:1020C0003F2008F8008080000000003F1120201110
:1020D0000E000000008080800000000E11202020F3
:1020E0001100000000808088F800000E11202010F0
:1020F0003F200000808080800000001F22222222DA
:102100001300008080F0888888180020203F20205D
:1021100000000000808080808000006B9494949385
:10212000600008F8008080800000203F210000202F
:102130003F2000809898000000000020203F2020D1
:102140000000000000809898000000C08080807F20
:10215000000008F8000080808000203F24022D301D
:102160002000000808F8000000000020203F202088
:1021700000008080808080808000203F20003F2001
:10218000003F8080008080800000203F21000020F0
:102190003F200000808080800000001F2020202041
:1021A0001F00808000808000000080FFA12020119F
:1021B0000E000000008080808000000E112020A012
:1021C000FF80808080008080800020203F212000D0
:1021D00001000000808080808000003324242424BB
:1021E0001900008080E0808000000000001F202097
:1021F00000008080000000808000001F2020201050
:102200003F20808080000080808000010E30080622
:10221000010080800080008080800F300C030C3033
:102220000F0000808000808080000020312E0E3161
:102230002000808080000080808080818E70180661
:10224000010000808080808080000021302C2221CD
:10225000300000000000807C020200000000003F0F
:10226000404000000000FF00000000000000FF00F0
:1022700000000002027C800000000040403F00009F
:10228000000000060101020204040000000000003A
:1022900000000003050911FF118905C300E000F0EB
:1022A00000F8000000000000004428FF11AA4400CC
:1022B000000000000000000000000000000000001E
:1022C000000000000000000000000000000000000E
:1022D00000000000000000000000000000000000FE
:1022E00000000000000000000000000083013844EE
:1022F000829292740183000000000000007C44C7B9
:10230000017D7D7D7D017D7D7D7D017D7D7D7D01ED
:10231000FF000000000000010001000100010001B9
:1023200000010000000000000000000101000000AA
:10233000000000000000000000000000000000009D
:10234000000000000000000000000000000000008D
:10235000000000000000000000000000000000007D
:10236000000000000000000000000000010100006B
:10237000000000000101000000000000000000015A
:10238000010101010101010101010101010101013D
:1023900001000000000000000000004040404040FC
:1023A00000006D6D6D6D6D0000606060606000002C
:1023B00040404040400000000000000000000000DD
:1023C000000000000000000000000000000000000D
:1023D00000000000000000000000000000000000FD
:1023E00000000000000000000000000000000000ED
:1023F00000000000000000000000000000000000DD
:1024000000000000000000000000000000000000CC
:102410000000000000000000000000DBDBDBDBDB75
:102420000000DBDBDBDBDB0000DBDBDBDBDB00001E
:10243000DBDBDBDBDB0000DADADADADA0000D8D863
:10244000D8D8D80000C0C0C0C0C00000C0C0C0C044
:10245000C00000C0C0C0C0C00000C0C0C0C0C0003C
:1024600000808080808000000000000000000000EC
:10247000000000000000000000000000000000005C
:10248000000000000000000000000000000000004C
:10249000000000000000000000000006060606061E
:1024A00000000606060606000006060606060000F0
:1024B00006060606060000060606E6662000060674
:1024C00086060600000606060686000006060606C4
:1024D000060000868686868680808686068686C07A
:1024E000C08686860606D0307606060606000006FA
:1024F0000606060600000606060606000006060694
:1025000006060000060606060600000000000000A1
:1025100000000000000000000000000000000000BB
:1025200000000000000000000000000000000000AB
:10253000000000000000000000000000601C00FE21
:1025400000010200C41820029E63B20E00FF8181C8
:10255000FF00008040300F00000000FF0023EAAAC7
:10256000BFAAEA033F00FF000000000000000000D7
:10257000000000000000000000000000000000005B
:10258000000000000000000000000000000000004B
:10259000000000000080808000000000008080803B
:1025A000000000000000000000000000000000002B
:1025B000000000000000000000000E0C08000001F8
:1025C0000101010100000001000000010081808084
:1025D0008180818080808001010101000000010074
:1025E000000001000101090C0E00000000000000C5
:1025F00000000000000000000000C0C0C0C0C0C05B
:10260000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CA
:10261000C000001E21404050215E001E214040505D
:10262000215E00000000000000000000000000002B
:10263000000000000000000000000000000000009A
:1026400000000000000000000000000000FFFFC1CB
:10265000C1FFFFC1C1FFFF0000000000000000003B
:10266000000000000000000000000000000000006A
:1026700000000000000000000000FFFF80FCF3EFFE
:10268000F3FC80FF80EEEEEEF5FBFF9CBEB6B68855
:10269000FF000000B42600080000002074000000C5
:1026A000280D000828270008740000200C1C0000DA
:1026B000380D00080024F4000000000000000000B5
:1026C000000000000000000000000000000000000A
:1026D00000000000000000000000000000000000FA
:1026E00000000000000000000000000000000000EA
:1026F0000000000000000000311100087511000802
:1027000080000020400000208010002042000020B7
:1027100000000000000000006019000866190008B1
:08272000C6E533B4650D0008A5
:04000005080000ED02 :04000005080000ED02
:00000001FF :00000001FF

View File

@ -8,123 +8,511 @@
#include "ssd1306_oled.h" #include "ssd1306_oled.h"
#include "ssd1306_oled.h" #include "ssd1306_oled.h"
const uint8_t F16x16[] =
static i2c_t *ssd1306_oled;
static uint8_t buffer[SSD1306_WIDTH * SSD1306_HEIGHT / 8]; // 定义屏幕缓冲区
static void ssd1306_write_command(uint8_t command)
{ {
uint8_t data[2]; 0x00, 0xF8, 0x08, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00,
data[0] = SSD1306_CMD_SET_LOW_COLUMN; // Co = 0, D/C# = 0 0x00, 0x19, 0x21, 0x20, 0x20, 0x11, 0x0E, 0x00, 0x00, 0x0F, 0x10, 0x20, 0x20, 0x10, 0x0F, 0x00, // 50
data[1] = command;
ssd1306_oled->interface.start(ssd1306_oled); 0x10, 0x60, 0x02, 0x8C, 0x00, 0x80, 0x00, 0xF0, 0x02, 0x04, 0x18, 0x00, 0x00, 0x80, 0x00, 0x00,
ssd1306_oled->interface.write_byte(ssd1306_oled, SSD1306_I2C_ADDRESS); 0x04, 0x04, 0x7E, 0x01, 0x08, 0x07, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x40, 0x78, 0x00, 0x07, 0x00, // 沁
ssd1306_oled->interface.wait_ack(ssd1306_oled);
ssd1306_oled->interface.write_byte(ssd1306_oled, data[0]); 0x20, 0x24, 0x24, 0xA4, 0xFE, 0x23, 0x22, 0x20, 0x00, 0xF8, 0x08, 0x08, 0x08, 0xF8, 0x00, 0x00,
ssd1306_oled->interface.wait_ack(ssd1306_oled); 0x10, 0x08, 0x06, 0x01, 0xFF, 0x01, 0x06, 0x00, 0x00, 0x3F, 0x10, 0x10, 0x10, 0x3F, 0x00, 0x00, // 和
ssd1306_oled->interface.write_byte(ssd1306_oled, data[1]);
ssd1306_oled->interface.wait_ack(ssd1306_oled); 0x10, 0x94, 0x53, 0x32, 0x1E, 0x32, 0x52, 0x10, 0x00, 0x7E, 0x42, 0x42, 0x42, 0x7E, 0x00, 0x00,
ssd1306_oled->interface.stop(ssd1306_oled); 0x00, 0x00, 0x00, 0xFF, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0xFF, 0x00, 0x00, 0x00, 0x00, // 智
0x08, 0xCC, 0x4A, 0x49, 0x48, 0x4A, 0xCC, 0x18, 0x00, 0x7F, 0x88, 0x88, 0x84, 0x82, 0xE0, 0x00,
0x00, 0xFF, 0x12, 0x12, 0x52, 0x92, 0x7F, 0x00, 0x00, 0x7E, 0x88, 0x88, 0x84, 0x82, 0xE0, 0x00, // 能
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //:
};
/************************************6*8的点阵************************************/
const uint8_t F6x8[][6] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sp
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, // !
0x00, 0x00, 0x07, 0x00, 0x07, 0x00, // "
0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14, // #
0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12, // $
0x00, 0x62, 0x64, 0x08, 0x13, 0x23, // %
0x00, 0x36, 0x49, 0x55, 0x22, 0x50, // &
0x00, 0x00, 0x05, 0x03, 0x00, 0x00, // '
0x00, 0x00, 0x1c, 0x22, 0x41, 0x00, // (
0x00, 0x00, 0x41, 0x22, 0x1c, 0x00, // )
0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, // *
0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, // +
0x00, 0x00, 0x00, 0xA0, 0x60, 0x00, // ,
0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // -
0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // .
0x00, 0x20, 0x10, 0x08, 0x04, 0x02, // /
0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, // 1
0x00, 0x42, 0x61, 0x51, 0x49, 0x46, // 2
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31, // 3
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, // 4
0x00, 0x27, 0x45, 0x45, 0x45, 0x39, // 5
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6
0x00, 0x01, 0x71, 0x09, 0x05, 0x03, // 7
0x00, 0x36, 0x49, 0x49, 0x49, 0x36, // 8
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // 9
0x00, 0x00, 0x36, 0x36, 0x00, 0x00, // :
0x00, 0x00, 0x56, 0x36, 0x00, 0x00, // ;
0x00, 0x08, 0x14, 0x22, 0x41, 0x00, // <
0x00, 0x14, 0x14, 0x14, 0x14, 0x14, // =
0x00, 0x00, 0x41, 0x22, 0x14, 0x08, // >
0x00, 0x02, 0x01, 0x51, 0x09, 0x06, // ?
0x00, 0x32, 0x49, 0x59, 0x51, 0x3E, // @
0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, // A
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, // B
0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, // C
0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, // D
0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, // E
0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, // F
0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A, // G
0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, // H
0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, // I
0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, // J
0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, // K
0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, // L
0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, // N
0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, // O
0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, // P
0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, // Q
0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, // R
0x00, 0x46, 0x49, 0x49, 0x49, 0x31, // S
0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, // T
0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, // U
0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, // V
0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, // W
0x00, 0x63, 0x14, 0x08, 0x14, 0x63, // X
0x00, 0x07, 0x08, 0x70, 0x08, 0x07, // Y
0x00, 0x61, 0x51, 0x49, 0x45, 0x43, // Z
0x00, 0x00, 0x7F, 0x41, 0x41, 0x00, // [
0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55, // 55
0x00, 0x00, 0x41, 0x41, 0x7F, 0x00, // ]
0x00, 0x04, 0x02, 0x01, 0x02, 0x04, // ^
0x00, 0x40, 0x40, 0x40, 0x40, 0x40, // _
0x00, 0x00, 0x01, 0x02, 0x04, 0x00, // '
0x00, 0x20, 0x54, 0x54, 0x54, 0x78, // a
0x00, 0x7F, 0x48, 0x44, 0x44, 0x38, // b
0x00, 0x38, 0x44, 0x44, 0x44, 0x20, // c
0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, // d
0x00, 0x38, 0x54, 0x54, 0x54, 0x18, // e
0x00, 0x08, 0x7E, 0x09, 0x01, 0x02, // f
0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, // g
0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, // h
0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, // i
0x00, 0x40, 0x80, 0x84, 0x7D, 0x00, // j
0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, // k
0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, // l
0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, // m
0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, // n
0x00, 0x38, 0x44, 0x44, 0x44, 0x38, // o
0x00, 0xFC, 0x24, 0x24, 0x24, 0x18, // p
0x00, 0x18, 0x24, 0x24, 0x18, 0xFC, // q
0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, // r
0x00, 0x48, 0x54, 0x54, 0x54, 0x20, // s
0x00, 0x04, 0x3F, 0x44, 0x40, 0x20, // t
0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, // u
0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, // v
0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, // w
0x00, 0x44, 0x28, 0x10, 0x28, 0x44, // x
0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C, // y
0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, // z
0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // horiz lines
};
/****************************************8*16的点阵************************************/
const uint8_t F8X16[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0
0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x30, 0x00, 0x00, 0x00, //! 1
0x00, 0x10, 0x0C, 0x06, 0x10, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //" 2
0x40, 0xC0, 0x78, 0x40, 0xC0, 0x78, 0x40, 0x00, 0x04, 0x3F, 0x04, 0x04, 0x3F, 0x04, 0x04, 0x00, // # 3
0x00, 0x70, 0x88, 0xFC, 0x08, 0x30, 0x00, 0x00, 0x00, 0x18, 0x20, 0xFF, 0x21, 0x1E, 0x00, 0x00, //$ 4
0xF0, 0x08, 0xF0, 0x00, 0xE0, 0x18, 0x00, 0x00, 0x00, 0x21, 0x1C, 0x03, 0x1E, 0x21, 0x1E, 0x00, //% 5
0x00, 0xF0, 0x08, 0x88, 0x70, 0x00, 0x00, 0x00, 0x1E, 0x21, 0x23, 0x24, 0x19, 0x27, 0x21, 0x10, //& 6
0x10, 0x16, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //' 7
0x00, 0x00, 0x00, 0xE0, 0x18, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x00, //( 8
0x00, 0x02, 0x04, 0x18, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, //) 9
0x40, 0x40, 0x80, 0xF0, 0x80, 0x40, 0x40, 0x00, 0x02, 0x02, 0x01, 0x0F, 0x01, 0x02, 0x02, 0x00, //* 10
0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x1F, 0x01, 0x01, 0x01, 0x00, //+ 11
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xB0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, //, 12
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //- 13
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, //. 14
0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x18, 0x04, 0x00, 0x60, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, /// 15
0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x0F, 0x10, 0x20, 0x20, 0x10, 0x0F, 0x00, // 0 16
0x00, 0x10, 0x10, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // 1 17
0x00, 0x70, 0x08, 0x08, 0x08, 0x88, 0x70, 0x00, 0x00, 0x30, 0x28, 0x24, 0x22, 0x21, 0x30, 0x00, // 2 18
0x00, 0x30, 0x08, 0x88, 0x88, 0x48, 0x30, 0x00, 0x00, 0x18, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00, // 3 19
0x00, 0x00, 0xC0, 0x20, 0x10, 0xF8, 0x00, 0x00, 0x00, 0x07, 0x04, 0x24, 0x24, 0x3F, 0x24, 0x00, // 4 20
0x00, 0xF8, 0x08, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00, 0x19, 0x21, 0x20, 0x20, 0x11, 0x0E, 0x00, // 5 21
0x00, 0xE0, 0x10, 0x88, 0x88, 0x18, 0x00, 0x00, 0x00, 0x0F, 0x11, 0x20, 0x20, 0x11, 0x0E, 0x00, // 6 22
0x00, 0x38, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, // 7 23
0x00, 0x70, 0x88, 0x08, 0x08, 0x88, 0x70, 0x00, 0x00, 0x1C, 0x22, 0x21, 0x21, 0x22, 0x1C, 0x00, // 8 24
0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x31, 0x22, 0x22, 0x11, 0x0F, 0x00, // 9 25
0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, //: 26
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00, //; 27
0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, //< 28
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, //= 29
0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, //> 30
0x00, 0x70, 0x48, 0x08, 0x08, 0x08, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x30, 0x36, 0x01, 0x00, 0x00, //? 31
0xC0, 0x30, 0xC8, 0x28, 0xE8, 0x10, 0xE0, 0x00, 0x07, 0x18, 0x27, 0x24, 0x23, 0x14, 0x0B, 0x00, //@ 32
0x00, 0x00, 0xC0, 0x38, 0xE0, 0x00, 0x00, 0x00, 0x20, 0x3C, 0x23, 0x02, 0x02, 0x27, 0x38, 0x20, // A 33
0x08, 0xF8, 0x88, 0x88, 0x88, 0x70, 0x00, 0x00, 0x20, 0x3F, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00, // B 34
0xC0, 0x30, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, 0x07, 0x18, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, // C 35
0x08, 0xF8, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x20, 0x3F, 0x20, 0x20, 0x20, 0x10, 0x0F, 0x00, // D 36
0x08, 0xF8, 0x88, 0x88, 0xE8, 0x08, 0x10, 0x00, 0x20, 0x3F, 0x20, 0x20, 0x23, 0x20, 0x18, 0x00, // E 37
0x08, 0xF8, 0x88, 0x88, 0xE8, 0x08, 0x10, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, // F 38
0xC0, 0x30, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00, 0x07, 0x18, 0x20, 0x20, 0x22, 0x1E, 0x02, 0x00, // G 39
0x08, 0xF8, 0x08, 0x00, 0x00, 0x08, 0xF8, 0x08, 0x20, 0x3F, 0x21, 0x01, 0x01, 0x21, 0x3F, 0x20, // H 40
0x00, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // I 41
0x00, 0x00, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x00, 0xC0, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00, 0x00, // J 42
0x08, 0xF8, 0x88, 0xC0, 0x28, 0x18, 0x08, 0x00, 0x20, 0x3F, 0x20, 0x01, 0x26, 0x38, 0x20, 0x00, // K 43
0x08, 0xF8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x30, 0x00, // L 44
0x08, 0xF8, 0xF8, 0x00, 0xF8, 0xF8, 0x08, 0x00, 0x20, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x20, 0x00, // M 45
0x08, 0xF8, 0x30, 0xC0, 0x00, 0x08, 0xF8, 0x08, 0x20, 0x3F, 0x20, 0x00, 0x07, 0x18, 0x3F, 0x00, // N 46
0xE0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x0F, 0x10, 0x20, 0x20, 0x20, 0x10, 0x0F, 0x00, // O 47
0x08, 0xF8, 0x08, 0x08, 0x08, 0x08, 0xF0, 0x00, 0x20, 0x3F, 0x21, 0x01, 0x01, 0x01, 0x00, 0x00, // P 48
0xE0, 0x10, 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x0F, 0x18, 0x24, 0x24, 0x38, 0x50, 0x4F, 0x00, // Q 49
0x08, 0xF8, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x03, 0x0C, 0x30, 0x20, // R 50
0x00, 0x70, 0x88, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00, 0x38, 0x20, 0x21, 0x21, 0x22, 0x1C, 0x00, // S 51
0x18, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x18, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x00, 0x00, // T 52
0x08, 0xF8, 0x08, 0x00, 0x00, 0x08, 0xF8, 0x08, 0x00, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x00, // U 53
0x08, 0x78, 0x88, 0x00, 0x00, 0xC8, 0x38, 0x08, 0x00, 0x00, 0x07, 0x38, 0x0E, 0x01, 0x00, 0x00, // V 54
0xF8, 0x08, 0x00, 0xF8, 0x00, 0x08, 0xF8, 0x00, 0x03, 0x3C, 0x07, 0x00, 0x07, 0x3C, 0x03, 0x00, // W 55
0x08, 0x18, 0x68, 0x80, 0x80, 0x68, 0x18, 0x08, 0x20, 0x30, 0x2C, 0x03, 0x03, 0x2C, 0x30, 0x20, // X 56
0x08, 0x38, 0xC8, 0x00, 0xC8, 0x38, 0x08, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x00, 0x00, // Y 57
0x10, 0x08, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00, 0x20, 0x38, 0x26, 0x21, 0x20, 0x20, 0x18, 0x00, // Z 58
0x00, 0x00, 0x00, 0xFE, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x00, //[ 59
0x00, 0x0C, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x38, 0xC0, 0x00, //\ 60
0x00, 0x02, 0x02, 0x02, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x7F, 0x00, 0x00, 0x00, //] 61
0x00, 0x00, 0x04, 0x02, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //^ 62
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, //_ 63
0x00, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //` 64
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x19, 0x24, 0x22, 0x22, 0x22, 0x3F, 0x20, // a 65
0x08, 0xF8, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x11, 0x20, 0x20, 0x11, 0x0E, 0x00, // b 66
0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x11, 0x20, 0x20, 0x20, 0x11, 0x00, // c 67
0x00, 0x00, 0x00, 0x80, 0x80, 0x88, 0xF8, 0x00, 0x00, 0x0E, 0x11, 0x20, 0x20, 0x10, 0x3F, 0x20, // d 68
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x22, 0x22, 0x22, 0x22, 0x13, 0x00, // e 69
0x00, 0x80, 0x80, 0xF0, 0x88, 0x88, 0x88, 0x18, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // f 70
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x6B, 0x94, 0x94, 0x94, 0x93, 0x60, 0x00, // g 71
0x08, 0xF8, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20, // h 72
0x00, 0x80, 0x98, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // i 73
0x00, 0x00, 0x00, 0x80, 0x98, 0x98, 0x00, 0x00, 0x00, 0xC0, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00, // j 74
0x08, 0xF8, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x20, 0x3F, 0x24, 0x02, 0x2D, 0x30, 0x20, 0x00, // k 75
0x00, 0x08, 0x08, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00, // l 76
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x3F, 0x20, 0x00, 0x3F, // m 77
0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20, // n 78
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x00, // o 79
0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xA1, 0x20, 0x20, 0x11, 0x0E, 0x00, // p 80
0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x0E, 0x11, 0x20, 0x20, 0xA0, 0xFF, 0x80, // q 81
0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x20, 0x20, 0x3F, 0x21, 0x20, 0x00, 0x01, 0x00, // r 82
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x33, 0x24, 0x24, 0x24, 0x24, 0x19, 0x00, // s 83
0x00, 0x80, 0x80, 0xE0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x20, 0x00, 0x00, // t 84
0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x1F, 0x20, 0x20, 0x20, 0x10, 0x3F, 0x20, // u 85
0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x01, 0x0E, 0x30, 0x08, 0x06, 0x01, 0x00, // v 86
0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x0F, 0x30, 0x0C, 0x03, 0x0C, 0x30, 0x0F, 0x00, // w 87
0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x20, 0x31, 0x2E, 0x0E, 0x31, 0x20, 0x00, // x 88
0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x81, 0x8E, 0x70, 0x18, 0x06, 0x01, 0x00, // y 89
0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x21, 0x30, 0x2C, 0x22, 0x21, 0x30, 0x00, // z 90
0x00, 0x00, 0x00, 0x00, 0x80, 0x7C, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x40, //{ 91
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, //| 92
0x00, 0x02, 0x02, 0x7C, 0x80, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x3F, 0x00, 0x00, 0x00, 0x00, //} 93
0x00, 0x06, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //~ 94
};
const uint8_t BMP1[] =
{
0x00, 0x03, 0x05, 0x09, 0x11, 0xFF, 0x11, 0x89, 0x05, 0xC3, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0xF8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x28, 0xFF, 0x11, 0xAA, 0x44, 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, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x38, 0x44, 0x82, 0x92,
0x92, 0x74, 0x01, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x44, 0xC7, 0x01, 0x7D,
0x7D, 0x7D, 0x7D, 0x01, 0x7D, 0x7D, 0x7D, 0x7D, 0x01, 0x7D, 0x7D, 0x7D, 0x7D, 0x01, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 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, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x40, 0x40,
0x40, 0x40, 0x40, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x00, 0x00,
0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0xDB, 0xDB,
0xDB, 0xDB, 0xDB, 0x00, 0x00, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0x00, 0x00, 0xD8, 0xD8, 0xD8, 0xD8,
0xD8, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x80,
0x80, 0x80, 0x80, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00,
0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06,
0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0xE6, 0x66, 0x20, 0x00, 0x06, 0x06, 0x86, 0x06,
0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x86, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00,
0x00, 0x86, 0x86, 0x86, 0x86, 0x86, 0x80, 0x80, 0x86, 0x86, 0x06, 0x86, 0x86, 0xC0, 0xC0, 0x86,
0x86, 0x86, 0x06, 0x06, 0xD0, 0x30, 0x76, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06,
0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06,
0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 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, 0x00, 0x00, 0x00, 0x60, 0x1C, 0x00, 0xFE, 0x00, 0x01,
0x02, 0x00, 0xC4, 0x18, 0x20, 0x02, 0x9E, 0x63, 0xB2, 0x0E, 0x00, 0xFF, 0x81, 0x81, 0xFF, 0x00,
0x00, 0x80, 0x40, 0x30, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x23, 0xEA, 0xAA, 0xBF, 0xAA,
0xEA, 0x03, 0x3F, 0x00, 0xFF, 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, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 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, 0x0E, 0x0C, 0x08, 0x00, 0x00, 0x01, 0x01, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x81, 0x80, 0x80, 0x81, 0x80,
0x81, 0x80, 0x80, 0x80, 0x80, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x01, 0x09, 0x0C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
0x00, 0x1E, 0x21, 0x40, 0x40, 0x50, 0x21, 0x5E, 0x00, 0x1E, 0x21, 0x40, 0x40, 0x50, 0x21, 0x5E,
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, 0xFF, 0xFF, 0xC1, 0xC1, 0xFF,
0xFF, 0xC1, 0xC1, 0xFF, 0xFF, 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, 0xFF, 0xFF, 0x80, 0xFC, 0xF3, 0xEF, 0xF3, 0xFC,
0x80, 0xFF, 0x80, 0xEE, 0xEE, 0xEE, 0xF5, 0xFB, 0xFF, 0x9C, 0xBE, 0xB6, 0xB6, 0x88, 0xFF, 0x00, /*"D:\DreamSpark\OLED\MP3_UI.bmp",0*/
};
static uint8_t _buffer[SSD1306_WIDTH * SSD1306_HEIGHT / 8]; // 定义屏幕缓冲区
static void i2c_start(void)
{
SDA_OUT();
GPIO_SET(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
GPIO_SET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
delay_us(4);
GPIO_RESET(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
delay_us(4);
GPIO_RESET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
} }
static void ssd1306_write_data(uint8_t data) static void i2c_stop(void)
{ {
uint8_t buffer[2]; SDA_OUT();
buffer[0] = SSD1306_CMD_SET_START_LINE; // Co = 0, D/C# = 1 GPIO_RESET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
buffer[1] = data; GPIO_RESET(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
ssd1306_oled->interface.start(ssd1306_oled); delay_us(4);
ssd1306_oled->interface.write_byte(ssd1306_oled, SSD1306_I2C_ADDRESS); GPIO_SET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
ssd1306_oled->interface.wait_ack(ssd1306_oled); GPIO_SET(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
ssd1306_oled->interface.write_byte(ssd1306_oled, buffer[0]); delay_us(4);
ssd1306_oled->interface.wait_ack(ssd1306_oled); }
ssd1306_oled->interface.write_byte(ssd1306_oled, buffer[1]);
ssd1306_oled->interface.wait_ack(ssd1306_oled); static BOOL i2c_wait_ack(void)
ssd1306_oled->interface.stop(ssd1306_oled); {
uint8_t count = 0;
SDA_IN();
GPIO_SET(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
delay_us(4);
GPIO_SET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
delay_us(4);
while (GPIO_READ(SSD1306_SDA_PORT, SSD1306_SDA_PIN))
{
count++;
if (count > 250)
{
i2c_stop();
return FALSE;
}
}
GPIO_RESET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
return TRUE;
}
static void i2c_ack(void)
{
GPIO_RESET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
SDA_OUT();
GPIO_RESET(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
delay_us(2);
GPIO_SET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
delay_us(2);
GPIO_RESET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
}
static void i2c_nack(void)
{
GPIO_RESET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
SDA_OUT();
GPIO_SET(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
delay_us(2);
GPIO_SET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
delay_us(2);
GPIO_RESET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
}
uint8_t i2c_read_byte(BOOL ack)
{
uint8_t i = 0, receive = 0;
SDA_IN();
for (i = 0; i < 8; i++)
{
GPIO_RESET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
delay_us(2);
GPIO_SET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
receive <<= 1;
if (GPIO_READ(SSD1306_SDA_PORT, SSD1306_SDA_PIN))
{
receive++;
}
delay_us(1);
}
if (!ack)
{
i2c_nack();
}
else
{
i2c_ack();
}
return receive;
}
void i2c_write_byte(uint8_t data)
{
uint8_t i = 0;
SDA_OUT();
GPIO_RESET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
for (i = 0; i < 8; i++)
{
// IIC_SDA=(txd&0x80)>>7;
if ((data & 0x80) >> 7)
GPIO_SET(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
else
GPIO_RESET(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
data <<= 1;
delay_us(2);
GPIO_SET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
delay_us(2);
GPIO_RESET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
delay_us(2);
}
}
static void i2c_write_command(uint8_t command)
{
uint8_t dd[2];
dd[0] = SSD1306_CMD_SET_LOW_COLUMN; // Co = 0, D/C# = 0
dd[1] = command;
i2c_start();
i2c_write_byte(SSD1306_I2C_ADDRESS);
i2c_wait_ack();
i2c_write_byte(dd[0]);
i2c_wait_ack();
i2c_write_byte(dd[1]);
i2c_wait_ack();
i2c_stop();
}
static void i2c_write_data(uint8_t data)
{
uint8_t dd[2];
dd[0] = SSD1306_CMD_SET_START_LINE; // Co = 0, D/C# = 1
dd[1] = data;
i2c_start();
i2c_write_byte(SSD1306_I2C_ADDRESS);
i2c_wait_ack();
i2c_write_byte(dd[0]);
i2c_wait_ack();
i2c_write_byte(dd[1]);
i2c_wait_ack();
}
/**
* @brief SSD1306 OLED显示屏上的显示位置
*
* SSD1306 OLED显示屏上的显示位置x和y坐标确定显示位置
*
* @param x 0-127
* @param y 0-7SSD1306 OLED的8个页面
*/
void set_position(uint8_t x, uint8_t y)
{
i2c_write_command(0xb0 + y);
i2c_write_command(((x & 0xf0) >> 4) | 0x10);
i2c_write_command((x & 0x0f) | 0x01);
} }
static void ssd1306_test(void) static void ssd1306_test(void)
{ {
ssd1306_f8x16_string(0, 0, "TEST");
ssd1306_f8x16_number(40, 0, -15.26, 2);
ssd1306_f6x8_string_number(0, 3, " @ADC1:", 'V', 24);
ssd1306_update_screen();
} }
void ssd1306_init(void) void ssd1306_init(void)
{ {
i2c_gpio_group_t gpios; i2c_write_command(SSD1306_CMD_DISPLAY_OFF); // display off
gpios.scl = gpio_create(SSD1306_SCK_PORT, SSD1306_SCK_PIN); i2c_write_command(SSD1306_CMD_MEMORY_MODE); // Set Memory Addressing Mode
gpios.sda = gpio_create(SSD1306_SDA_PORT, SSD1306_SDA_PIN); i2c_write_command(SSD1306_CMD_SET_HIGH_COLUMN); // 00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
i2c_write_command(SSD1306_CMD_COM_SCAN_DEC); // Set COM Output Scan Direction
i2c_write_command(SSD1306_CMD_SET_LOW_COLUMN); //---set low column address
i2c_write_command(SSD1306_CMD_SET_HIGH_COLUMN); //---set high column address
i2c_write_command(SSD1306_CMD_SET_START_LINE); //--set start line address
i2c_write_command(SSD1306_CMD_SET_CONTRAST); //--set contrast control register
i2c_write_command(0xff); // 亮度调节 0x00~0xff
i2c_write_command(0xa1); //--set segment re-map 0 to 127
i2c_write_command(SSD1306_CMD_NORMAL_DISPLAY); //--set normal display
i2c_write_command(SSD1306_CMD_SET_MULTIPLEX); //--set multiplex ratio(1 to 64)
i2c_write_command(0x3f); //
i2c_write_command(SSD1306_CMD_DISPLAY_ALL_ON_RESUME); // 0xa4,Output follows RAM content;0xa5,Output ignores RAM content
i2c_write_command(SSD1306_CMD_SET_DISPLAY_OFFSET); //-set display offset
i2c_write_command(SSD1306_CMD_SET_LOW_COLUMN); //-not offset
i2c_write_command(SSD1306_CMD_SET_DISPLAY_CLOCK_DIV); //--set display clock divide ratio/oscillator frequency
i2c_write_command(0xf0); //--set divide ratio
i2c_write_command(SSD1306_CMD_SET_PRECHARGE); //--set pre-charge period
i2c_write_command(SSD1306_CMD_PAGE_ADDR); //
i2c_write_command(SSD1306_CMD_SET_COM_PINS); //--set com pins hardware configuration
i2c_write_command(0x12);
i2c_write_command(SSD1306_CMD_SET_VCOM_DETECT); //--set vcomh
i2c_write_command(SSD1306_CMD_MEMORY_MODE); // 0x20,0.77xVcc
i2c_write_command(SSD1306_CMD_CHARGE_PUMP); //--set DC-DC enable
i2c_write_command(SSD1306_CMD_SET_DC_DC_ENABLE); //
i2c_write_command(SSD1306_CMD_DISPLAY_ON); //--turn on oled panel
ssd1306_fill(0);
ssd1306_oled = i2c_create(gpios, 0); // ssd1306_test();
ssd1306_write_command(SSD1306_CMD_DISPLAY_OFF);
ssd1306_write_command(SSD1306_CMD_SET_DISPLAY_CLOCK_DIV);
ssd1306_write_command(0x80);
ssd1306_write_command(SSD1306_CMD_SET_MULTIPLEX);
ssd1306_write_command(SSD1306_HEIGHT - 1);
ssd1306_write_command(SSD1306_CMD_SET_DISPLAY_OFFSET);
ssd1306_write_command(0x00);
ssd1306_write_command(SSD1306_CMD_SET_START_LINE | 0x00);
ssd1306_write_command(SSD1306_CMD_CHARGE_PUMP);
ssd1306_write_command(0x14);
ssd1306_write_command(SSD1306_CMD_MEMORY_MODE);
ssd1306_write_command(0x00);
ssd1306_write_command(SSD1306_CMD_SEG_REMAP | 0x01);
ssd1306_write_command(SSD1306_CMD_COM_SCAN_DEC);
ssd1306_write_command(SSD1306_CMD_SET_COM_PINS);
ssd1306_write_command(0x12);
ssd1306_write_command(SSD1306_CMD_SET_CONTRAST);
ssd1306_write_command(0xCF);
ssd1306_write_command(SSD1306_CMD_SET_PRECHARGE);
ssd1306_write_command(0xF1);
ssd1306_write_command(SSD1306_CMD_SET_VCOM_DETECT);
ssd1306_write_command(0x40);
ssd1306_write_command(SSD1306_CMD_DISPLAY_ALL_ON_RESUME);
ssd1306_write_command(SSD1306_CMD_NORMAL_DISPLAY);
ssd1306_write_command(SSD1306_CMD_DISPLAY_ON);
ssd1306_test();
} }
void ssd1306_display_on(void) void ssd1306_display_on(void)
{ {
ssd1306_write_command(SSD1306_CMD_DISPLAY_ON); i2c_write_command(SSD1306_CMD_CHARGE_PUMP); // 设置电荷泵
i2c_write_command(SSD1306_CMD_SET_DC_DC_ENABLE); // 开启电荷泵
i2c_write_command(SSD1306_CMD_DISPLAY_ON); // OLED唤醒
} }
void ssd1306_display_off(void) void ssd1306_display_off(void)
{ {
ssd1306_write_command(SSD1306_CMD_DISPLAY_OFF); i2c_write_command(SSD1306_CMD_CHARGE_PUMP); // 设置电荷泵
} i2c_write_command(SSD1306_CMD_SET_HIGH_COLUMN); // 关闭电荷泵
i2c_write_command(SSD1306_CMD_DISPLAY_OFF); // OLED休眠
void ssd1306_clear(void)
{
for (uint16_t i = 0; i < SSD1306_WIDTH * SSD1306_HEIGHT / 8; i++)
{
ssd1306_write_data(0x00);
}
}
/**
* @brief SSD1306屏幕上绘制一个像素点
*
* SSD1306 OLED显示屏上绘制一个像素点
*
* @param x x坐标
* @param y y坐标
* @param color
*/
void ssd1306_draw_pixel(uint8_t x, uint8_t y, uint8_t color)
{
if (x >= SSD1306_WIDTH || y >= SSD1306_HEIGHT)
{
return;
}
if (color)
{
buffer[x + (y / 8) * SSD1306_WIDTH] |= (1 << (y % 8));
}
else
{
buffer[x + (y / 8) * SSD1306_WIDTH] &= ~(1 << (y % 8));
}
} }
/** /**
@ -140,16 +528,264 @@ void ssd1306_update_screen(void)
{ {
for (uint8_t i = 0; i < SSD1306_HEIGHT / 8; i++) for (uint8_t i = 0; i < SSD1306_HEIGHT / 8; i++)
{ {
ssd1306_write_command(SSD1306_CMD_COLUMN_ADDR); i2c_write_command(0xb0 + i);
ssd1306_write_command(0); i2c_write_command(0x01);
ssd1306_write_command(SSD1306_WIDTH - 1); i2c_write_command(0x10);
ssd1306_write_command(SSD1306_CMD_PAGE_ADDR);
ssd1306_write_command(i);
ssd1306_write_command(i);
for (uint8_t j = 0; j < SSD1306_WIDTH; j++) for (uint8_t j = 0; j < SSD1306_WIDTH; j++)
{ {
ssd1306_write_data(buffer[j + i * SSD1306_WIDTH]); i2c_write_data(_buffer[j + i * SSD1306_WIDTH]);
} }
} }
} }
/**
* @brief
*
* SSD1306 OLED
*
* @param color 0x00 0xFF
*/
void ssd1306_fill(uint8_t color)
{
osel_memset(_buffer, color, ARRAY_LEN(_buffer));
ssd1306_update_screen();
}
/**
* @brief SSD1306显示屏
*
* SSD1306显示屏发送一系列命令来清空显示内容
*
* SSD1306显示屏有8个页面
*
* 1. 0xb0 + yy为当前页面索引
* 2. 0x01
* 3. 0x10
* 4. SSD1306显示屏的宽度
* 0x00
*/
void ssd1306_clear(void)
{
osel_memset(_buffer, 0, ARRAY_LEN(_buffer));
ssd1306_update_screen();
}
/**
* @brief SSD1306 OLED显示屏上显示字符串
*
* SSD1306 OLED显示屏上以6x8像素的字体显示给定的字符串
*
* @param x x坐标
* @param y y坐标
* @param str
*/
void ssd1306_f6x8_string(uint8_t x, uint8_t y, const uint8_t *ch)
{
uint8_t c = 0, i = 0, j = 0;
while (ch[j] != '\0')
{
c = ch[j] - 32;
if (x > 126)
{
x = 0;
y++;
}
for (i = 0; i < 6; i++)
_buffer[(y * 128) + x + i] = F6x8[c][i];
x += 6;
j++;
}
}
/**
* @brief SSD1306 OLED屏幕上显示字符串和数字
*
* SSD1306 OLED屏幕上显示字符串和数字
*
*
* @param x x坐标
* @param y y坐标
* @param ch
* @param unit 'm'
* @param num
*/
void ssd1306_f6x8_string_number(uint8_t x, uint8_t y, const uint8_t *ch, uint8_t unit, float32 num)
{
uint8_t c = 0, i = 0, j = 0;
int8_t a, number[7] = {0, 0, 0, -2, 0, 0, 0};
uint32_t d;
while (ch[j] != '\0')
{
c = ch[j] - 32;
if (x > 126)
{
x = 0;
y++;
}
for (i = 0; i < 6; i++)
_buffer[(y * 128) + x + i] = F6x8[c][i];
x += 6;
j++;
}
d = 1000 * num;
for (a = 0; a < 3; a++)
{
number[6 - a] = d % 10;
d = d / 10;
}
for (a = 4; a < 7; a++)
{
number[6 - a] = d % 10;
d = d / 10;
}
if (num >= 100)
{
a = 0;
}
else if (num >= 10)
{
a = 1;
}
else if (num >= 0)
{
a = 2;
}
for (; a < 7; a++)
{
c = number[a] + 16;
if (x > 126)
{
x = 0;
y++;
}
for (i = 0; i < 6; i++)
_buffer[(y * 128) + x + i] = F6x8[c][i];
x += 6;
j++;
}
for (int h = 0; h < 7; h++)
{
c = unit - 32;
for (i = 0; i < 6; i++)
_buffer[(y * 128) + x + i] = F6x8[c][i];
}
}
/**
* @brief SSD1306 OLED显示屏上显示8x16大小的字符串
*
* 使8x16字体在SSD1306 OLED显示屏上显示指定的字符串x和y参数指定
*
* @param x x坐标
* @param y y坐标
* @param str
*/
void ssd1306_f8x16_string(uint8_t x, uint8_t y, const uint8_t *ch)
{
uint8_t c = 0, i = 0, j = 0;
while (ch[j] != '\0')
{
c = ch[j] - 32;
if (x > 120)
{
x = 0;
y++;
}
for (i = 0; i < 8; i++)
_buffer[(y * 128) + x + i] = F8X16[c * 16 + i];
for (i = 0; i < 8; i++)
_buffer[((y + 1) * 128) + x + i] = F8X16[c * 16 + i + 8];
x += 8;
j++;
}
}
/**
* @brief SSD1306 OLED显示屏上以8x16像素字体显示浮点数
*
* (x, y) 使8x16像素大小的字体显示浮点数 num dot_num
*
* @param x x坐标
* @param y y坐标
* @param num
* @param dot_num
*/
void ssd1306_f8x16_number(uint8_t x, uint8_t y, float32 num, uint8_t dot_num)
{
uint8_t ch[9] = {'\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0'};
uint8_t c = 0, i = 0, j = 0;
if (num < 0)
{
ch[i++] = '-';
num = -num;
}
if (num > 32000)
return;
c = 8 - i;
if (num > 10000)
{
ch[i++] = num / 10000 + 48;
ch[i++] = (uint8_t)(num) % 10000 / 1000 + 48;
ch[i++] = (uint8_t)(num) % 1000 / 100 + 48;
ch[i++] = (uint8_t)(num) % 100 / 10 + 48;
ch[i++] = (uint8_t)(num) % 10 + 48;
}
else if (num > 1000)
{
ch[i++] = (uint8_t)(num) % 10000 / 1000 + 48;
ch[i++] = (uint8_t)(num) % 1000 / 100 + 48;
ch[i++] = (uint8_t)(num) % 100 / 10 + 48;
ch[i++] = (uint8_t)(num) % 10 + 48;
}
else if (num > 100)
{
ch[i++] = (uint8_t)(num) % 1000 / 100 + 48;
ch[i++] = (uint8_t)(num) % 100 / 10 + 48;
ch[i++] = (uint8_t)(num) % 10 + 48;
}
else if (num > 10)
{
ch[i++] = (uint8_t)(num) % 100 / 10 + 48;
ch[i++] = (uint8_t)(num) % 10 + 48;
}
else if (num >= 0)
{
ch[i++] = (uint8_t)(num) % 10 + 48;
}
if (dot_num > 0 && i < 7)
{
ch[i++] = '.';
num = num - (uint8_t)num;
if (dot_num == 1 && i < 8)
{
num = num * 10;
ch[i++] = (uint8_t)(num + 0.5) % 10 + 48;
}
if (dot_num >= 2 && i < 8)
{
num = num * 100;
ch[i++] = (uint8_t)num % 100 / 10 + 48;
if (i < 8)
ch[i++] = (uint8_t)(num + 0.5) % 10 + 48;
}
}
while (ch[j] != '\0')
{
c = ch[j] - 32;
if (x > 120)
{
x = 0;
y++;
}
for (i = 0; i < 8; i++)
_buffer[(y * 128) + x + i] = F8X16[c * 16 + i];
for (i = 0; i < 8; i++)
_buffer[((y + 1) * 128) + x + i] = F8X16[c * 16 + i + 8];
x += 8;
j++;
}
}

View File

@ -39,13 +39,28 @@
#define SSD1306_CMD_COM_SCAN_DEC 0xC8 #define SSD1306_CMD_COM_SCAN_DEC 0xC8
#define SSD1306_CMD_SEG_REMAP 0xA0 #define SSD1306_CMD_SEG_REMAP 0xA0
#define SSD1306_CMD_CHARGE_PUMP 0x8D #define SSD1306_CMD_CHARGE_PUMP 0x8D
#define SSD1306_CMD_SET_DC_DC_ENABLE 0x14
#define SDA_OUT() \
{ \
GPIO_SET_OUTPUT(SSD1306_SDA_PORT, SSD1306_SDA_PIN); \
}
#define SDA_IN() \
{ \
GPIO_SET_INPUT(SSD1306_SDA_PORT, SSD1306_SDA_PIN); \
}
// 函数声明 // 函数声明
void ssd1306_init(void); void ssd1306_init(void);
void ssd1306_display_on(void); void ssd1306_display_on(void);
void ssd1306_display_off(void); void ssd1306_display_off(void);
void ssd1306_clear(void);
void ssd1306_draw_pixel(uint8_t x, uint8_t y, uint8_t color);
void ssd1306_update_screen(void); void ssd1306_update_screen(void);
void ssd1306_fill(uint8_t color);
void ssd1306_clear(void);
void ssd1306_f6x8_string(uint8_t x, uint8_t y, const uint8_t *ch);
void ssd1306_f6x8_string_number(uint8_t x, uint8_t y, const uint8_t *ch, uint8_t unit, float32 num);
void ssd1306_f8x16_string(uint8_t x, uint8_t y, const uint8_t *ch);
void ssd1306_f8x16_number(uint8_t x, uint8_t y, float32 num, uint8_t dot_num);
#endif // __SSD1306_OLED_H #endif // __SSD1306_OLED_H

View File

@ -17,13 +17,14 @@ Mcu.Package=LQFP48
Mcu.Pin0=PC13-TAMPER-RTC Mcu.Pin0=PC13-TAMPER-RTC
Mcu.Pin1=PD0-OSC_IN Mcu.Pin1=PD0-OSC_IN
Mcu.Pin2=PD1-OSC_OUT Mcu.Pin2=PD1-OSC_OUT
Mcu.Pin3=PB12 Mcu.Pin3=PA1
Mcu.Pin4=PB13 Mcu.Pin4=PB12
Mcu.Pin5=PA13 Mcu.Pin5=PB13
Mcu.Pin6=PA14 Mcu.Pin6=PA13
Mcu.Pin7=VP_SYS_VS_Systick Mcu.Pin7=PA14
Mcu.Pin8=VP_TIM2_VS_ClockSourceINT Mcu.Pin8=VP_SYS_VS_Systick
Mcu.PinsNb=9 Mcu.Pin9=VP_TIM2_VS_ClockSourceINT
Mcu.PinsNb=10
Mcu.ThirdParty0=RealThread.RT-Thread.3.1.5 Mcu.ThirdParty0=RealThread.RT-Thread.3.1.5
Mcu.ThirdPartyNb=1 Mcu.ThirdPartyNb=1
Mcu.UserConstants= Mcu.UserConstants=
@ -42,15 +43,26 @@ NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false
NVIC.TIM2_IRQn=true\:15\:0\:true\:false\:true\:true\:true\:true NVIC.TIM2_IRQn=true\:15\:0\:true\:false\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA1.GPIOParameters=GPIO_Label
PA1.GPIO_Label=PWMA
PA1.Signal=GPIO_Output
PA13.Mode=Serial_Wire PA13.Mode=Serial_Wire
PA13.Signal=SYS_JTMS-SWDIO PA13.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK PA14.Signal=SYS_JTCK-SWCLK
PB12.GPIOParameters=GPIO_Label PB12.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
PB12.GPIO_Label=OLED_SDA PB12.GPIO_Label=OLED_SDA
PB12.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP
PB12.GPIO_PuPd=GPIO_NOPULL
PB12.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PB12.PinState=GPIO_PIN_RESET
PB12.Signal=GPIO_Output PB12.Signal=GPIO_Output
PB13.GPIOParameters=GPIO_Label PB13.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
PB13.GPIO_Label=OLDE_SCK PB13.GPIO_Label=OLDE_SCK
PB13.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP
PB13.GPIO_PuPd=GPIO_NOPULL
PB13.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PB13.PinState=GPIO_PIN_RESET
PB13.Signal=GPIO_Output PB13.Signal=GPIO_Output
PC13-TAMPER-RTC.GPIOParameters=GPIO_Label PC13-TAMPER-RTC.GPIOParameters=GPIO_Label
PC13-TAMPER-RTC.GPIO_Label=LED_BLUE PC13-TAMPER-RTC.GPIO_Label=LED_BLUE
@ -90,7 +102,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath= ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_TIM4_Init-TIM4-false-LL-true,3-MX_TIM2_Init-TIM2-false-LL-true ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_TIM2_Init-TIM2-false-LL-true
RCC.ADCFreqValue=36000000 RCC.ADCFreqValue=36000000
RCC.AHBFreq_Value=72000000 RCC.AHBFreq_Value=72000000
RCC.APB1CLKDivider=RCC_HCLK_DIV2 RCC.APB1CLKDivider=RCC_HCLK_DIV2