Problem with comparison.
/Designs/Tools/reflow2/SW/reflow.PJT |
---|
0,0 → 1,36 |
[PROJECT] |
Target=reflow.HEX |
Development_Mode=2 |
Processor=0x877A |
Processor_Text=PIC16F877A |
ToolSuite=CCS |
[Directories] |
Include= |
Library= |
LinkerScript= |
[Target Data] |
FileList=reflow.c; |
BuildTool=C-COMPILER |
OptionString=+FM |
AdditionalOptionString= |
BuildRequired=1 |
[reflow.c] |
Type=4 |
Path= |
FileList= |
BuildTool= |
OptionString= |
AdditionalOptionString= |
[mru-list] |
1=reflow.c |
[Windows] |
0=0000 reflow.c 0 0 796 451 3 0 |
[Units] |
Count=1 |
1=reflow (main) |
/Designs/Tools/reflow2/SW/reflow.hex |
---|
0,0 → 1,314 |
:1000000007308A001B2F0000FF00030E8301A100B0 |
:100010000A08A0008A010408A2007708A300780853 |
:10002000A4007908A5007A08A600831383128C30F7 |
:100030008400801C1D288C182E2822088400230888 |
:10004000F7002408F8002508F9002608FA0020081F |
:100050008A00210E8300FF0E7F0E09008A110A120A |
:1000600057280A108A100A11820728340C340134E8 |
:1000700006348E0F91089108910F00008E0F9108A1 |
:1000800091089F0F00018E0F9108910F9F0F0001A3 |
:100090008E0F91089F0F9F0F00018E0F910F9F0FE2 |
:1000A0009F0F00018E0F9F0F9F0F9F0F0000D90120 |
:1000B0002830D800AC0A2C08183C03188A28AC0158 |
:1000C000023058078400831359188317800A0008E8 |
:1000D0003B3C03188A2802305807840083135918C0 |
:1000E0008317800101305807840083135918831740 |
:1000F000800A00083B3C03188A2801305807840016 |
:1001000083135918831780015808840083135918E2 |
:100110008317800A8C108A110A121D2806340934AC |
:1001200009340634803480348034803400340C3117 |
:10013000613A741D20080000F43270366F3A611D78 |
:10014000A0126C32912120100000831685128312B8 |
:10015000851683160512831205168316811309125C |
:1001600083129412A712270883168700831227167A |
:100170002708831687008312A71127088316870094 |
:100180000130831294000030831694000108C739AF |
:1001900008388100831290014830F8000638920038 |
:1001A000F9308316920007309C0005088500033063 |
:1001B000F700F70BD9281C0883120D1383169D0135 |
:1001C000C03083128B0483168C141F149F101F15CC |
:1001D0009F111F1383121F179F1383169F178312DC |
:1001E0001F140030F8001F08C73978049F008A11D7 |
:1001F0000A122C2F3A3084008313000803190E29A9 |
:100200000130F800F701F70B0329F80B02294A30F7 |
:10021000F700F70B09290C29800B002908000808B2 |
:10022000F039C20040080F39420488000715271131 |
:10023000270883168700000083120711271127085B |
:100240008316870083120800BE08031D2929871022 |
:100250002A298714A7102708831687008312BF0E48 |
:100260003F08C0000F21BF0E3F08C0000F210D3016 |
:10027000F700F70B39290800C830BA00FA20F0302F |
:100280008316880583128710A71027088316870016 |
:100290008312071127112708831687008312AE01E6 |
:1002A0002E08023C031C5C290230BA00FA200330FD |
:1002B000C0000F21AE0A50290D30F700F70B5E2960 |
:1002C0000230C0000F210D30F700F70B6529AE0199 |
:1002D0002E08023C031C78292E083120AF00BE01F5 |
:1002E0002F08BF0024210230BA00FA20AE0A682984 |
:1002F0008A110A12352F0130BE003108BF002421B7 |
:100300000800831603178C170C14000000008312DA |
:100310008C080319A4290D080313AE0003170F0856 |
:100320000313AF0003170C080313B1007B212E0841 |
:1003300003178D0003132F0803178F008D0A03196D |
:100340008F0A03138129031703138A110A12432FFB |
:1003500001303A02BC003B08023C031DB129403089 |
:10036000BC073C088038BD00BE013D08BF00242109 |
:10037000080039080C3A0319C429063A0319CC2994 |
:10038000073A0319D229D729BE010130BF00242121 |
:100390000230BA00FA20E3290130BA000230BB0073 |
:1003A000A821E3290130BA00BB00A821E3293908BC |
:1003B0001F3C031CDD290730B9050130BE00390898 |
:1003C000BF002421E3290800831603178C170C149F |
:1003D0000000000083120C087F390319282A031338 |
:1003E000AE0003170D080313AF0003170F08031324 |
:1003F000B0002E08B900B9212F0803178D00031390 |
:10040000300803178F0083168C170C1400000000AF |
:1004100083120C0D0E0D7F390319282A0313AE0029 |
:1004200003170D080313AF0003170F080313B000E1 |
:100430002E08B900B9212F0803178D0003133008C7 |
:1004400003178F008D0A03198F0A0313E42903177A |
:1004500003138A110A12512F83168C100230831253 |
:100460002E07840083132F18831780012E08840021 |
:1004700083132F188317800101302E078400831304 |
:100480002F188317800183168C1483128A110A1285 |
:10049000552F3108F80130020318512A3008F700AF |
:1004A0005D2AF7010830B200B00DF70D3108770270 |
:1004B0000318F700F80DB20B542A080078082E082C |
:1004C000B0006430B10049227708AE0078083030BF |
:1004D000031D712AAF1C782AAF19782A2F1A2030F1 |
:1004E000742AAF112F122F14F8077808B900B92118 |
:1004F0002E08B0000A30B10049227708AE00780813 |
:100500003030031D892AAF198D2A2F1C8D2A2F1AEE |
:100510002030F8077808B900B9213030AE072E082E |
:10052000B900B9210800831603178C170C140000BA |
:10053000000083120C087F390319D72A0313AE0079 |
:1005400003170D080313AF0003170F080313B000C0 |
:100550002E08B1007B212F0803178D0003133008EC |
:1005600003178F0083168C170C14000000008312F1 |
:100570000C0D0E0D7F390319D72A0313AE00031794 |
:100580000D080313AF0003170F080313B0002E0864 |
:10059000B1007B212F0803178D00031330080317C8 |
:1005A0008F008D0A03198F0A0313932A031703136D |
:1005B00008002B08003A0319ED2A013A0319042B0D |
:1005C000033A03191B2B013A03193A2B073A031973 |
:1005D000512B013A0319682B872BAB0ABE0140301F |
:1005E000BF0024210230BA00FA20393003178D00F1 |
:1005F00000308F0003139322BE010330BF0024217B |
:100600000230BA00FA20882BAB0ABE014030BF008E |
:1006100024210230BA00FA203E3003178D0000304A |
:100620008F0003139322BE010330BF002421023048 |
:10063000BA00FA20882BAB0ABE014030BF0024214B |
:100640000230BA00FA20433003178D0000308F00CB |
:1006500003139322BE010330BF0024210230BA00ED |
:10066000FA208316851283128516831605128312CB |
:100670000516882BAB0ABE014030BF002421023092 |
:10068000BA00FA20483003178D0000308F000313A2 |
:100690009322BE010330BF0024210230BA00FA20A9 |
:1006A000882BAB0ABE014030BF0024210230BA00C3 |
:1006B000FA204D3003178D0000308F000313932272 |
:1006C000BE010330BF0024210230BA00FA20882B7B |
:1006D000AB01BE014030BF0024210230BA00FA2035 |
:1006E000523003178D0000308F0003139322BE0198 |
:1006F0000330BF0024210230BA00FA20831685128D |
:10070000831285128316051283120512882BAB0102 |
:100710008A110A127D2F3A080319FB2BC2003E08EA |
:100720000319FB2BC20703189C2B7F30C202031C4A |
:10073000FB2B0319FB2BA02B8130C2070318FB2BCB |
:100740004208F700F801F901FA013B08C600C61794 |
:100750003C08C5003D08C4001830C200C301441C59 |
:10076000C92B4108FA07031CBB2BF90A031DBB2B3D |
:10077000F80A0319C3174008F907031CC22BF80A2B |
:100780000319C3173F08BC00BC173C08F80703183F |
:10079000C317C30DF80CF90CFA0CC60CC50CC40C2D |
:1007A0000310C20BAE2B0130F7070318FB2BF81B0D |
:1007B000E02BC60DFA0DF90DF80DF7030319FB2B0D |
:1007C000C61FF12BFA0A031DF12BF90A031DF12BA9 |
:1007D000F80A031DF12BF80CF90CFA0CF70A0319AF |
:1007E000FB2B3B08C3003F08C306C31FF92BF817B8 |
:1007F000FF2BF813FF2BF701F801F901FA010800AC |
:1008000048080319C52CD4004C080319C52CD40280 |
:10081000031C0F2C7F30D4070318C52C152C8130F6 |
:10082000D402031CC52C0319C52C5408F700F80189 |
:10083000F901FA01D3014908D200D2174A08D100C0 |
:100840004B08D0001930D4004F08D0020318382CC0 |
:100850000130D1020318382CD2020318382CD302ED |
:100860000318382CD30AD20AD10A4F08D0076A2CB1 |
:100870004E08D1020318532C0130D2020318532C16 |
:10088000D3020318532CD30AD20A4E08D1074F08BB |
:10089000D007031C6A2CD10A031D6A2CD20A031D3F |
:1008A0006A2CD30A6A2C4D088038D2020318692CAE |
:1008B0000130D3020318692CD30A4D088038D207BF |
:1008C0004E08D107031C472CD20A031D472CD30A1C |
:1008D000472C7A14D40B6D2C782C0310D00DD10D2D |
:1008E000D20DD30D0310FA0DF90DF80DD50D242CF2 |
:1008F000551C802C0310F80CF90CFA0CD50C832C29 |
:10090000F7030319C52CD51BAC2C0310D00DD10D4A |
:10091000D20DD30D4F08D0020318982C0130D1020C |
:100920000318982CD2020318982CD302031CBB2C5A |
:100930004E08D1020318A32C0130D2020318A32CB5 |
:10094000D302031CBB2C4D088038D2020318AC2CF8 |
:100950000130D302031CBB2CFA0A031DBB2CF90A7D |
:10096000031DBB2CF80A031DBB2CF70A0319C52C69 |
:10097000F80CF90CFA0C4908D4004D08D406D41F21 |
:10098000C32CF817C92CF813C92CF701F801F90189 |
:10099000FA01080080308318CD06D201D30149083E |
:1009A000D1004D08D10648080319BA2DD000F70030 |
:1009B0004C080319C32DD00203195F2D031C1D2DF4 |
:1009C0004D08D600D6174E08D5004F08D400D301E5 |
:1009D0000310D60CD50CD40CD30CD00BE72CD11FA4 |
:1009E000F42C5214D72D5210501052164B30840054 |
:1009F0008313EC2D5212D11B072D501C122DD60C37 |
:100A0000D50CD40CD30CF70A0319D22D122DD61BFA |
:100A1000152D0310D30DD40DD50DD60DF7030319E5 |
:100A2000D22D072D52177F2D52134908D100D11F07 |
:100A30001B2DD617CB2DD613CB2D4C08D000F7008D |
:100A40004808D0024908D600D6174A08D5004B08F6 |
:100A5000D400D3010310D60CD50CD40CD30CD00B7E |
:100A6000292DD11F362DD214D72DD2105010D216C9 |
:100A70004F3084008313EC2DD212D11B492D501C12 |
:100A8000542DD60CD50CD40CD30CF70A0319D22D47 |
:100A9000542DD61B572D0310D30DD40DD50DD60DC7 |
:100AA000F7030319D22D492DD2177F2DD2134D08EC |
:100AB000D100D11F5D2DD617CB2DD613CB2D4D08D0 |
:100AC000D600D6174E08D5004F08D400D11F6C2D84 |
:100AD000D6135215D72D5211D30150104B3084002C |
:100AE0008313EC2DD11B952D4908D100501C7F2D6F |
:100AF000D60CD50CD40CD30CF70A0319D22DD31F66 |
:100B0000902DD40A031D902DD50A031D902DD60AD1 |
:100B1000031D902DD60CD50CD40CF70A0319D22D39 |
:100B2000521B142DD21B562DB42D8030D606D61F45 |
:100B30009D2DD72D4D08D100AA2D4908D100D608EA |
:100B4000031DAA2DD508031DAA2DD408031DAA2D07 |
:100B5000F701CB2DD61BB42D0310D30DD40DD50D1D |
:100B6000D60DF70BAA2DD22DD11FB82DD617CB2D10 |
:100B7000D613CB2D4C08F7004D08D6004E08D500F3 |
:100B80004F08D400CB2D4808F7004908D6004A0882 |
:100B9000D5004B08D4005608F8005508F900540851 |
:100BA000FA000A2EF701F801F901FA010A2ED30121 |
:100BB000D409D509D609D309D30A031DE52DD40AD2 |
:100BC000031DE52DD50A0319D60A5218F32CD218A5 |
:100BD000352D52196B2D9A2D0008D407031CF62DC4 |
:100BE000D50A031DF62DD60A0319501484030008F4 |
:100BF000D507031CFE2DD60A0319501484030008E0 |
:100C0000801F803AD60703185014521AFA2CD21AB1 |
:100C10003C2D722D08004908D0004D08D006D01F89 |
:100C2000162E03110310C91B0314492E4908D000C6 |
:100C30004C08D1004808D1020319242ED01F492E98 |
:100C40000308013A8300492E4D08D1004908D1021A |
:100C50000319302ED01F492E0308013A8300492E74 |
:100C60004E08D1004A08D10203193C2ED01F492E4C |
:100C70000308013A8300492E4F08D1004B08D102E6 |
:100C80000319482ED01F492E0308013A8300492E2C |
:100C900003100800831603178C170C1400000000C3 |
:100CA0000318792E83120C087F390313B100031740 |
:100CB0000D080313B20003170F080313B300310824 |
:100CC000B900B921320803178D0003133308031745 |
:100CD0008F0083168C170C1400000000831203137E |
:100CE000B00B732E762E83160317792E982E83164B |
:100CF000031783120C0D0E0D7F390313B100031778 |
:100D00000D080313B20003170F080313B3003108D3 |
:100D1000B900B921320803178D00031333080317F4 |
:100D20008F008D0A03198F0A03100313B00B4A2E8C |
:100D30000800B8010408B7003810831B3814B11F2D |
:100D4000A92EB717371EB70AB009B109B00A03199F |
:100D5000B10A310EF038B300B307E23EB400323EC0 |
:100D6000B60031080F39B407B407B607E93EB5003D |
:100D7000B507B507300E0F39B507B607B50DB60D77 |
:100D8000B609B60D30080F39B607B30D0730B200FB |
:100D90000A30B607B503031CC92EB507B403031CFC |
:100DA000CD2EB407B303031CD12EB307B203031C2B |
:100DB000D52E323084008313073037053713840370 |
:100DC0003705031DEA2E371A840A371AEA2E203017 |
:100DD000F700072F8407363004020319371700087D |
:100DE000F700031DFB2E371BFB2E371A152FB719E3 |
:100DF000FB2E2030062FB71F032F2D30F700840362 |
:100E00003713B713072FB71537123030F707B10173 |
:100E10000408B0003110831B31147708B900B921E0 |
:100E200030088400831331188317840A371FEB2E90 |
:100E30008A110A129A2F840183131F308305AB0194 |
:100E4000AC0183161F149F141F159F1107309C00BF |
:100E5000FF308312A700A5288316851283128516FA |
:100E600083160512831205163C29BE014830BF00C7 |
:100E700024210230BA00FA208E3003178D00003092 |
:100E80008F0003138129BE010330BF0024210230EB |
:100E9000BA00FA20973003178D0000308F0003133B |
:100EA000E429AF012830AE002C2A0230AE00963083 |
:100EB000BA00FA20AE0B572F2D082A0203197C2FF7 |
:100EC0002A08AD000930BA000130BB00A82128086B |
:100ED000AE001130AF005E223A30B900B9212908C6 |
:100EE000AE000130AF005E223A30B900B9212A08C5 |
:100EF000AE000130AF005E22D92A0130BA000230C4 |
:100F0000BB00A8218A1500288A117908AF0078084B |
:100F1000AE009C3003178D0000308F0003100930A5 |
:100F20000313B0004A26103084002F08B1002E08A9 |
:100F3000B000992EA23003178D0000308F000310EF |
:0C0F400004300313B0004A26552F630054 |
:10100000B701B601B80138081F3C031C19281F1589 |
:101010001F19082883161E088312B6071E08031816 |
:101020001E0FB7071030F700F70B14280000B80A9E |
:101030000328370CFA00360CF900FA0CF90CFA0CFC |
:10104000F90CFA0CF90CFA0CF90C0730FA057908CE |
:10105000F8007A08F9007908FA007808B6007A08EA |
:10106000B7008E30F7003708F8003608F900FA01AB |
:10107000F808031D45287908F800F9010830F7023F |
:10108000F808031D4528F7014D280310F81B4C28CC |
:10109000F90DF80DF7034528F813BD01BC01BB019C |
:1010A0007F30BA007A08C1007908C0007808BF0014 |
:1010B0007708BE008A118B238A157708B600780856 |
:1010C000B7007908B8007A08B900BD003808BC003C |
:1010D0003708BB003608BA00C101E030C00012304A |
:1010E000BF008A30BE008A118B238A157708B600AC |
:1010F0007808B7007908B8007A08B900CB0038083A |
:10110000CA003708C9003608C800CF01CE01CD019A |
:101110008930CC008A1100248A157A08B100790838 |
:10112000B0007808AF007708AE003108CB00300877 |
:10113000CA002F08C9002E08C800CF01CE017A309E |
:10114000CD008830CC008A1100248A158314CB018D |
:10115000CA01C9017F30C8007A08CF007908CE00E3 |
:101160007808CD007708CC008A11CA248A150A3085 |
:10117000BD00BF30BC009B30BB006C30BA007A08A9 |
:10118000C1007908C0007808BF007708BE008A1146 |
:101190008B238A158314B430CB001D30CA00C901DB |
:1011A0006F30C8007A08CF007908CE007808CD00EB |
:1011B0007708CC008A11CA248A157708B600780807 |
:1011C000B7007908B8007A08B9003908BD003808B6 |
:1011D000BC003708BB003608BA003D08CB003C080D |
:1011E000CA003B08C9003A08C800CF01CE01CD01B2 |
:1011F000CC018A110B268A1503180029031D052925 |
:10120000F701F801F901FA0183293D08C1003C0802 |
:10121000C0003B08BF003A08BE00C7013E30C60010 |
:10122000460884008313471883170008CB01CA00BF |
:101230007F30CA070318CB0A03104B0CFA004A0C84 |
:10124000F900CA00460884008313471883174A0828 |
:1012500080004108C5004008C4003F08C3003E08A4 |
:10126000C2003D08CB003C08CA003B08C9003A0850 |
:10127000C8004108CF004008CE003F08CD003E081E |
:10128000CC008A1100248A1583104108CB00400845 |
:10129000CA003F08C9003E08C8007A08CF00790894 |
:1012A000CE007808CD007708CC008A11CA248A15B0 |
:1012B0007A08C1007908C0007808BF007708BE002E |
:1012C0004608840083134718831780034508CB0022 |
:1012D0004408CA004308C9004208C8004108CF00BA |
:1012E0004008CE003F08CD003E08CC008A110B26F6 |
:1012F0008A15031D29294208F7004308F80044080D |
:10130000F9004508FA00B7010408B6003710831B3E |
:1013100037148310D930CB000E30CA008030C9009A |
:101320007730C8007A08CF007908CE007808CD0061 |
:101330007708CC008A11CA248A15360884008313E2 |
:10134000371883177708B8007808B9007908BA0009 |
:101350007A08BB00CB003A08CA003908C90038082F |
:10136000C800CF01CE01CD018030CC008A1100240D |
:101370008A157708B8007808B9007908BA007A08A1 |
:10138000BB00CB003A08CA003908C9003808C800B9 |
:101390000A30CF00BF30CE009B30CD006A30CC0089 |
:1013A0008A1100248A157A08B5007908B4007808F3 |
:1013B000B3007708B2003508B9003408B800330824 |
:1013C000B7003208B6008E30F7003608F70237084B |
:1013D000F9003808F800F917F7080319FA2903107B |
:1013E000F908031DF629F8080319FA29F90CF80C75 |
:1013F000F70BEF29B71F012AF809F909F80A0319B1 |
:0A140000F90A79088A110A12842FF4 |
:02400E003A3F37 |
:00000001FF |
;PIC16F877A |
;CRC=6382 CREATED="04-IV-11 18:23" |
/Designs/Tools/reflow2/SW/LCD.C |
---|
0,0 → 1,318 |
// LCD modul pro ovladani dvouradkoveho LCD modulu se standardnim Hitachi radicem |
// (c)miho 2002,2005 |
// |
// Historie: |
// |
// 0.00 Uvodni verze se snadnou definici portu LCD displeje |
// 0.01 Oprava portu (zapomenute stare identifikatory) |
// 0.02 Doplnena moznost pripojeni datoveho portu LCD na libovolne porty |
// 0.03 Doplnena procedura lcd_clr pro smazani displeje |
// |
// |
// Funkce: |
// |
// lcd_init() inicializuje LCD displej a porty, nutno volat jako prvni |
// |
// lcd_putc(c) zapis snaku do lcd displeje, zpracovava nasledujici ridici znaky |
// \f = \x0C - nova stranka - smazani displeje |
// \n = \x0A - odradkovani (prechod na druhou radku) |
// \b = \x08 - backspace - posunuti kurzoru o 1 pozici zpet |
// \r = \x0D - goto home to position 1,1 |
// \0 .. \7 - definovatelne znaky v pozicich 0 az 7 v CGRAM |
// \20 .. \27 - alternativne zapsane znaky (oktalove) v pozicich 0 az 7 CGRAM |
// Pozor na to, ze funkce printf konci tisk pokud narazi na \0 (konec retezce) |
// |
// lcd_gotoxy(x,y) presune kurzor na uvedenou adresu |
// nekontroluje parametry |
// |
// lcd_cursor_on zapne kurzor |
// lcd_cursor_off vypne kurzor |
// |
// lcd_clr smaze displej |
// |
// lcd_define_char(Index, Def) Makro, ktere definuje znaky od pozice Index obsahem definicniho |
// retezce Def. Kazdych 8 znaku retezce Def definuje dalsi znak v CGRAM. |
// Kapacita CGRAM je celkem 8 znaku s indexem 0 az 7. |
// Na konci se provede lcd_gotoxy(1,1). |
// Na konci teto knihovny je priklad pouziti definovanych znaku |
// |
// |
// Definice portu: // Datovy port displeje pripojeny na 4 bity za sebou na jeden port |
// |
// #define LCD_RS PIN_B2 // rizeni registru LCD displeje |
// #define LCD_E PIN_B1 // enable LCD displeje |
// #define LCD_DATA_LSB PIN_C2 // pripojeni LSB bitu datoveho portu LCD displeje (celkem 4 bity vzestupne za sebou) |
// |
// |
// Alternativni definice: // Datovy port displeje pripojeny na libovolne 4 bitove porty (vede na kod delsi asi o 25 slov) |
// |
// #define LCD_RS PIN_B2 // rizeni registru LCD displeje |
// #define LCD_E PIN_B1 // enable LCD displeje |
// #define LCD_D0 PIN_C2 // D0 - datove bity pripojene na libovolne porty |
// #define LCD_D1 PIN_C3 // D1 |
// #define LCD_D2 PIN_C4 // D2 |
// #define LCD_D3 PIN_C5 // D3 |
// Privatni sekce, cist jen v pripade, ze neco nefunguje |
#ifdef LCD_DATA_LSB |
// Generovane defince portu pro ucely teto knihovny aby kod generoval spravne IO operace a soucasne |
// bylo mozne jednoduse deklarovat pripojene piny LCD displeje pri pouziti teto knihovny. Problem spociva |
// v tom, ze se musi spravne ridit smery portu a soucasne datovy port zabira jen 4 bity ze zadaneho portu |
// |
#define LCD_SHIFT (LCD_DATA_LSB&7) // pocet bitu posuvu datoveho kanalu v datovem portu |
#define LCD_PORT (LCD_DATA_LSB>>3) // adresa LCD datoveho portu |
#define LCD_TRIS (LCD_PORT+0x80) // adresa prislusneho TRIS registru |
#define LCD_MASK (0xF<<LCD_SHIFT) // maska platnych bitu |
// |
#if LCD_SHIFT>4 // kontrola mezi |
#error LCD data port LSB bit not in range 0..4 |
#endif |
#endif |
// Definice konstant pro LCD display |
// |
#define LCD_CURSOR_ON_ 0x0E // kurzor jako blikajici radka pod znakem |
#define LCD_CURSOR_OFF_ 0x0C // zadny kurzor |
#define LCD_LINE_2 0x40 // adresa 1. znaku 2. radky |
// Definice rezimu LCD displeje |
// |
BYTE const LCD_INIT_STRING[4] = |
{ |
0x28, // intrfejs 4 bity, 2 radky, font 5x7 |
LCD_CURSOR_OFF_, // display on, kurzor off, |
0x01, // clear displeje |
0x06 // inkrement pozice kurzoru (posun kurzoru doprava) |
}; |
// Odesle nibble do displeje (posle data a klikne signalem e) |
// |
void lcd_send_nibble( BYTE n ) |
{ |
#ifdef LCD_DATA_LSB |
// data jsou za sebou na 4 bitech jednoho portu |
*LCD_PORT = (*LCD_PORT & ~LCD_MASK) | ((n << LCD_SHIFT) & LCD_MASK); // nastav datove bity portu a ostatni zachovej |
#else |
// data jsou na libovolnych 4 bitech libovolnych portu |
output_bit(LCD_D0,bit_test(n,0)); |
output_bit(LCD_D1,bit_test(n,1)); |
output_bit(LCD_D2,bit_test(n,2)); |
output_bit(LCD_D3,bit_test(n,3)); |
#endif |
output_bit(LCD_E,1); // vzestupna hrana |
delay_us(1); // pockej alespon 450ns od e nebo alespon 195ns od dat |
output_bit(LCD_E,0); // sestupna hrana (minimalni perioda e je 1us) |
} |
// Odesle bajt do registru LCD |
// |
// Pokud je Adr=0 .. instrukcni registr |
// Pokud je Adr=1 .. datovy registr |
// |
void lcd_send_byte( BOOLEAN Adr, BYTE n ) |
{ |
output_bit(LCD_RS,Adr); // vyber registr |
swap(n); |
lcd_send_nibble(n); // posli horni pulku bajtu |
swap(n); |
lcd_send_nibble(n); // posli spodni pulku bajtu |
delay_us(40); // minimalni doba na provedeni prikazu |
} |
// Provede inicializaci LCD displeje, smaze obsah a nastavi mod displeje |
// |
// Tato procedura se musi volat pred pouzitim ostatnich lcd_ procedur |
// |
void lcd_init() |
{ |
int i; // pocitadlo cyklu |
delay_ms(200); // spozdeni pro provedeni startu displeje po zapnuti napajeni |
#ifdef LCD_DATA_LSB |
// data jsou na 4 bitech za sebou, nastav smer pro vsechny dalsi prenosy |
*LCD_TRIS = *LCD_TRIS & ~LCD_MASK; // nuluj odpovidajici bity tris registru datoveho portu LCD |
#endif |
output_bit(LCD_RS,0); // nastav jako vystup a nastav klidovy stav |
output_bit(LCD_E, 0); // nastav jako vystup a nastav klidovy stav |
for (i=0; i<3; i++) // nastav lcd do rezimu 8 bitu sbernice |
{ |
delay_ms(2); // muze byt rozdelany prenos dat (2x 4 bity) nebo pomaly povel |
lcd_send_nibble(3); // rezim 8 bitu |
} |
delay_us(40); // cas na zpracovani |
lcd_send_nibble(2); // nastav rezim 4 bitu (plati od nasledujiciho prenosu) |
delay_us(40); // cas na zpracovani |
for (i=0;i<3;i++) // proved inicializaci (nastaveni modu, smazani apod) |
{ |
lcd_send_byte(0,LCD_INIT_STRING[i]); |
delay_ms(2); |
} |
} |
// Proved presun kurzoru |
// |
// Pozice 1.1 je domu |
// |
void lcd_gotoxy( BYTE x, BYTE y) |
{ |
BYTE Adr; |
Adr=x-1; |
if(y==2) |
Adr+=LCD_LINE_2; |
lcd_send_byte(0,0x80|Adr); |
} |
// Zapis znaku na displej, zpracovani ridicich znaku |
// |
void lcd_putc( char c) |
{ |
switch (c) |
{ |
case '\f' : lcd_send_byte(0,1); // smaz displej |
delay_ms(2); |
break; |
case '\n' : lcd_gotoxy(1,2); break; // presun se na 1. znak 2. radky |
case '\r' : lcd_gotoxy(1,1); break; // presun home |
// case '\b' : lcd_send_byte(0,0x10); break; // posun kurzor o 1 zpet |
default : if (c<0x20) c&=0x7; // preklopeni definovatelnych znaku na rozsah 0 az 0x1F |
lcd_send_byte(1,c); break; // zapis znak |
} |
} |
// Zapni kurzor |
// |
void lcd_cursor_on() |
{ |
lcd_send_byte(0,LCD_CURSOR_ON_); |
} |
// Vypni kurzor |
// |
void lcd_cursor_off() |
{ |
lcd_send_byte(0,LCD_CURSOR_OFF_); |
} |
// Smaz displej |
// |
void lcd_clr() |
{ |
lcd_putc('\f'); |
} |
// Definice vlastnich fontu |
// |
// Vlastnich definic muze byt jen 8 do pozic 0 az 7 pameti CGRAM radice lcd displeje |
// Pro snadne definovani jsou pripraveny nasledujici definice a na konci souboru je uveden |
// priklad pouziti definovanych znaku. |
// Pomocna procedura pro posilani ridicich dat do radice displeje |
// |
void lcd_putc2(int Data) |
{ |
lcd_send_byte(1,Data); |
} |
// Pomocne definice pro programovani obsahu CGRAM |
// |
#define lcd_define_start(Code) lcd_send_byte(0,0x40+(Code<<3)); delay_ms(2) |
#define lcd_define_def(String) printf(lcd_putc2,String); |
#define lcd_define_end() lcd_send_byte(0,3); delay_ms(2) |
// Vlastni vykonne makro pro definovani fontu do pozice Index CGRAM s definicnim retezcem Def |
// |
#define lcd_define_char(Index, Def) lcd_define_start(Index); lcd_define_def(Def); lcd_define_end(); |
// Pripravene definice fontu vybranych znaku |
// V tabulce nesmi byt 00 (konec retezce v printf()), misto toho davame 80 |
// |
#define LCD_CHAR_BAT100 "\x0E\x1F\x1F\x1F\x1F\x1F\x1F\x1F" /* symbol plne baterie */ |
#define LCD_CHAR_BAT50 "\x0E\x1F\x11\x11\x13\x17\x1F\x1F" /* symbol polovicni baterie */ |
#define LCD_CHAR_BAT20 "\x0E\x1F\x11\x11\x11\x11\x1F\x1F" /* symbol baterie 20% */ |
#define LCD_CHAR_BAT40 "\x0E\x1F\x11\x11\x11\x1F\x1F\x1F" /* symbol baterie 40% */ |
#define LCD_CHAR_BAT60 "\x0E\x1F\x11\x11\x1F\x1F\x1F\x1F" /* symbol baterie 60% */ |
#define LCD_CHAR_BAT80 "\x0E\x1F\x11\x1F\x1F\x1F\x1F\x1F" /* symbol baterie 80% */ |
#define LCD_CHAR_BAT0 "\x0E\x1F\x11\x11\x11\x11\x11\x1F" /* symbol vybite baterie */ |
#define LCD_CHAR_UP "\x80\x04\x0E\x15\x04\x04\x04\x80" /* symbol sipka nahoru */ |
#define LCD_CHAR_DOWN "\x80\x04\x04\x04\x15\x0E\x04\x80" /* symbol Sipka dolu */ |
#define LCD_CHAR_LUA "\x04\x0E\x11\x11\x1F\x11\x11\x80" /* A s carkou */ |
#define LCD_CHAR_LLA "\x01\x02\x0E\x01\x1F\x11\x0F\x80" /* a s carkou */ |
#define LCD_CHAR_HUC "\x0A\x0E\x11\x10\x10\x11\x0E\x80" /* C s hackem */ |
#define LCD_CHAR_HLC "\x0A\x04\x0E\x10\x10\x11\x0E\x80" /* c s hackem */ |
#define LCD_CHAR_HUD "\x0A\x1C\x12\x11\x11\x12\x1C\x80" /* D s hackem */ |
#define LCD_CHAR_HLD "\x05\x03\x0D\x13\x11\x11\x0F\x80" /* d s hackem */ |
#define LCD_CHAR_LUE "\x04\x1F\x10\x10\x1E\x10\x1F\x80" /* E s carkou */ |
#define LCD_CHAR_LLE "\x01\x02\x0E\x11\x1F\x10\x0E\x80" /* e s carkou */ |
#define LCD_CHAR_HUE "\x0A\x1F\x10\x1E\x10\x10\x1F\x80" /* E s hackem */ |
#define LCD_CHAR_HLE "\x0A\x04\x0E\x11\x1F\x10\x0E\x80" /* e s hackem */ |
#define LCD_CHAR_LUI "\x04\x0E\x04\x04\x04\x04\x0E\x80" /* I s carkou */ |
#define LCD_CHAR_LLI "\x02\x04\x80\x0C\x04\x04\x0E\x80" /* i s carkou */ |
#define LCD_CHAR_HUN "\x0A\x15\x11\x19\x15\x13\x11\x80" /* N s hackem */ |
#define LCD_CHAR_HLN "\x0A\x04\x16\x19\x11\x11\x11\x80" /* n s hackem */ |
#define LCD_CHAR_LUO "\x04\x0E\x11\x11\x11\x11\x0E\x80" /* O s carkou */ |
#define LCD_CHAR_LLO "\x02\x04\x0E\x11\x11\x11\x0E\x80" /* o s carkou */ |
#define LCD_CHAR_HUR "\x0A\x1E\x11\x1E\x14\x12\x11\x80" /* R s hackem */ |
#define LCD_CHAR_HLR "\x0A\x04\x16\x19\x10\x10\x10\x80" /* r s hackem */ |
#define LCD_CHAR_HUS "\x0A\x0F\x10\x0E\x01\x01\x1E\x80" /* S s hackem */ |
#define LCD_CHAR_HLS "\x0A\x04\x0E\x10\x0E\x01\x1E\x80" /* s s hackem */ |
#define LCD_CHAR_HUT "\x0A\x1F\x04\x04\x04\x04\x04\x80" /* T s hackem */ |
#define LCD_CHAR_HLT "\x0A\x0C\x1C\x08\x08\x09\x06\x80" /* t s hackem */ |
#define LCD_CHAR_LUU "\x02\x15\x11\x11\x11\x11\x0E\x80" /* U s carkou */ |
#define LCD_CHAR_LLU "\x02\x04\x11\x11\x11\x13\x0D\x80" /* u s carkou */ |
#define LCD_CHAR_CUU "\x06\x17\x11\x11\x11\x11\x0E\x80" /* U s krouzkem */ |
#define LCD_CHAR_CLU "\x06\x06\x11\x11\x11\x11\x0E\x80" /* u s krouzkem */ |
#define LCD_CHAR_LUY "\x02\x15\x11\x0A\x04\x04\x04\x80" /* Y s carkou */ |
#define LCD_CHAR_LLY "\x02\x04\x11\x11\x0F\x01\x0E\x80" /* y s carkou */ |
#define LCD_CHAR_HUZ "\x0A\x1F\x01\x02\x04\x08\x1F\x80" /* Z s hackem */ |
#define LCD_CHAR_HLZ "\x0A\x04\x1F\x02\x04\x08\x1F\x80" /* z s hackem */ |
#define LCD_CHAR_STUPEN "\x06\x09\x09\x06\x80\x80\x80\x80" /* ° stupen C */ |
// Priklad pouziti definovanych znaku |
// |
// |
//void lcd_sample() |
//{ |
// lcd_define_char(0,LCD_CHAR_BAT50); // Priklad definice znaku baterie do pozice 0 |
// lcd_define_char(2,LCD_CHAR_HLE LCD_CHAR_LUI); // Priklad definice znaku e s hackem a I s carkou od pozice 2 |
// // vsimnete si, ze neni carka mezi retezci s definici (oba retezce definuji |
// // jediny definicni retezec) |
// printf(lcd_putc,"\fZnaky:\20\22\23"); // priklad vypisu znaku z pozice 0, 2 a 3 |
// delay_ms(1000); |
// lcd_define_char(0,LCD_CHAR_BAT0); // Predefinovani tvaru znaku v pozici 0 |
// delay_ms(1000); |
//} |
/Designs/Tools/reflow2/SW/reflow.h |
---|
0,0 → 1,15 |
#include <16F877A.h> |
#device adc=10 |
#FUSES NOWDT //No Watch Dog Timer |
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) |
#FUSES NOPUT //No Power Up Timer |
#FUSES NOPROTECT //Code not protected from reading |
#FUSES NODEBUG //No Debug mode for ICD |
#FUSES NOBROWNOUT //No brownout reset |
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O |
#FUSES NOCPD //No EE protection |
#FUSES NOWRT //Program memory not write protected |
#use delay(clock=4000000) |
/Designs/Tools/reflow2/SW/reflow.c |
---|
0,0 → 1,185 |
#include "reflow.h" |
#include <math.h> |
// nastaveni teplot a casu |
#define TEPLOTA_PREDEHREVU 120 |
#define DOBA_PREDEHREVU 60 |
#define TEPLOTA_VRCHOLU 210 |
#define DOBA_VRCHOLU 5 |
// CPU IO rozhrani |
#define LCD_RS PIN_C1 // rizeni registru LCD displeje |
#define LCD_E PIN_C2 // enable LCD displeje |
#define LCD_DATA_LSB PIN_D0 // data LCD |
#include "lcd.c" |
#define TL1 PIN_B3 // tlacitko S1 |
#define TL2 PIN_B2 // tlacitko S2 |
#define TL3 PIN_B1 // tlacitko S3 |
#define TL4 PIN_B0 // tlacitko S4 |
#define POWER_T4 PIN_A5 // ovladani optotriaku T4 |
#define POWER_T5 PIN_A4 // ovladani optotriaku T5 |
#define ADC_PIN PIN_A0 //info, nelze menit - pin pouzit jako input analog |
#define ADC_PIN_NC PIN_A1 //info, nelze menit - pin pouzit jako input analog |
#define REF_PIN PIN_A3 //info, nelze menit - pin pouzit jako input reference 2.5V |
// interni |
#define PowerOn() output_low(POWER_T4);output_low(POWER_T5) |
#define PowerOff() output_high(POWER_T4);output_high(POWER_T5) |
// globalni promenne |
struct time |
{ |
volatile unsigned int8 hod; |
volatile unsigned int8 min; |
volatile unsigned int8 sec; |
}cas; |
// funkce |
void GeneralCpuInit() |
{ |
output_high(POWER_T4); |
output_high(POWER_T5); |
port_b_pullups(true); |
setup_psp(PSP_DISABLED); |
setup_spi(SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); //nepouzit |
setup_timer_1(T1_DISABLED); //nepouzit |
setup_timer_2(T2_DIV_BY_16,249,10); //rtc 40ms |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
enable_interrupts(GLOBAL); |
enable_interrupts(INT_TIMER2); |
setup_adc_ports(AN0_AN1_VSS_VREF); //A0 vstup cidla, A1 nepozit, A3 - ref. 2.5V |
setup_adc(ADC_CLOCK_DIV_8); |
SET_ADC_CHANNEL(0); //AN0, PIN_A0 |
} |
unsigned int16 adc(void) |
{ |
unsigned int16 analog; |
unsigned int8 a; |
analog = 0; |
for (a=0;a<32;a++) |
{ |
analog += read_adc(); |
delay_us(50); |
} |
return (analog >> 5 ); // prumer = analog/32 |
} |
int16 teplota(void) |
{ |
float32 Rpt; |
float32 Tpt; |
Rpt = 1.0*adc()*2350.0/1024.0; //zapojeni OZ -> R=U/Iconst |
#define A 3.90802e-3 |
#define B -5.802e-7 |
Tpt = (-A + sqrt(A*A - 4*B*(1.0 - Rpt/1000.0)))/2.0/B; |
return (unsigned int16)Tpt; |
} |
void baterie(void) |
{ |
static int8 stav=0; |
switch (stav) |
{ |
case 0: stav++; |
lcd_define_char(0,LCD_CHAR_BAT0); |
break; |
case 1: stav++; |
lcd_define_char(0,LCD_CHAR_BAT20); |
break; |
case 2: stav++; |
lcd_define_char(0,LCD_CHAR_BAT40); |
PowerOff(); |
break; |
case 3: stav++; |
lcd_define_char(0,LCD_CHAR_BAT60); |
break; |
case 4: stav++; |
lcd_define_char(0,LCD_CHAR_BAT80); |
break; |
case 5: stav=0; |
lcd_define_char(0,LCD_CHAR_BAT100); |
PowerOn(); |
break; |
default: stav=0; |
} |
} |
#int_TIMER2 |
void Rtc(void) //40ms |
{ |
static unsigned int8 ms40=0; |
struct time* time; |
time=&cas; |
if ( ++ms40 < 25) return; |
ms40=0; |
if (++(time->sec) >= 60) |
{ |
time->sec=0; //1min |
if (++(time->min) >= 60) |
{ |
time->min = 0; //1hod |
(time->hod)++; |
} |
} |
} |
void nullcas(struct time* time) |
{ |
disable_interrupts(INT_TIMER2); |
time->sec=0; |
time->hod=0; |
time->min=0; |
enable_interrupts(INT_TIMER2); |
} |
// start |
void main() |
{ |
int8 tmp; |
GeneralCpuInit(); |
PowerOff(); |
lcd_init(); |
lcd_define_char(1,LCD_CHAR_STUPEN); |
printf(lcd_putc,"\fbatt: \20"); |
nullcas(&cas); |
for (;;){ |
delay_ms(300); |
if (cas.sec != tmp){ |
tmp=cas.sec; |
lcd_gotoxy(9,1); |
printf(lcd_putc,"%2u:%02u:%02u",cas.hod,cas.min,cas.sec); |
} |
baterie(); |
lcd_gotoxy(1,2); |
printf(lcd_putc,"teplota: %ld\21C ",teplota()); |
} |
} |