This commit is contained in:
许晟昊 2024-12-18 16:20:46 +08:00
parent fbe9e356f7
commit 1b2512b4c4
9 changed files with 688 additions and 1266 deletions

View File

@ -148,7 +148,24 @@
<Name></Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>146</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134224336</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\User\board\ssd096_oled.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\motor\../User/board/ssd096_oled.c\146</Expression>
</Bp>
</Breakpoint>
<WatchWindow1>
<Ww>
<count>0</count>
@ -770,6 +787,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\board\ssd096_oled.c</PathWithFileName>
<FilenameWithoutPath>ssd096_oled.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -780,7 +809,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>42</FileNumber>
<FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -792,7 +821,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>43</FileNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -804,7 +833,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>44</FileNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -816,7 +845,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>45</FileNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -828,7 +857,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>46</FileNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@ -1253,6 +1253,11 @@
<FileType>1</FileType>
<FilePath>..\User\board\board.c</FilePath>
</File>
<File>
<FileName>ssd096_oled.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\board\ssd096_oled.c</FilePath>
</File>
</Files>
</Group>
<Group>

View File

@ -1,31 +1,31 @@
:020000040800F2
:10000000802C002005010008950D0008AB010008B8
:10001000910D00087101000879130008000000002C
:10002000000000000000000000000000E5100008D3
:10003000A901000800000000E50F0008E710000813
:10000000802C002005010008A50D0008AB010008A8
:10001000A10D00087101000889130008000000000C
:10002000000000000000000000000000F5100008C3
:10003000A901000800000000F50F0008F7100008F3
:100040001F0100081F0100081F0100081F01000810
:100050001F0100081F0100081F0100081F01000800
:100060001F0100081F0100081F0100081F010008F0
:100070001F0100081F0100088901000899010008FC
:100080001F0100081F0100081F0100081F010008D0
:100090001F0100081F0100081F0100081F010008C0
:1000A0001F010008DD1100081F0100081F010008E2
:1000B0001F010008AD1200081F0100081F01000801
:1000A0001F010008ED1100081F0100081F010008D2
:1000B0001F010008BD1200081F0100081F010008F1
:1000C0001F0100081F0100081F0100081F01000890
:1000D0001F010008691300081F0100081F01000824
:1000D0001F010008791300081F0100081F01000814
:1000E0001F0100081F0100081F010008DFF810D0E1
:1000F00000F02CF800480047C5150008AFF3008059
:1000F00000F02CF800480047CD160008AFF3008050
:10010000802C00200648804706480047FEE7FEE7AF
:10011000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B7
:10012000D9110008ED000008D2B201E000F8012B5F
:10012000E9110008ED000008D2B201E000F8012B4F
:10013000491EFBD270470022F6E710B513460A4667
:1001400004461946FFF7F0FF204610BD064C074D48
:1001500006E0E06840F0010394E807009847103497
:10016000AC42F6D3FFF7C6FF141F0008341F000887
:10016000AC42F6D3FFF7C6FF28210008482100085B
:1001700000BFFEE7024600BF1AB901E000BF00BFA2
:10018000FCE700BF0120704710B50248006801F08D
:1001900098FB10BD5C00002010B50248006801F01B
:1001A00090FB10BD5C000020704700BFFEE7000020
:10019000A2FC10BD5C00002010B50248006801F010
:1001A0009AFC10BD5C000020704700BFFEE7000015
:1001B00008B50549C9690143034AD1611146C969B6
:1001C0000140009100BF08BD0010024008B505497C
:1001D00089690143034A916111468969014000918F
@ -34,29 +34,29 @@
:100200000010024008B5054989690143034A91611C
:10021000114689690140009100BF08BD00100240ED
:1002200010B54A1E044B9A5C825822F001034A1E04
:10023000014CA25C835010BDB81E000810B54A1EC8
:10023000014CA25C835010BDCC20000810B54A1EB2
:10024000044B9A5C825842F001034A1E014CA25CA6
:10025000835010BDB81E000810B54A1E044B9A5CAE
:10025000835010BDCC20000810B54A1E044B9A5C98
:10026000825842F002034A1E014CA25C835010BD2A
:10027000B81E000830B54B1E054CE35CC35823F490
:10027000CC20000830B54B1E054CE35CC35823F47A
:10028000405313434C1E024D2C5D035130BD000002
:10029000761E000830B54B1E064CE35C03445B68D9
:100290008A20000830B54B1E064CE35C03445B68C3
:1002A0006FF30F0313434C1E024D2C5D0444636037
:1002B00030BD0000B81E000830B54B1E054CE35C95
:1002B00030BD0000CC20000830B54B1E054CE35C7F
:1002C000C35844F21004A34313434C1E014D2C5D4C
:1002D000035130BD761E000810B54B1E024CE35C86
:1002E0000344DA6010BD0000B81E000830B54B1E94
:1002D000035130BD8A20000810B54B1E024CE35C70
:1002E0000344DA6010BD0000CC20000830B54B1E7E
:1002F000054CE35CC35823F0800313434C1E024DAE
:100300002C5D035130BD0000761E000830B54B1E39
:100300002C5D035130BD00008A20000830B54B1E23
:10031000054CE35CC35823F4406313434C1E024D69
:100320002C5D035130BD0000761E000830B54B1E19
:100320002C5D035130BD00008A20000830B54B1E03
:10033000054CE35CC35823F0200313434C1E024DCD
:100340002C5D035130BD0000761E000810B54B1E19
:10035000024CE35C03449A6010BD0000B81E000824
:100340002C5D035130BD00008A20000810B54B1E03
:10035000024CE35C03449A6010BD0000CC2000080E
:1003600030B54B1E054CE35CC35823F040031343E8
:100370004C1E024D2C5D035130BD0000761E00085E
:100370004C1E024D2C5D035130BD00008A20000848
:1003800030B54B1E054CE35CC35823F44073134354
:100390004C1E024D2C5D035130BD0000761E00083E
:100390004C1E024D2C5D035130BD00008A20000828
:1003A0002DE9F04102460B461868C0F30F2595FA77
:1003B000A5F0B0FA80F480E00120A0402840002899
:1003C0007AD0082C04D240F2011000FA04F106E0C1
@ -76,435 +76,468 @@
:1004A000A1FCBCFA8CFC4FEA8C0C00FA0CFC47EA6D
:1004B0000C07376000BF00BF641C25FA04F0002859
:1004C0007FF47AAFBDE8F081C1F30F22426170473B
:1004D00002480068401C0149086070472000002065
:1004E0004FF47A71B0FBF1F2521E4FF0E0235A61E3
:1004F00000229A6105221A6100BF704710B50446B8
:1005000000F0A6FD2060206800F06EFD606060686D
:1005100000F07AFDA060606800F088FDE06010BD2A
:10052000014908607047000000000020016821F0C8
:10053000800101607047816821F08001816070470F
:10054000016841F0010101607047C16841F001019B
:10055000C160704710B5024613681C48824208D03B
:10056000B2F1804F05D01A48824202D01948824227
:1005700004D123F070004C6840EA0403134882421F
:1005800008D0B2F1804F05D01148824202D0114804
:10059000824204D123F44070CC6840EA0403136023
:1005A0008868D06200BF0888906200BF0748824216
:1005B00003D10869106300BF00BF00BF506940F05D
:1005C0000100506100BF002010BD0000002C014060
:1005D000000400400008004001460869C0F34000E4
:1005E000704701460869C0F38000704701460869FA
:1005F000C0F3C000704701460869C0F3001070479F
:100600000146086900F0010070470146C868C0F360
:10061000400070470146C868C0F38000704701463B
:10062000C868C0F3C00070470146C868C0F3001036
:1006300070470146C86800F00100704770B5024677
:10064000012901D1002416E0042901D1012412E07E
:10065000102901D102240EE0402901D103240AE02F
:10066000B1F5807F01D1042405E0B1F5806F01D19F
:10067000052400E006242346064CE55C02F118043C
:1006800028190468044DEE5C0425B5402C43046031
:1006900070BD0000531E00085A1E000870B50246C7
:1006A000012901D1002416E0042901D1012412E01E
:1006B000102901D102240EE0402901D103240AE0CF
:1006C000B1F5807F01D1042405E0B1F5806F01D13F
:1006D000052400E006242346064CE55C02F11804DC
:1006E00028190468044DEE5C0825B5402C430460CD
:1006F00070BD0000531E00085A1E00082DE9F0418D
:1007000006460C4615460127012C08D0102C0CD0AB
:10071000B4F5807F0FD0B4F5805F18D111E0294681
:10072000304600F079FB074612E02946304600F0DB
:10073000AFFB07460CE02946304600F0EBFB0746CE
:1007400006E02946304600F021FC074600E000BFE5
:1007500000BF3846BDE8F08181637047826844F28B
:1007600007039A430A4382607047426822F070028E
:100770000A434260704708B50168009100BF4168B4
:10078000009100BF08BD6FF040010160704700009C
:100790002DE9FF4104460D4601270026204600F0C2
:1007A00055F8002833D1E968686808432969084387
:1007B000E16841F20C6291430843E060A868216956
:1007C00021F440510143216100BF6869616921F44E
:1007D00040710143616100BF6846FFF78FFE0E481C
:1007E000844201D1039E08E00C48844201D1029E5C
:1007F00003E00B48844200D1029E46B1286830B124
:100800000027314620462A6800F025F800BF384608
:1008100004B0BDE8F0810000003801400044004011
:100820000048004001460868C0F340007047014698
:100830000868C0F38000704701460868C0F3C00034
:10084000704701460868C0F3801070470146C868C9
:10085000C0F34030704770B501EBC10303EB0113E7
:100860009400B3FBF4F301EBC10404EB0114950015
:10087000B4FBF5F46425B4FBF5F404EBC40505EB17
:100880000414A3EB8403322404EB03136424B3FBAA
:10089000F4F303F0F00301EBC10404EB0114950041
:1008A000B4FBF5F46425B4FBF5F403EB041401EB9D
:1008B000C10303EB01139500B3FBF5F301EBC10595
:1008C00005EB01159600B5FBF6F56426B5FBF6F5CC
:1008D00005EBC50606EB0515A3EB8503322505EBF5
:1008E00003136425B3FBF5F303F00F0323449BB21A
:1008F000836070BD38B50120144949690143134A2A
:100900005161114649690140009100BF00BF00F0EC
:100910004FFD05460022114600F03EFA04462146EE
:100920000E2000F055FD0E2000F028FD00F040FDE7
:1009300005460022114600F02FFA044621460F20FA
:1009400000F046FD0F2000F019FD38BD00100240F8
:1009500000B585B014216846FFF7EDFB1020FFF7C6
:1009600035FC2020FFF732FC0420FFF72FFC082085
:10097000FFF72CFC1C491D48FFF7A6FD1C491D482C
:10098000FFF7A2FD1848009001200190022002907C
:100990000020039069461548FFF702FD16480090B5
:1009A0000020019069461148FFF7FAFC13480090B7
:1009B0000020019069461248FFF7F2FC11480090B0
:1009C0000020019069460B48FFF7EAFC08480090B8
:1009D0000120019003200290002003906946054801
:1009E000FFF7DEFC05B000BD200020040010014030
:1009F00030003004000C0140C000C004FDFD99042B
:100A000000080140FFFFCF0430B585B014216846CF
:100A1000FFF791FB4FF40060FFF7E6FB00F0D0FC1E
:100A200005460022032100F0D7F90446214619208B
:100A300000F0E2FC192000F0AEFC41F61F40ADF8DA
:100A40000000002001906320029000200390049099
:100A500069460948FFF77EFD0748FFF767FD00215B
:100A60000548FFF77BFE00210348FFF77EFE0248A2
:100A7000FFF761FD05B030BD002C014000B593B01B
:100A800014210EA8FFF757FB202106A8FFF753FB00
:100A9000142101A8FFF74FFB0120FFF789FB00207D
:100AA000ADF838000F9041F61F40109000201190D3
:100AB0000EA94FF08040FFF74DFD00BF4FF0804082
:100AC000006840F080004FF08041086000BF0021C6
:100AD0004FF08040FFF742FE10218806FFF7DEFD51
:100AE00070200690002007900890099002200A903C
:100AF00006AA10214007FFF701FE10218806FFF724
:100B00009DFD00214FF08040FFF72FFE4FF0804009
:100B1000FFF711FD0420FFF767FB40F20220019070
:100B200009200290022003900020049001A90248AD
:100B3000FFF736FC13B000BD0008014030B585B0AA
:100B400014216846FFF7F7FA0220FFF731FB00F0A7
:100B500037FC05460022032100F03EF904462146F9
:100B60001D2000F049FC1D2000F015FC41F61F403F
:100B7000ADF8000000200190632002900020039057
:100B800069460948FFF7E6FC0748FFF7CFFC00215C
:100B90000548FFF7E3FD00210348FFF7E6FD0248A3
:100BA000FFF7C9FC05B030BD000400402DE9F0415D
:100BB0008CB01C2105A8FFF7BEFA14216846FFF788
:100BC000BAFA4FF48040FFF71DFB0420FFF71AFB31
:100BD00068480090092001900320029000200390B3
:100BE00069466548FFF7DCFB6448009004200190EB
:100BF00069466148FFF7D4FB002205216048FFF7F2
:100C00005BFB002205215E48FFF734FB0022052133
:100C10005B48FFF78BFB002205215948FFF7A0FB3B
:100C2000802205215648FFF761FB00220521544828
:100C3000FFF7A6FB002205215148FFF767FB1022B2
:100C400004214F48FFF738FB002204214C48FFF7EE
:100C500011FB002204214A48FFF768FB002204210F
:100C60004748FFF77DFB802204214548FFF73EFB04
:100C7000002204214248FFF783FB00220421404860
:100C8000FFF744FB25213F4B1B68C3F302200524DB
:100C900000250346C3F1070CBCF1040F02D94FF045
:100CA000040C01E0C3F1070C674603F1040CBCF12E
:100CB000070F02D24FF0000C01E0A3F1030C6646CF
:100CC0004FF0010C0CFA07FCACF1010C0CEA040C1F
:100CD0000CFA06FC4FF0010808FA06F8A8F1010822
:100CE00008EA05084CEA080200BF002904DB1007E7
:100CF000030E2548435407E01007040E21480C302A
:100D000001F00F031B1FC45400BF2520002809DB7E
:100D100000F01F02012191404209920002F1E022FD
:100D2000C2F8001100BF4FF4E1300590002006909A
:100D3000079008900C20099000200A900B9005A9BC
:100D40001248FFF725FD00BF1048006920F49040CD
:100D50000E4908610846406920F02A00486100BF3A
:100D600000BF0846C06840F40050C86000BF0CB027
:100D7000BDE8F08102000204000801400400040400
:100D8000000002400CED00E000E400E0003801400B
:100D900000BFFEE700BFFEE7F0B503460C4603F0D8
:100DA0000701C1F10700042801D9042001E0C1F1C5
:100DB00007000646081D072801D2002000E0C81ED3
:100DC00005460120B040401E2040A8400127AF400A
:100DD0007F1E17403843F0BDF0B503460C4603F0C4
:100DE0000701C1F10700042801D9042001E0C1F185
:100DF00007000646081D072801D2002000E0C81E93
:100E000005460120B040401E2040A8400127AF40C9
:100E10007F1E17403843F0BD70B50246106A20F0BF
:100E200001001062136A5568946924F0030424F0E9
:100E300070000E6840EA060423F002000E6940EAE2
:100E4000060323F001004E6840EA06030F48824281
:100E500013D123F008004E6940EA860323F0040012
:100E60008E6840EA860325F480708E6940EA0605A4
:100E700025F40070CE6940EA460555609461C86863
:100E8000506300BF1362002070BD0000002C0140C1
:100E90002DE9F04104460D46206A20F01000206242
:100EA000266AD4F80480A76927F4407727F4E04045
:100EB000296840EA012726F02000296940EA011646
:100EC00026F01000696840EA01161148844213D1E7
:100ED00026F08000696940EA811626F04000A96882
:100EE00040EA811628F48060A96940EA810828F464
:100EF0000060E96940EAC108C4F80480A76120469F
:100F0000E968FFF729FC26620020BDE8F0810000B7
:100F1000002C014070B50246106A20F48070106207
:100F2000136A5568D46924F0030424F070000E6835
:100F300040EA060423F400700E6940EA062323F415
:100F400080704E6840EA06230F48824213D123F492
:100F500000604E6940EA862323F480608E6840EA90
:100F6000862325F480508E6940EA061525F400504A
:100F7000CE6940EA46155560D461C868D06300BFA9
:100F80001362002070BD0000002C014070B50246C5
:100F9000106A20F480501062146A5568D36923F4F3
:100FA000407323F4E0400E6840EA062324F4005026
:100FB0000E6940EA063424F480504E6840EA063454
:100FC0000748824204D125F480408E6940EA8615A4
:100FD0005560D361C868106400BF1462002070BD02
:100FE000002C014070470000014600BF04484068E3
:100FF00000F0F0000009034A125C21FA02F0704789
:1010000000100240A01E0008014600BF05484068CD
:1010100000F4E060044A02EB1020027821FA02F0AA
:101020007047000000100240B01E0008014600BFDB
:101030000548406800F46050044A02EBD020027872
:1010400021FA02F07047000000100240B01E0008B4
:1010500010B5002400BF0B48406800F00C0020B120
:10106000042804D0082808D103E0074C07E0064C08
:1010700005E000F00BF8044601E0034C00BF00BFA0
:10108000204610BD0010024000127A00002100220C
:1010900000BF1148406800F4803002461AB1B2F532
:1010A000803F0CD101E00D490BE000BF0A484068C9
:1010B000C0F34040401C0A4BB3FBF0F101E007498C
:1010C00000BF00BF00BF0448406800F47010022356
:1010D00003EB9040484370470010024000093D0078
:1010E00000127A007047704710B50220374909682E
:1010F00021F007010143354A116000BF00BF00BF66
:101100003248006800F007000228F8D100BF3048DC
:10111000006840F480302E49086000BF00BF00BF67
:101120002B480068C0F340400028F8D04FF48030CE
:101130004FF4E011264A526822F47C1200F4403346
:101140000B431A43224B5A6000BF00BF1846006889
:1011500040F080701946086000BF00BF00BF1C4807
:101160000068C0F340600028F8D0002018494968A2
:1011700021F0F0010143164A516000BF10151146DD
:10118000496821F4E0610143516000BF002011462D
:10119000496821F460510143516000BF02201146AB
:1011A000496821F003010143516000BF00BF00BF47
:1011B0000748406800F00C000828F8D10548FFF700
:1011C0008FF90448FFF7ACF910BD00000020024081
:1011D0000010024000A24A047047000010B53148D8
:1011E000FFF70EFA01285CD100BF2E48FFF7F4F993
:1011F00001280AD12B48FFF708FA012805D100BFC2
:10120000001F2849086100BF00BF2648FFF7E9F921
:1012100001280AD12348FFF7FDF9012805D100BFB5
:10122000801F2049086100BF00BF1E48FFF7DEF99C
:1012300001280BD11B48FFF7F2F9012806D100BFA6
:101240006FF008001749086100BF00BF1548FFF79D
:10125000D2F901280BD11348FFF7E6F9012806D18E
:1012600000BF6FF010000F49086100BF00BF0D48BC
:10127000FFF7C6F901280AD10A48FFF7DAF9012871
:1012800005D100BFC01E0749086100BF00BF00BFF5
:10129000FFF71EF900BF04480068401C02490860BF
:1012A00000BF10BD002C01405800002010B52D4893
:1012B000FFF7A6F9012853D100BF2A48FFF78CF9A0
:1012C00001280AD12748FFF7A0F9012805D100BF5E
:1012D000001F2449086100BF00BF2248FFF781F9C1
:1012E00001280AD11F48FFF795F9012805D100BF51
:1012F000801F1C49086100BF00BF1A48FFF776F93C
:1013000001280BD11748FFF78AF9012806D100BF41
:101310006FF008001349086100BF00BF1148FFF7D4
:101320006AF901280BD10F48FFF77EF9012806D191
:1013300000BF6FF010000B49086100BF00BF0948F3
:10134000FFF75EF901280AD10648FFF772F9012874
:1013500005D100BFC01E0349086100BF00BF00BF28
:1013600010BD00000004004010B50248006800F005
:10137000D3FB10BD5C00002000BFFEE7002809DBA6
:1013800000F01F02012191404209920002F1E02287
:10139000C2F800117047002809DB00F01F0201218C
:1013A00091404209920002F1E022C2F80011704718
:1013B00002480068C0F30220704700000CED00E016
:1004D000C1F30F2242617047C1F30F2202617047DE
:1004E00002480068401C0149086070472000002055
:1004F0004FF47A71B0FBF1F2521E4FF0E0235A61D3
:1005000000229A6105221A6100BF704710B50446A7
:1005100000F0A6FD2060206800F06EFD606060685D
:1005200000F07AFDA060606800F088FDE06010BD1A
:10053000014908607047000000000020016821F0B8
:10054000800101607047816821F0800181607047FF
:10055000016841F0010101607047C16841F001018B
:10056000C160704710B5024613681C48824208D02B
:10057000B2F1804F05D01A48824202D01948824217
:1005800004D123F070004C6840EA0403134882420F
:1005900008D0B2F1804F05D01148824202D01148F4
:1005A000824204D123F44070CC6840EA0403136013
:1005B0008868D06200BF0888906200BF0748824206
:1005C00003D10869106300BF00BF00BF506940F04D
:1005D0000100506100BF002010BD0000002C014050
:1005E000000400400008004001460869C0F34000D4
:1005F000704701460869C0F38000704701460869EA
:10060000C0F3C000704701460869C0F3001070478E
:100610000146086900F0010070470146C868C0F350
:10062000400070470146C868C0F38000704701462B
:10063000C868C0F3C00070470146C868C0F3001026
:1006400070470146C86800F00100704770B5024667
:10065000012901D1002416E0042901D1012412E06E
:10066000102901D102240EE0402901D103240AE01F
:10067000B1F5807F01D1042405E0B1F5806F01D18F
:10068000052400E006242346064CE55C02F118042C
:1006900028190468044DEE5C0425B5402C43046021
:1006A00070BD0000672000086E20000870B502468B
:1006B000012901D1002416E0042901D1012412E00E
:1006C000102901D102240EE0402901D103240AE0BF
:1006D000B1F5807F01D1042405E0B1F5806F01D12F
:1006E000052400E006242346064CE55C02F11804CC
:1006F00028190468044DEE5C0825B5402C430460BD
:1007000070BD0000672000086E2000082DE9F04150
:1007100006460C4615460127012C08D0102C0CD09B
:10072000B4F5807F0FD0B4F5805F18D111E0294671
:10073000304600F079FB074612E02946304600F0CB
:10074000AFFB07460CE02946304600F0EBFB0746BE
:1007500006E02946304600F021FC074600E000BFD5
:1007600000BF3846BDE8F08181637047826844F27B
:1007700007039A430A4382607047426822F070027E
:100780000A434260704708B50168009100BF4168A4
:10079000009100BF08BD6FF040010160704700008C
:1007A0002DE9FF4104460D4601270026204600F0B2
:1007B00055F8002833D1E968686808432969084377
:1007C000E16841F20C6291430843E060A868216946
:1007D00021F440510143216100BF6869616921F43E
:1007E00040710143616100BF6846FFF78FFE0E480C
:1007F000844201D1039E08E00C48844201D1029E4C
:1008000003E00B48844200D1029E46B1286830B113
:100810000027314620462A6800F025F800BF3846F8
:1008200004B0BDE8F0810000003801400044004001
:100830000048004001460868C0F340007047014688
:100840000868C0F38000704701460868C0F3C00024
:10085000704701460868C0F3801070470146C868B9
:10086000C0F34030704770B501EBC10303EB0113D7
:100870009400B3FBF4F301EBC10404EB0114950005
:10088000B4FBF5F46425B4FBF5F404EBC40505EB07
:100890000414A3EB8403322404EB03136424B3FB9A
:1008A000F4F303F0F00301EBC10404EB0114950031
:1008B000B4FBF5F46425B4FBF5F403EB041401EB8D
:1008C000C10303EB01139500B3FBF5F301EBC10585
:1008D00005EB01159600B5FBF6F56426B5FBF6F5BC
:1008E00005EBC50606EB0515A3EB8503322505EBE5
:1008F00003136425B3FBF5F303F00F0323449BB20A
:10090000836070BD38B50120144949690143134A19
:100910005161114649690140009100BF00BF00F0DC
:100920004FFD05460022114600F03EFA04462146DE
:100930000E2000F055FD0E2000F028FD00F040FDD7
:1009400005460022114600F02FFA044621460F20EA
:1009500000F046FD0F2000F019FD38BD00100240E8
:1009600000B585B014216846FFF7E5FB1020FFF7BE
:100970002DFC2020FFF72AFC0420FFF727FC08208D
:10098000FFF724FC1C491D48FFF79EFD1C491D482C
:10099000FFF79AFD18480090012001900220029074
:1009A0000020039069461548FFF7FAFC16480090AE
:1009B0000020019069461148FFF7F2FC13480090AF
:1009C0000020019069461248FFF7EAFC11480090A8
:1009D0000020019069460B48FFF7E2FC08480090B0
:1009E00001200190032002900020039069460548F1
:1009F000FFF7D6FC05B000BD200020040010014028
:100A000030003004000C0140C000C004FDFD99041A
:100A100000080140FFFFCF0430B585B014216846BF
:100A2000FFF789FB4FF40060FFF7DEFB00F0D0FC1E
:100A300005460022032100F0D7F90446214619207B
:100A400000F0E2FC192000F0AEFC41F61F40ADF8CA
:100A50000000002001906320029000200390049089
:100A600069460948FFF77EFD0748FFF767FD00214B
:100A70000548FFF77BFE00210348FFF77EFE024892
:100A8000FFF761FD05B030BD002C014000B593B00B
:100A900014210EA8FFF74FFB202106A8FFF74BFB00
:100AA000142101A8FFF747FB0120FFF781FB00207D
:100AB000ADF838000F9041F61F40109000201190C3
:100AC0000EA94FF08040FFF74DFD00BF4FF0804072
:100AD000006840F080004FF08041086000BF0021B6
:100AE0004FF08040FFF742FE10218806FFF7DEFD41
:100AF00070200690002007900890099002200A902C
:100B000006AA10214007FFF701FE10218806FFF713
:100B10009DFD00214FF08040FFF72FFE4FF08040F9
:100B2000FFF711FD0420FFF75FFB40F20220019068
:100B300009200290022003900020049001A902489D
:100B4000FFF72EFC13B000BD0008014030B585B0A2
:100B500014216846FFF7EFFA0220FFF729FB00F0A7
:100B600037FC05460022032100F03EF904462146E9
:100B70001D2000F049FC1D2000F015FC41F61F402F
:100B8000ADF8000000200190632002900020039047
:100B900069460948FFF7E6FC0748FFF7CFFC00214C
:100BA0000548FFF7E3FD00210348FFF7E6FD024893
:100BB000FFF7C9FC05B030BD000400402DE9F0414D
:100BC0008CB01C2105A8FFF7B6FA14216846FFF780
:100BD000B2FA4FF48040FFF715FB0420FFF712FB39
:100BE00068480090092001900320029000200390A3
:100BF00069466548FFF7D4FB6448009004200190E3
:100C000069466148FFF7CCFB002205216048FFF7E9
:100C100053FB002205215E48FFF72CFB0022052133
:100C20005B48FFF783FB002205215948FFF798FB3B
:100C3000802205215648FFF759FB00220521544820
:100C4000FFF79EFB002205215148FFF75FFB1022B2
:100C500004214F48FFF730FB002204214C48FFF7E6
:100C600009FB002204214A48FFF760FB002204210F
:100C70004748FFF775FB802204214548FFF736FB04
:100C8000002204214248FFF77BFB00220421404858
:100C9000FFF73CFB25213F4B1B68C3F302200524D3
:100CA00000250346C3F1070CBCF1040F02D94FF035
:100CB000040C01E0C3F1070C674603F1040CBCF11E
:100CC000070F02D24FF0000C01E0A3F1030C6646BF
:100CD0004FF0010C0CFA07FCACF1010C0CEA040C0F
:100CE0000CFA06FC4FF0010808FA06F8A8F1010812
:100CF00008EA05084CEA080200BF002904DB1007D7
:100D0000030E2548435407E01007040E21480C3019
:100D100001F00F031B1FC45400BF2520002809DB6E
:100D200000F01F02012191404209920002F1E022ED
:100D3000C2F8001100BF4FF4E1300590002006908A
:100D4000079008900C20099000200A900B9005A9AC
:100D50001248FFF725FD00BF1048006920F49040BD
:100D60000E4908610846406920F02A00486100BF2A
:100D700000BF0846C06840F40050C86000BF0CB017
:100D8000BDE8F081020002040008014004000404F0
:100D9000000002400CED00E000E400E000380140FB
:100DA00000BFFEE700BFFEE7F0B503460C4603F0C8
:100DB0000701C1F10700042801D9042001E0C1F1B5
:100DC00007000646081D072801D2002000E0C81EC3
:100DD00005460120B040401E2040A8400127AF40FA
:100DE0007F1E17403843F0BDF0B503460C4603F0B4
:100DF0000701C1F10700042801D9042001E0C1F175
:100E000007000646081D072801D2002000E0C81E82
:100E100005460120B040401E2040A8400127AF40B9
:100E20007F1E17403843F0BD70B50246106A20F0AF
:100E300001001062136A5568946924F0030424F0D9
:100E400070000E6840EA060423F002000E6940EAD2
:100E5000060323F001004E6840EA06030F48824271
:100E600013D123F008004E6940EA860323F0040002
:100E70008E6840EA860325F480708E6940EA060594
:100E800025F40070CE6940EA460555609461C86853
:100E9000506300BF1362002070BD0000002C0140B1
:100EA0002DE9F04104460D46206A20F01000206232
:100EB000266AD4F80480A76927F4407727F4E04035
:100EC000296840EA012726F02000296940EA011636
:100ED00026F01000696840EA01161148844213D1D7
:100EE00026F08000696940EA811626F04000A96872
:100EF00040EA811628F48060A96940EA810828F454
:100F00000060E96940EAC108C4F80480A76120468E
:100F1000E968FFF729FC26620020BDE8F0810000A7
:100F2000002C014070B50246106A20F480701062F7
:100F3000136A5568D46924F0030424F070000E6825
:100F400040EA060423F400700E6940EA062323F405
:100F500080704E6840EA06230F48824213D123F482
:100F600000604E6940EA862323F480608E6840EA80
:100F7000862325F480508E6940EA061525F400503A
:100F8000CE6940EA46155560D461C868D06300BF99
:100F90001362002070BD0000002C014070B50246B5
:100FA000106A20F480501062146A5568D36923F4E3
:100FB000407323F4E0400E6840EA062324F4005016
:100FC0000E6940EA063424F480504E6840EA063444
:100FD0000748824204D125F480408E6940EA861594
:100FE0005560D361C868106400BF1462002070BDF2
:100FF000002C014070470000014600BF04484068D3
:1010000000F0F0000009034A125C21FA02F0704778
:1010100000100240B4200008014600BF05484068A7
:1010200000F4E060044A02EB1020027821FA02F09A
:101030007047000000100240C4200008014600BFB5
:101040000548406800F46050044A02EBD020027862
:1010500021FA02F07047000000100240C42000088E
:1010600010B5002400BF0B48406800F00C0020B110
:10107000042804D0082808D103E0074C07E0064CF8
:1010800005E000F00BF8044601E0034C00BF00BF90
:10109000204610BD0010024000127A0000210022FC
:1010A00000BF1148406800F4803002461AB1B2F522
:1010B000803F0CD101E00D490BE000BF0A484068B9
:1010C000C0F34040401C0A4BB3FBF0F101E007497C
:1010D00000BF00BF00BF0448406800F47010022346
:1010E00003EB9040484370470010024000093D0068
:1010F00000127A007047704710B50220374909681E
:1011000021F007010143354A116000BF00BF00BF55
:101110003248006800F007000228F8D100BF3048CC
:10112000006840F480302E49086000BF00BF00BF57
:101130002B480068C0F340400028F8D04FF48030BE
:101140004FF4E011264A526822F47C1200F4403336
:101150000B431A43224B5A6000BF00BF1846006879
:1011600040F080701946086000BF00BF00BF1C48F7
:101170000068C0F340600028F8D000201849496892
:1011800021F0F0010143164A516000BF10151146CD
:10119000496821F4E0610143516000BF002011461D
:1011A000496821F460510143516000BF022011469B
:1011B000496821F003010143516000BF00BF00BF37
:1011C0000748406800F00C000828F8D10548FFF7F0
:1011D0008FF90448FFF7ACF910BD00000020024071
:1011E0000010024000A24A047047000010B53148C8
:1011F000FFF70EFA01285CD100BF2E48FFF7F4F983
:1012000001280AD12B48FFF708FA012805D100BFB1
:10121000001F2849086100BF00BF2648FFF7E9F911
:1012200001280AD12348FFF7FDF9012805D100BFA5
:10123000801F2049086100BF00BF1E48FFF7DEF98C
:1012400001280BD11B48FFF7F2F9012806D100BF96
:101250006FF008001749086100BF00BF1548FFF78D
:10126000D2F901280BD11348FFF7E6F9012806D17E
:1012700000BF6FF010000F49086100BF00BF0D48AC
:10128000FFF7C6F901280AD10A48FFF7DAF9012861
:1012900005D100BFC01E0749086100BF00BF00BFE5
:1012A000FFF71EF900BF04480068401C02490860AF
:1012B00000BF10BD002C01405800002010B52D4883
:1012C000FFF7A6F9012853D100BF2A48FFF78CF990
:1012D00001280AD12748FFF7A0F9012805D100BF4E
:1012E000001F2449086100BF00BF2248FFF781F9B1
:1012F00001280AD11F48FFF795F9012805D100BF41
:10130000801F1C49086100BF00BF1A48FFF776F92B
:1013100001280BD11748FFF78AF9012806D100BF31
:101320006FF008001349086100BF00BF1148FFF7C4
:101330006AF901280BD10F48FFF77EF9012806D181
:1013400000BF6FF010000B49086100BF00BF0948E3
:10135000FFF75EF901280AD10648FFF772F9012864
:1013600005D100BFC01E0349086100BF00BF00BF18
:1013700010BD00000004004010B50248006800F0F5
:10138000D5FC10BD5C00002000BFFEE7002809DB93
:1013900000F01F02012191404209920002F1E02277
:1013A000C2F800117047002809DB00F01F0201217C
:1013B00091404209920002F1E022C2F80011704708
:1013C00002480068C0F30220704700000CED00E006
:1013D00010B5002804DB0A07130E054A135406E073
:1013E0000A07140E034A00F00F031B1FD45410BD4C
:1013F00000E400E018ED00E010B5002804DB0A0767
:10140000130E054A135406E00A07140E034A00F0AF
:101410000F031B1FD45410BD00E400E018ED00E0E2
:1014200002E008C8121F08C1002AFAD170477047AD
:10143000002001E001C1121F002AFBD1704700000B
:10144000014601F1100000E0001D02681AB9024ACD
:1014500012689042F8D370473400002010B5064857
:10146000046803E02046FFF7EBFF044603480068EA
:101470008442F7D310BD000030000020340000206B
:1014800010B504462146002000F090F910BD10B5BB
:1014900001E000F8011B131EA2F10104A2B2F8D171
:1014A00010BD000010B500200A4908600A49086014
:1014B00000BF0A48FFF744F80848FFF746F800BFA6
:1014C00000BF0748FFF73CF80548FFF73EF800BFAC
:1014D00010BD0000040000200C000020002C014082
:1014E0000004004010B5034800F00CF8024800F07A
:1014F00033F810BD040000200C00002010B500F0EF
:10150000DBFA10BD08B5014600200090086810B154
:10151000122813D108E000BF00BF0B4800684860E4
:1015200000BF1220086000BF074A48681268101AFE
:101530000A2801D2002008BD00BFEDE700200860A6
:1015400000900320F7E700005800002001490860E0
:10155000704700001C00002038B5014600200090B4
:10156000086810B1252821D116E000BF124B134C9A
:10157000E068C3F30F2222EA000400EA020544EA0D
:1015800005440E4D2C6100BF00BF0D480068486047
:1015900000BF2520086000BF094A48681268101A79
:1015A000642801D2002038BD00BFDFE700200860BA
:1015B00000900320F7E70000200020040010014005
:1015C0005800002008B50120274989690143264AAF
:1015D0009161114689690140009100BF00BF000779
:1015E0001146C9690143D1611146C96901400091A1
:1015F00000BF00BF032002461C4B19684FF6FF03D3
:1016000019401B4B0B4343EA0221184B196000BFE2
:1016100000BF1848406820F0E06040F000701549B5
:10162000486000BFFFF760FD134800681349B0FB36
:10163000F1F084B22046FFF789FFFFF789F9FFF741
:1016400059F9FFF71BFAFFF7B1FAFFF7DDF9FFF7DA
:1016500075FA002000F014F8FFF750FFFFF722FFA3
:1016600001E0FFF73FFFFCE7001002400CED00E057
:101670000000FA05000001400000002040420F0079
:1016800010B504460C4951F824104A000B4951F892
:101690002400002100F09EF8094951F82420074950
:1016A000083951F82400002100F094F80121034882
:1016B0000830015510BD0000FC1E00084C00002041
:1016C0000C1F00082DE9F04704460F460025A946E7
:1016D0002348005D20B92248183801682046884711
:1016E0001FB94FF0FF30BDE8F0871E4850F82400C6
:1016F000B7FBF0F61B4850F82400B7FBF0F100FBF5
:10170000117000B1761C184850F82400451E22E0E4
:101710001348083850F8240030F8150010B909F1C2
:10172000010901E04FF00009B14513D14FF0000865
:1017300009E00B48083850F8240005EB080220F8AF
:10174000126008F10108B045F3D3064850F82400B0
:101750006843C8E76D1E002DDADA4FF0FF30C2E7AC
:1017600054000020041F0008FC1E000810B50146AC
:101770000023002207E00B4850F8210030F8120047
:1017800000B15B1C521C084850F821009042F2D86E
:1017900064205843044C54F82140B0FBF4F0C0B22C
:1017A00010BD00004C000020FC1E000870B504466F
:1017B0000E4631462046FFF785FF0546681C08B9EE
:1017C000002070BD024850F824002844F9E70000CA
:1017D0004400002030B5034601E003F8011B141E4D
:1017E000A2F10102F9D130BD10B5044604B910BD13
:1017F00000202085A07D012808D1606A30B1218CAD
:1018000089040A0C0021606AFFF741FE00BFEEE781
:101810002DE9F05F0646884615469946DDE90B7BC3
:10182000DDF828A00EB1012100E0002108462921A1
:10183000FEF7A0FC4420FFF723FE04460CB1012173
:1018400000E0002108462C21FEF794FC0120E07501
:1018500000202076C4F83C902584C4F840B0A786C8
:10186000002D0CDD2846FFF70BFEE061E16909B1B0
:10187000012100E0002108463E21FEF77BFC002FFD
:101880000CDD3846FFF7FCFD2063216B09B1012117
:1018900000E0002108464521FEF76CFC84F8158025
:1018A00084F82CA066602046BDE8F09F10B5044681
:1018B00004B910BD002060852046FFF795FF00BFEA
:1018C000F7E710B504460CB1012100E000210846FD
:1018D00040F2D711FEF74EFC012084F83800216950
:1018E000A068FEF79DFC2069082865D2DFE800F0BB
:1018F0006404111E2C3A485600BFA0680168C1F369
:10190000400121B1A0680221416000BF00BF00BFBB
:1019100053E000BFA0680168C1F3401121B1A06885
:101920002021416000BF00BF00BF46E000BFA068AB
:101930000168C1F3402129B1A0684FF400714160F2
:1019400000BF00BF00BF38E000BFA0680168C1F35E
:10195000403129B1A0684FF40051416000BF00BF81
:1019600000BF2AE000BFA0680168C1F3404129B16F
:10197000A0684FF40031416000BF00BF00BF1CE011
:1019800000BFA0680168C1F3405129B1A0684FF4BD
:101990000011416000BF00BF00BF0EE000BFA068A3
:1019A0000168C1F3406129B1A0684FF00071416046
:1019B00000BF00BF00BF00E000BF00BF606800BF05
:1019C00000BF00BF00F10C0252E8002F42F04001BE
:1019D00000F10C0242E80013002BF3D100BF00BF5E
:1019E0002069082865D2DFE800F06404111E2C3A53
:1019F000485600BFA0680168C1F3C00121B1A068CA
:101A00000821416000BF00BF00BF53E000BFA068D5
:101A10000168C1F3C01121B1A0688021416000BFFD
:101A200000BF00BF46E000BFA0680168C1F3C0214D
:101A300029B1A0684FF40061416000BF00BF00BF42
:101A400038E000BFA0680168C1F3C03129B1A068C7
:101A50004FF40041416000BF00BF00BF2AE000BF5B
:101A6000A0680168C1F3C04129B1A0684FF400210A
:101A7000416000BF00BF00BF1CE000BFA06801685C
:101A8000C1F3C05129B1A0684FF40001416000BF0B
:101A900000BF00BF0EE000BFA0680168C1F3C061D5
:101AA00029B1A0684FF00061416000BF00BF00BFD6
:101AB00000E000BF00BF10BD0EB51348006808BBB2
:101AC0000020F0210122114BCDE9002102900A46AD
:101AD00001210F48FFF79CFE0B49086000200968B0
:101AE00008700C480849096888600520064909689B
:101AF000C8600420044909680861002102480068A0
:101B000000F0E2F80EBD00005C0000204B1E000853
:101B1000003801400000024038B5044604B938BD21
:101B20006068C168C1F34011B9B160680168C1F370
:101B3000401191B1608D218C884202DB2046FFF775
:101B4000B5FE61684A68D2B2608D411C6185E16969
:101B50000A5400202076E0753FE06068C168C1F358
:101B60000011002939D060680168C1F30011002913
:101B700033D0607D01282BD1D4E902014A1E514B9C
:101B80009A5C02445268208C801A6085207DF8B9E6
:101B9000D4E90201FEF744FBE06B80B1608D0028C0
:101BA0000DDD608D218C884209DC628D2078E36B2D
:101BB000E1699847228C0021E069FFF768FC228CDC
:101BC000D4E90201FEF766FBD4E90201FEF736FB19
:101BD000002060856068FEF7CEFD6068C168C1F3D3
:101BE000801151B16068FEF72CFE30B1206C08B155
:101BF000206C80476068FEF7C6FDA07D01285ED19D
:101C000001256068C168C1F3002171B16068016895
:101C100001F0010149B1022560680168009100BF2F
:101C20004168009100BF00BF00BF6068FEF7FAFD89
:101C300068B16068FEF7F6FD48B104256068016888
:101C4000009100BF4168009100BF00BF00BF606805
:101C5000FEF7EDFD60B16068FEF7E9FD40B1606838
:101C60000168009100BF4168009100BF00BF00BF44
:101C70006068FEF7E1FD68B16068FEF7DDFD48B120
:101C8000102560680168009100BF4168009100BFA5
:101C900000BF00BF012D11D0606A78B1618D491E6F
:101CA00088B2228D616A01EB82014880228D616ACF
:101CB00001F82250218D491C218500BF00BF00BFC3
:101CC0002DE70000B81E000870B504460D46607D83
:101CD00090B9A575606800BF00BF00BF00F10C029D
:101CE00052E8002F42F0200100F10C0242E80013FC
:101CF000002BF3D100BF70E00020A0756068FEF7F4
:101D00003AFD2169A068FEF78BFAD4E90201FEF7DB
:101D100087FA6068011D0E463246D4E90201FEF7DB
:101D200015FBE269D4E90201FEF7D6FA228CD4E968
:101D30000201FEF7AFFAD4E90201FEF78DFAD4E909
:101D40000201FEF77BFA606800BF00BF00BF00F130
:101D5000140252E8002F42F0400100F1140242E860
:101D60000013002BF3D100BF00BF606800BF00BFAD
:101D700000BF00F10C0252E8002F42F0100100F108
:101D80000C0242E80013002BF3D100BF00BF6068D3
:101D9000011D0E4632462169A068FEF7D7FA226B74
:101DA0002169A068FEF798FA2169A068FEF754FA45
:101DB000606800BF00BF00BF00F1140252E8002FAE
:101DC00042F0800100F1140242E80013002BF3D12D
:101DD00000BF00BF012084F83800A07D012833D166
:101DE000606A68B9218C8800FFF74AFB6062616A0B
:101DF00009B1012100E0002108468221FEF7BAF96D
:101E0000606800BF00BF00BF00F10C0252E8002F65
:101E100042F4807100F10C0242E80013002BF3D170
:101E200000BF00BF606800BF00BF00BF00F1140228
:101E300052E8002F42F0010100F1140242E80013C1
:101E4000002BF3D100BF00BF70BD7047081C3044A9
:101E5000586C80000000000404040000080000002A
:101E6000080000080000000800020406080A0C0030
:101E7000010203040506081C3044586C8000000071
:101E8000000404040000080000000800000800002E
:101E9000000800020406080A0C00010203040506FB
:101EA000000000000000000001020304060708090A
:101EB0000000000001020304081C3044586C80003C
:101EC00000000004040400000800000008000008EE
:101ED0000000000800020406080A0C0001020304C6
:101EE00005065F6C697374006C69737420616C6CB7
:101EF00020636F6D6D616E640000000000040000DF
:101F000000000000080000000800000000200000A1
:101F100000000000341F00080000002070000000D6
:101F200020140008A41F000870000020102C0000DE
:101F3000301400080024F40000000000000000003D
:101F40000000000000000000000000000000000091
:101F50000000000000000000000000000000000081
:101F60000000000000000000000000000000000071
:101F7000811600086D1700088000002000C00120B5
:101F80008020002038000020000000000000000039
:101F900000000000E21E0008E81E0008C6E533B499
:041FA0005D140008C4
:1013D00002480068C0F30220704700000CED00E0F6
:1013E00010B5002804DB0A07130E054A135406E063
:1013F0000A07140E034A00F00F031B1FD45410BD3C
:1014000000E400E018ED00E010B5002804DB0A0756
:10141000130E054A135406E00A07140E034A00F09F
:101420000F031B1FD45410BD00E400E018ED00E0D2
:1014300002E008C8121F08C1002AFAD1704770479D
:10144000002001E001C1121F002AFBD170470000FB
:10145000014601F1100000E0001D02681AB9024ABD
:1014600012689042F8D370473400002010B5064847
:10147000046803E02046FFF7EBFF044603480068DA
:101480008442F7D310BD000030000020340000205B
:1014900010B504462146002000F00CFA10BD10B52E
:1014A00001E000F8011B131EA2F10104A2B2F8D161
:1014B00010BD000010B500200A4908600A49086004
:1014C00000BF0A48FFF744F80848FFF746F800BF96
:1014D00000BF0748FFF73CF80548FFF73EF800BF9C
:1014E00010BD0000040000200C000020002C014072
:1014F0000004004010B5034800F00EF8024800F068
:10150000AFF810BD040000200C00002010B500F062
:10151000DDFB00F017FA10BD08B501460020009071
:10152000086810B1122813D108E000BF00BF0B48B3
:101530000068486000BF1220086000BF074A486882
:101540001268101A0A2801D2002008BD00BFEDE77A
:101550000020086000900320F7E7000058000020FA
:1015600001490860704700001C00002010B50849C0
:101570000848FEF7B1FF08490648FEF7ADFF0449E9
:101580000448FEF7A5FF04490248FEF7A1FF10BD7D
:1015900010001004000C01402000200410B5064982
:1015A0000648FEF795FF06490448FEF795FF0249F5
:1015B0000248FEF791FF10BD10001004000C01401E
:1015C0002000200470B50446002518E004F08000D7
:1015D000284120B10F491048FEF77EFF03E00D4976
:1015E0000D48FEF775FF6006040E0C490A48FEF729
:1015F00073FF0A490848FEF76BFF681CC5B2082D47
:10160000E4DB06490448FEF767FF04490248FEF799
:101610005FFF70BD10001004000C0140200020048A
:1016200010B50446FFF7A2FF7820FFF7CBFF00209C
:10163000FFF7C8FF2046FFF7C5FFFFF7AFFF10BD5C
:1016400010B50446FFF792FF7820FFF7BBFF40205C
:10165000FFF7B8FF2046FFF7B5FFFFF79FFF10BD6C
:1016600038B5014600200090086810B1252821D126
:1016700016E000BF124B134CE068C3F30F2222EABE
:10168000000400EA020544EA05440E4D2C6100BF47
:1016900000BF0D480068486000BF2520086000BFFB
:1016A000094A48681268101A642801D2002038BD1F
:1016B00000BFDFE70020086000900320F7E700008C
:1016C00020002004001001405800002008B501202F
:1016D000274989690143264A916111468969014078
:1016E000009100BF00BF00071146C9690143D161E5
:1016F0001146C9690140009100BF00BF03200246A6
:101700001C4B19684FF6FF0319401B4B0B4343EA70
:101710000221184B196000BF00BF1848406820F034
:10172000E06040F000701549486000BFFFF7E4FC3E
:10173000134800681349B0FBF1F084B22046FFF76C
:101740000FFFFFF70DF9FFF7DDF8FFF79FF9FFF740
:1017500035FAFFF761F9FFF7F9F9002000F014F806
:10176000FFF7D4FEFFF7A6FE01E0FFF7C3FEFCE79C
:10177000001002400CED00E00000FA0500000140FE
:101780000000002040420F0010B504460C4951F8FB
:1017900024104A000B4951F82400002100F09EF863
:1017A000094951F824200749083951F8240000213B
:1017B00000F094F8012103480830015510BD0000E5
:1017C000102100084C000020202100082DE9F047DE
:1017D00004460F460025A9462348005D20B922484B
:1017E00018380168204688471FB94FF0FF30BDE820
:1017F000F0871E4850F82400B7FBF0F61B4850F85D
:101800002400B7FBF0F100FB117000B1761C184802
:1018100050F82400451E22E01348083850F82400F0
:1018200030F8150010B909F1010901E04FF0000985
:10183000B14513D14FF0000809E00B48083850F8C3
:10184000240005EB080220F8126008F10108B045F9
:10185000F3D3064850F824006843C8E76D1E002DF6
:10186000DADA4FF0FF30C2E75400002018210008F8
:101870001021000810B501460023002207E00B48A4
:1018800050F8210030F8120000B15B1C521C0848CF
:1018900050F821009042F2D864205843044C54F888
:1018A0002140B0FBF4F0C0B210BD00004C0000209D
:1018B0001021000870B504460E4631462046FFF759
:1018C00085FF0546681C08B9002070BD024850F825
:1018D00024002844F9E700004400002030B5034606
:1018E00001E003F8011B141EA2F10102F9D130BD81
:1018F00070B500240EE00021204600F06EF80025AF
:1019000004E00020FFF79CFE681CC5B2802DF8DBC8
:10191000601CC4B2082CEEDB70BD70B500240EE074
:101920000021204600F059F8002504E0FF20FFF7D1
:1019300087FE681CC5B2802DF8DB601CC4B2082C81
:10194000EEDB70BD10B5AE20FFF76AFED520FFF7C5
:1019500067FE8020FFF764FEA820FFF761FE3F20AE
:10196000FFF75EFED320FFF75BFE0020FFF758FE77
:101970004020FFF755FEA120FFF752FEC820FFF7D9
:101980004FFEDA20FFF74CFE1220FFF749FE8120C0
:10199000FFF746FECF20FFF743FED920FFF740FEBA
:1019A000F120FFF73DFEDB20FFF73AFE3020FFF786
:1019B00037FEA420FFF734FEA620FFF731FE8D206E
:1019C000FFF72EFE1420FFF72BFEAF20FFF728FEB7
:1019D000FFF78EFFFFF7A1FF10BD70B504460D465F
:1019E00045F0B000FFF71CFE102141EA1410FFF78C
:1019F00017FE04F00F00FFF713FE70BD10B504468C
:101A000004B910BD00202085A07D012808D1606A9E
:101A100030B1218C89040A0C0021606AFFF73FFD78
:101A200000BFEEE72DE9F05F064688461546994669
:101A3000DDE90B7BDDF828A00EB1012100E00021DB
:101A400008462921FEF796FB4420FFF721FD0446B6
:101A50000CB1012100E0002108462C21FEF78AFB91
:101A60000120E07500202076C4F83C902584C4F85D
:101A700040B0A786002D0CDD2846FFF709FDE06188
:101A8000E16909B1012100E0002108463E21FEF78D
:101A900071FB002F0CDD3846FFF7FAFC2063216B49
:101AA00009B1012100E0002108464521FEF762FB53
:101AB00084F8158084F82CA066602046BDE8F09F6D
:101AC00010B5044604B910BD002060852046FFF71C
:101AD00095FF00BFF7E710B504460CB1012100E007
:101AE0000021084640F2D711FEF744FB012084F89C
:101AF00038002169A068FEF793FB2069082865D2A9
:101B0000DFE800F06404111E2C3A485600BFA068BC
:101B10000168C1F3400121B1A0680221416000BF0A
:101B200000BF00BF53E000BFA0680168C1F34011CF
:101B300021B1A0682021416000BF00BF00BF46E086
:101B400000BFA0680168C1F3402129B1A0684FF42B
:101B50000071416000BF00BF00BF38E000BFA06857
:101B60000168C1F3403129B1A0684FF400514160D0
:101B700000BF00BF00BF2AE000BFA0680168C1F33A
:101B8000404129B1A0684FF40031416000BF00BF5F
:101B900000BF1CE000BFA0680168C1F3405129B13B
:101BA000A0684FF40011416000BF00BF00BF0EE00D
:101BB00000BFA0680168C1F3406129B1A0684FF07F
:101BC0000071416000BF00BF00BF00E000BF00BF68
:101BD000606800BF00BF00BF00F10C0252E8002F98
:101BE00042F0400100F10C0242E80013002BF3D157
:101BF00000BF00BF2069082865D2DFE800F0640458
:101C0000111E2C3A485600BFA0680168C1F3C001FC
:101C100021B1A0680821416000BF00BF00BF53E0B0
:101C200000BFA0680168C1F3C01121B1A068802184
:101C3000416000BF00BF00BF46E000BFA068016870
:101C4000C1F3C02129B1A0684FF40061416000BF19
:101C500000BF00BF38E000BFA0680168C1F3C03119
:101C600029B1A0684FF40041416000BF00BF00BF30
:101C70002AE000BFA0680168C1F3C04129B1A06893
:101C80004FF40021416000BF00BF00BF1CE000BF57
:101C9000A0680168C1F3C05129B1A0684FF40001E8
:101CA000416000BF00BF00BF0EE000BFA068016838
:101CB000C1F3C06129B1A0684FF00061416000BF6D
:101CC00000BF00BF00E000BF00BF10BD0EB513484D
:101CD000006808BB0020F0210122114BCDE9002152
:101CE00002900A4601210F48FFF79CFE0B4908604D
:101CF0000020096808700C480849096888600520B8
:101D000006490968C860042004490968086100217F
:101D10000248006800F0E2F80EBD00005C00002000
:101D20005F200008003801400000024038B504463A
:101D300004B938BD6068C168C1F34011B9B16068C9
:101D40000168C1F3401191B1608D218C884202DBA2
:101D50002046FFF7B5FE61684A68D2B2608D411C2B
:101D60006185E1690A5400202076E0753FE06068F3
:101D7000C168C1F30011002939D060680168C1F35E
:101D80000011002933D0607D01282BD1D4E9020154
:101D90004A1E514B9A5C02445268208C801A60851E
:101DA000207DF8B9D4E90201FEF73AFAE06B80B180
:101DB000608D00280DDD608D218C884209DC628DEC
:101DC0002078E36BE1699847228C0021E069FFF7F6
:101DD00066FB228CD4E90201FEF75CFAD4E9020129
:101DE000FEF72CFA002060856068FEF7CCFC606886
:101DF000C168C1F3801151B16068FEF72AFD30B1AE
:101E0000206C08B1206C80476068FEF7C4FCA07DA0
:101E100001285ED101256068C168C1F3002171B15C
:101E20006068016801F0010149B10225606801683C
:101E3000009100BF4168009100BF00BF00BF606813
:101E4000FEF7F8FC68B16068FEF7F4FC48B10425C1
:101E500060680168009100BF4168009100BF00BF49
:101E600000BF6068FEF7EBFC60B16068FEF7E7FC5E
:101E700040B160680168009100BF4168009100BFF7
:101E800000BF00BF6068FEF7DFFC68B16068FEF766
:101E9000DBFC48B1102560680168009100BF416813
:101EA000009100BF00BF00BF012D11D0606A78B162
:101EB000618D491E88B2228D616A01EB82014880E2
:101EC000228D616A01F82250218D491C218500BFB5
:101ED00000BF00BF2DE70000CC20000870B504460D
:101EE0000D46607D90B9A575606800BF00BF00BF5A
:101EF00000F10C0252E8002F42F0200100F10C0228
:101F000042E80013002BF3D100BF70E00020A07561
:101F10006068FEF738FC2169A068FEF781F9D4E912
:101F20000201FEF77DF96068011D0E463246D4E9D4
:101F30000201FEF70BFAE269D4E90201FEF7CCF9DF
:101F4000228CD4E90201FEF7A5F9D4E90201FEF7DB
:101F500083F9D4E90201FEF771F9606800BF00BFA0
:101F600000BF00F1140252E8002F42F0400100F1DE
:101F7000140242E80013002BF3D100BF00BF6068D9
:101F800000BF00BF00BF00F10C0252E8002F42F07A
:101F9000100100F10C0242E80013002BF3D100BF46
:101FA00000BF6068011D0E4632462169A068FEF739
:101FB000CDF9226B2169A068FEF78EF92169A0682E
:101FC000FEF74AF9606800BF00BF00BF00F11402CD
:101FD00052E8002F42F0800100F1140242E80013A1
:101FE000002BF3D100BF00BF012084F83800A07D92
:101FF000012833D1606A68B9218C8800FFF748FA5C
:102000006062616A09B1012100E000210846822175
:10201000FEF7B0F8606800BF00BF00BF00F10C021F
:1020200052E8002F42F4807100F10C0242E80013E4
:10203000002BF3D100BF00BF606800BF00BF00BF2E
:1020400000F1140252E8002F42F0010100F11402E5
:1020500042E80013002BF3D100BF00BF70BD7047F2
:10206000081C3044586C8000000000040404000088
:102070000800000008000008000000080002040634
:10208000080A0C00010203040506081C3044586CC1
:1020900080000000000404040000080000000800A4
:1020A00000080000000800020406080A0C000102F3
:1020B0000304050600000000000000000102030404
:1020C000060708090000000001020304081C304450
:1020D000586C8000000000040404000008000000A8
:1020E000080000080000000800020406080A0C00AE
:1020F0000102030405065F6C697374006C697374F4
:1021000020616C6C20636F6D6D616E640000000077
:1021100000040000000000000800000008000000AB
:1021200000200000000000004821000800000020FE
:102130007000000030140008B82100087000002072
:10214000102C0000401400080024F40000000000DF
:10215000000000000000000000000000000000007F
:10216000000000000000000000000000000000006F
:10217000000000000000000000000000000000005F
:102180000000000089170008751800088000002072
:1021900000C0012080200020380000200000000046
:1021A0000000000000000000F6200008FC200008ED
:0821B000C6E533B46D1400080C
:04000005080000ED02
:00000001FF

View File

@ -18,7 +18,6 @@ static void uart_init(void)
}
}
/**
* @brief UART发送数据
*
@ -39,4 +38,5 @@ void uart_send(uint8_t *data, uint16_t len)
void board_init(void)
{
uart_init();
ssd096_init();
}

View File

@ -1,6 +1,7 @@
#ifndef __BOARD_H__
#define __BOARD_H__
#include "lib.h"
#include "ssd096_oled.h"
#define UART_RXSIZE (240u) // 接收240个字节
#define UART_TXSIZE (240u) // 发送240个字节

147
User/board/ssd096_oled.c Normal file
View File

@ -0,0 +1,147 @@
#include "ssd096_oled.h"
static void i2c_start(void)
{
GPIO_SET(SSD096_SDA_PORT, SSD096_SDA_PIN);
GPIO_SET(SSD096_SCK_PORT, SSD096_SCK_PIN);
GPIO_RESET(SSD096_SDA_PORT, SSD096_SDA_PIN);
GPIO_RESET(SSD096_SCK_PORT, SSD096_SCK_PIN);
}
static void i2c_stop(void)
{
GPIO_RESET(SSD096_SDA_PORT, SSD096_SDA_PIN);
GPIO_SET(SSD096_SCK_PORT, SSD096_SCK_PIN);
GPIO_SET(SSD096_SDA_PORT, SSD096_SDA_PIN);
}
void i2c_write_byte(uint8_t data)
{
uint8_t i;
for (i = 0; i < 8; i++)
{
if ((data & 0x80) >> i)
GPIO_SET(SSD096_SDA_PORT, SSD096_SDA_PIN);
else
GPIO_RESET(SSD096_SDA_PORT, SSD096_SDA_PIN);
data <<= 1;
GPIO_SET(SSD096_SCK_PORT, SSD096_SCK_PIN);
GPIO_RESET(SSD096_SCK_PORT, SSD096_SCK_PIN);
}
GPIO_SET(SSD096_SCK_PORT, SSD096_SCK_PIN); // 额外的一个时钟,不处理应答信号
GPIO_RESET(SSD096_SCK_PORT, SSD096_SCK_PIN);
}
/**
* @brief I2C设备写入命令
*
* I2C接口向指定设备写入一个命令字节
*
* @param command
*/
static void i2c_write_command(uint8_t command)
{
i2c_start();
i2c_write_byte(0x78);
i2c_write_byte(0x00);
i2c_write_byte(command);
i2c_stop();
}
/**
* @brief I2C设备写入一个字节的数据
*
* I2C总线向指定设备写入一个字节的数据
*
* @param data
*/
static void i2c_write_data(uint8_t data)
{
i2c_start();
i2c_write_byte(0x78);
i2c_write_byte(0x40);
i2c_write_byte(data);
i2c_stop();
}
/**
* @brief SSD096 OLED显示屏上的光标位置
*
* SSD096 OLED显示屏上的光标位置到指定的x和y坐标
*
* @param x 0127
* @param y 063
*/
void ssd096_set_position(uint8_t x, uint8_t y)
{
i2c_write_command(0xb0 | y);
i2c_write_command(0x10 | ((x & 0xf0) >> 4));
i2c_write_command(0x00 | (x & 0x0f));
}
/**
* @brief SSD096显示屏
*
* SSD096显示屏的内容清空
*
* @note I2C接口向SSD096发送数据
*/
void ssd096_clear(void)
{
uint8_t i, j;
for (i = 0; i < 8; i++)
{
ssd096_set_position(i, 0);
for (j = 0; j < 128; j++)
{
i2c_write_data(0x00);
}
}
}
void ssd096_full(void)
{
uint8_t i, j;
for (i = 0; i < 8; i++)
{
ssd096_set_position(i, 0);
for (j = 0; j < 128; j++)
{
i2c_write_data(0xff);
}
}
}
/**
* @brief SSD096显示驱动
*
* SSD096显示驱动
*/
void ssd096_init(void)
{
i2c_write_command(0xae);
i2c_write_command(0xd5);
i2c_write_command(0x80);
i2c_write_command(0xa8);
i2c_write_command(0x3f);
i2c_write_command(0xd3);
i2c_write_command(0x00);
i2c_write_command(0x40);
i2c_write_command(0xa1);
i2c_write_command(0xc8);
i2c_write_command(0xda);
i2c_write_command(0x12);
i2c_write_command(0x81);
i2c_write_command(0xcf);
i2c_write_command(0xd9);
i2c_write_command(0xf1);
i2c_write_command(0xdb);
i2c_write_command(0x30);
i2c_write_command(0xa4);
i2c_write_command(0xa6);
i2c_write_command(0x8d);
i2c_write_command(0x14);
i2c_write_command(0xaf);
ssd096_clear();
ssd096_full();
}

12
User/board/ssd096_oled.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef __SSD096_OLED_H
#define __SSD096_OLED_H
#include "main.h"
#define SSD096_SDA_PORT OLED_SDA_GPIO_Port
#define SSD096_SDA_PIN OLED_SDA_Pin
#define SSD096_SCK_PORT OLDE_SCK_GPIO_Port
#define SSD096_SCK_PIN OLDE_SCK_Pin
void ssd096_init(void);
void ssd096_clear(void);
void ssd096_set_position(uint8_t x, uint8_t y);
#endif // __SSD096_OLED_H

View File

@ -1,737 +0,0 @@
/**
* @file ssd1306_oled.c
* @author xushenghao
* @brief SSD1306 OLED display driver
* @version 0.1
* @note PB13-SCK PB12-SDA
*/
#include "ssd1306_oled.h"
#include "ssd1306_oled.h"
/************************************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
};
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 i2c_stop(void)
{
SDA_OUT();
GPIO_RESET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
GPIO_RESET(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
delay_us(4);
GPIO_SET(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
GPIO_SET(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
delay_us(4);
}
static BOOL i2c_wait_ack(void)
{
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);
}
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)
{
i2c_write_command(SSD1306_CMD_DISPLAY_OFF); // display off
i2c_write_command(SSD1306_CMD_MEMORY_MODE); // Set Memory Addressing Mode
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_test();
}
void ssd1306_display_on(void)
{
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)
{
i2c_write_command(SSD1306_CMD_CHARGE_PUMP); // 设置电荷泵
i2c_write_command(SSD1306_CMD_SET_HIGH_COLUMN); // 关闭电荷泵
i2c_write_command(SSD1306_CMD_DISPLAY_OFF); // OLED休眠
}
/**
* @brief SSD1306 OLED显示屏的内容
*
* SSD1306 OLED显示屏
*
*
*
* @note
*/
void ssd1306_update_screen(void)
{
for (uint8_t i = 0; i < SSD1306_HEIGHT / 8; i++)
{
i2c_write_command(0xb0 + i);
i2c_write_command(0x01);
i2c_write_command(0x10);
for (uint8_t j = 0; j < SSD1306_WIDTH; j++)
{
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();
}
void ssd1306_clear_buffer(void)
{
osel_memset(_buffer, 0, ARRAY_LEN(_buffer));
}
/**
* @brief BMP
*
* BMP使SSD1306 OLED显示屏
* ssd1306_draw_bmp(0, 0, SSD1306_WIDTH, 2);
* @param x0 BMP绘制的起始X坐标
* @param y0 BMP绘制的起始Y坐标
* @param x1 BMP绘制的结束X坐标
* @param y1 BMP绘制的结束Y坐标
*/
void ssd1306_draw_bmp(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *bmp)
{
uint8_t j = 0;
uint8_t x, y;
osel_memset(_buffer, 0, ARRAY_LEN(_buffer));
if (y1 % 8 == 0)
y = y1 / 8;
else
y = y1 / 8 + 1;
for (y = y0; y < y1; y++)
{
set_position(x0, y);
for (x = x0; x < x1; x++)
{
i2c_write_data(bmp[j++]);
}
}
}
/**
* @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 * SSD1306_WIDTH) + 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 * SSD1306_WIDTH) + 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 * SSD1306_WIDTH) + 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 * SSD1306_WIDTH) + 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 * SSD1306_WIDTH) + x + i] = F8X16[c * 16 + i];
for (i = 0; i < 8; i++)
_buffer[((y + 1) * SSD1306_WIDTH) + 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++] = (int32_t)(num) % 10000 / 1000 + 48;
ch[i++] = (int32_t)(num) % 1000 / 100 + 48;
ch[i++] = (int32_t)(num) % 100 / 10 + 48;
ch[i++] = (int32_t)(num) % 10 + 48;
}
else if (num >= 1000)
{
ch[i++] = (int32_t)(num) % 10000 / 1000 + 48;
ch[i++] = (int32_t)(num) % 1000 / 100 + 48;
ch[i++] = (int32_t)(num) % 100 / 10 + 48;
ch[i++] = (int32_t)(num) % 10 + 48;
}
else if (num >= 100)
{
ch[i++] = (int32_t)(num) % 1000 / 100 + 48;
ch[i++] = (int32_t)(num) % 100 / 10 + 48;
ch[i++] = (int32_t)(num) % 10 + 48;
}
else if (num >= 10)
{
ch[i++] = (int32_t)(num) % 100 / 10 + 48;
ch[i++] = (int32_t)(num) % 10 + 48;
}
else if (num >= 0)
{
ch[i++] = (int32_t)(num) % 10 + 48;
}
if (dot_num > 0 && i < 7)
{
ch[i++] = '.';
num = num - (int32_t)num;
if (dot_num == 1 && i < 8)
{
num = num * 10;
ch[i++] = (int32_t)(num + 0.5) % 10 + 48;
}
if (dot_num >= 2 && i < 8)
{
num = num * 100;
ch[i++] = (int32_t)num % 100 / 10 + 48;
if (i < 8)
ch[i++] = (int32_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 * SSD1306_WIDTH) + x + i] = F8X16[c * 16 + i];
for (i = 0; i < 8; i++)
_buffer[((y + 1) * SSD1306_WIDTH) + x + i] = F8X16[c * 16 + i + 8];
x += 8;
j++;
}
}

View File

@ -1,68 +0,0 @@
#ifndef __SSD1306_OLED_H
#define __SSD1306_OLED_H
#include "main.h"
// OLED引脚定义
#define SSD1306_SDA_PORT OLED_SDA_GPIO_Port
#define SSD1306_SDA_PIN OLED_SDA_Pin
#define SSD1306_SCK_PORT OLDE_SCK_GPIO_Port
#define SSD1306_SCK_PIN OLDE_SCK_Pin
// I2C地址
#define SSD1306_I2C_ADDRESS 0x78
// OLED显示参数
#define SSD1306_WIDTH 128
#define SSD1306_HEIGHT 64
// OLED命令定义
#define SSD1306_CMD_DISPLAY_OFF 0xAE
#define SSD1306_CMD_DISPLAY_ON 0xAF
#define SSD1306_CMD_SET_CONTRAST 0x81
#define SSD1306_CMD_DISPLAY_ALL_ON_RESUME 0xA4
#define SSD1306_CMD_DISPLAY_ALL_ON 0xA5
#define SSD1306_CMD_NORMAL_DISPLAY 0xA6
#define SSD1306_CMD_INVERT_DISPLAY 0xA7
#define SSD1306_CMD_SET_DISPLAY_OFFSET 0xD3
#define SSD1306_CMD_SET_COM_PINS 0xDA
#define SSD1306_CMD_SET_VCOM_DETECT 0xDB
#define SSD1306_CMD_SET_DISPLAY_CLOCK_DIV 0xD5
#define SSD1306_CMD_SET_PRECHARGE 0xD9
#define SSD1306_CMD_SET_MULTIPLEX 0xA8
#define SSD1306_CMD_SET_LOW_COLUMN 0x00
#define SSD1306_CMD_SET_HIGH_COLUMN 0x10
#define SSD1306_CMD_SET_START_LINE 0x40
#define SSD1306_CMD_MEMORY_MODE 0x20
#define SSD1306_CMD_COLUMN_ADDR 0x21
#define SSD1306_CMD_PAGE_ADDR 0x22
#define SSD1306_CMD_COM_SCAN_INC 0xC0
#define SSD1306_CMD_COM_SCAN_DEC 0xC8
#define SSD1306_CMD_SEG_REMAP 0xA0
#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_display_on(void);
void ssd1306_display_off(void);
void ssd1306_update_screen(void);
void ssd1306_fill(uint8_t color);
void ssd1306_clear(void);
void ssd1306_clear_buffer(void);
void ssd1306_draw_bmp(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t *bmp);
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