首次提交

This commit is contained in:
2022-05-24 10:03:04 +08:00
parent bbfd7746dc
commit 2b7223722e
26 changed files with 2241 additions and 0 deletions

9
.gitignore vendored
View File

@@ -52,3 +52,12 @@ Module.symvers
Mkfile.old
dkms.conf
.vscode/c_cpp_properties.json
.vscode/keil-assistant.log
.vscode/uv4.log.lock
!Release/*
*.uvgui.*
Objects/
Listings/

411
220V_Controller.uvopt Normal file
View File

@@ -0,0 +1,411 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<TargetOption>
<CLK51>35000000</CLK51>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim>
<RunTarget>0</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>0</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>120</PageWidth>
<PageLength>65</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\Listings\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>0</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>0</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<nTsel>10</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\STCMON51.DLL</pMon>
</DebugOpt>
<Breakpoint/>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>0</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>0</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<Lin2Executable></Lin2Executable>
<Lin2ConfigFile></Lin2ConfigFile>
<bLin2Auto>0</bLin2Auto>
</TargetOption>
</Target>
<Group>
<GroupName>Source Group</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\DS18B20.c</PathWithFileName>
<FilenameWithoutPath>DS18B20.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\public.c</PathWithFileName>
<FilenameWithoutPath>public.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\Sys_Init.c</PathWithFileName>
<FilenameWithoutPath>Sys_Init.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\Timer0.c</PathWithFileName>
<FilenameWithoutPath>Timer0.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\Timer2.c</PathWithFileName>
<FilenameWithoutPath>Timer2.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\PWM.c</PathWithFileName>
<FilenameWithoutPath>PWM.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\HeatingSetting.c</PathWithFileName>
<FilenameWithoutPath>HeatingSetting.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\TM1650.c</PathWithFileName>
<FilenameWithoutPath>TM1650.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\IIC.c</PathWithFileName>
<FilenameWithoutPath>IIC.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>Header Group</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\main.h</PathWithFileName>
<FilenameWithoutPath>main.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\DS18B20.h</PathWithFileName>
<FilenameWithoutPath>DS18B20.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\public.h</PathWithFileName>
<FilenameWithoutPath>public.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\Sys_Init.h</PathWithFileName>
<FilenameWithoutPath>Sys_Init.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>15</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\Timer0.h</PathWithFileName>
<FilenameWithoutPath>Timer0.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>16</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\Timer2.h</PathWithFileName>
<FilenameWithoutPath>Timer2.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\PWM.h</PathWithFileName>
<FilenameWithoutPath>PWM.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>18</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\HeatingSetting.h</PathWithFileName>
<FilenameWithoutPath>HeatingSetting.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>19</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\TM1650.h</PathWithFileName>
<FilenameWithoutPath>TM1650.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>20</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\App\IIC.h</PathWithFileName>
<FilenameWithoutPath>IIC.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

477
220V_Controller.uvproj Normal file
View File

@@ -0,0 +1,477 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
<SchemaVersion>1.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<TargetOption>
<TargetCommonOption>
<Device>STC15F104W Series</Device>
<Vendor>STC</Vendor>
<Cpu>IRAM(0-0x7F) IROM(0-0xFF8) CLOCK(35000000)</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>62101</DeviceId>
<RegisterFile>STC15F2K60S2.H</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile></SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath>STC\</RegisterFilePath>
<DBRegisterFilePath>STC\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>220V_Controller</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\Listings\</ListingPath>
<HexFormatSelection>0</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
<nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
<nStopB2X>0</nStopB2X>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
<BankNo>65535</BankNo>
</CommonProperty>
<DllOption>
<SimDllName>S8051.DLL</SimDllName>
<SimDllArguments></SimDllArguments>
<SimDlgDll>DP51.DLL</SimDlgDll>
<SimDlgDllArguments>-pDR8051</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TP51.DLL</TargetDlgDll>
<TargetDlgDllArguments>-p51</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>0</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
<Simulator>
<UseSimulator>0</UseSimulator>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>1</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
<RestoreSysVw>1</RestoreSysVw>
</Simulator>
<Target>
<UseTarget>1</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>0</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<RestoreTracepoints>1</RestoreTracepoints>
<RestoreSysVw>1</RestoreSysVw>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>10</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
</SimDlls>
<TargetDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
<Driver>BIN\STCMON51.DLL</Driver>
</TargetDlls>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>0</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
<Capability>0</Capability>
<DriverSelection>-1</DriverSelection>
</Flash1>
<bUseTDR>0</bUseTDR>
<Flash2></Flash2>
<Flash3></Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<Target51>
<Target51Misc>
<MemoryModel>0</MemoryModel>
<RTOS>0</RTOS>
<RomSize>2</RomSize>
<DataHold>0</DataHold>
<XDataHold>0</XDataHold>
<UseOnchipRom>0</UseOnchipRom>
<UseOnchipArithmetic>0</UseOnchipArithmetic>
<UseMultipleDPTR>0</UseMultipleDPTR>
<UseOnchipXram>0</UseOnchipXram>
<HadIRAM>1</HadIRAM>
<HadXRAM>0</HadXRAM>
<HadIROM>1</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>0</Modp2>
<Mod517dp>0</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
<useCB>0</useCB>
<useXB>0</useXB>
<useL251>0</useL251>
<useA251>0</useA251>
<Mx51>0</Mx51>
<ModC812>0</ModC812>
<ModCont>0</ModCont>
<Lp51>0</Lp51>
<useXBS>0</useXBS>
<ModDA>0</ModDA>
<ModAB2>0</ModAB2>
<Mx51P>0</Mx51P>
<hadXRAM2>0</hadXRAM2>
<uocXram2>0</uocXram2>
<ModC2>0</ModC2>
<ModH2>0</ModH2>
<Mdu_R515>0</Mdu_R515>
<Mdu_F120>0</Mdu_F120>
<Psoc>0</Psoc>
<hadIROM2>0</hadIROM2>
<ModSmx2>0</ModSmx2>
<cBanks>0</cBanks>
<xBanks>0</xBanks>
<OnChipMemories>
<RCB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0xffff</Size>
</RCB>
<RXB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</RXB>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocr1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr1>
<Ocr2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr2>
<Ocr3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr3>
<IRO>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0xff9</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x80</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA>
<XRA512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA512>
<IROM512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM512>
</OnChipMemories>
</Target51Misc>
<C51>
<RegisterColoring>0</RegisterColoring>
<VariablesInOrder>0</VariablesInOrder>
<IntegerPromotion>1</IntegerPromotion>
<uAregs>0</uAregs>
<UseInterruptVector>1</UseInterruptVector>
<Fuzzy>3</Fuzzy>
<Optimize>8</Optimize>
<WarningLevel>2</WarningLevel>
<SizeSpeed>1</SizeSpeed>
<ObjectExtend>1</ObjectExtend>
<ACallAJmp>0</ACallAJmp>
<InterruptVectorAddress>0</InterruptVectorAddress>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath>.\App</IncludePath>
</VariousControls>
</C51>
<Ax51>
<UseMpl>0</UseMpl>
<UseStandard>1</UseStandard>
<UseCase>0</UseCase>
<UseMod51>0</UseMod51>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Ax51>
<Lx51>
<useFile>0</useFile>
<linkonly>0</linkonly>
<UseMemoryFromTarget>1</UseMemoryFromTarget>
<CaseSensitiveSymbols>0</CaseSensitiveSymbols>
<WarningLevel>2</WarningLevel>
<DataOverlaying>1</DataOverlaying>
<OverlayString></OverlayString>
<MiscControls></MiscControls>
<DisableWarningNumbers></DisableWarningNumbers>
<LinkerCmdFile></LinkerCmdFile>
<Assign></Assign>
<ReserveString></ReserveString>
<CClasses></CClasses>
<UserClasses></UserClasses>
<CSection></CSection>
<UserSection></UserSection>
<CodeBaseAddress></CodeBaseAddress>
<XDataBaseAddress></XDataBaseAddress>
<PDataBaseAddress></PDataBaseAddress>
<BitBaseAddress></BitBaseAddress>
<DataBaseAddress></DataBaseAddress>
<IDataBaseAddress></IDataBaseAddress>
<Precede></Precede>
<Stack></Stack>
<CodeSegmentName></CodeSegmentName>
<XDataSegmentName></XDataSegmentName>
<BitSegmentName></BitSegmentName>
<DataSegmentName></DataSegmentName>
<IDataSegmentName></IDataSegmentName>
</Lx51>
</Target51>
</TargetOption>
<Groups>
<Group>
<GroupName>Source Group</GroupName>
<Files>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>.\App\main.c</FilePath>
</File>
<File>
<FileName>DS18B20.c</FileName>
<FileType>1</FileType>
<FilePath>.\App\DS18B20.c</FilePath>
</File>
<File>
<FileName>public.c</FileName>
<FileType>1</FileType>
<FilePath>.\App\public.c</FilePath>
</File>
<File>
<FileName>Sys_Init.c</FileName>
<FileType>1</FileType>
<FilePath>.\App\Sys_Init.c</FilePath>
</File>
<File>
<FileName>Timer0.c</FileName>
<FileType>1</FileType>
<FilePath>.\App\Timer0.c</FilePath>
</File>
<File>
<FileName>Timer2.c</FileName>
<FileType>1</FileType>
<FilePath>.\App\Timer2.c</FilePath>
</File>
<File>
<FileName>PWM.c</FileName>
<FileType>1</FileType>
<FilePath>.\App\PWM.c</FilePath>
</File>
<File>
<FileName>HeatingSetting.c</FileName>
<FileType>1</FileType>
<FilePath>.\App\HeatingSetting.c</FilePath>
</File>
<File>
<FileName>TM1650.c</FileName>
<FileType>1</FileType>
<FilePath>.\App\TM1650.c</FilePath>
</File>
<File>
<FileName>IIC.c</FileName>
<FileType>1</FileType>
<FilePath>.\App\IIC.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>Header Group</GroupName>
<Files>
<File>
<FileName>main.h</FileName>
<FileType>5</FileType>
<FilePath>.\App\main.h</FilePath>
</File>
<File>
<FileName>DS18B20.h</FileName>
<FileType>5</FileType>
<FilePath>.\App\DS18B20.h</FilePath>
</File>
<File>
<FileName>public.h</FileName>
<FileType>5</FileType>
<FilePath>.\App\public.h</FilePath>
</File>
<File>
<FileName>Sys_Init.h</FileName>
<FileType>5</FileType>
<FilePath>.\App\Sys_Init.h</FilePath>
</File>
<File>
<FileName>Timer0.h</FileName>
<FileType>5</FileType>
<FilePath>.\App\Timer0.h</FilePath>
</File>
<File>
<FileName>Timer2.h</FileName>
<FileType>5</FileType>
<FilePath>.\App\Timer2.h</FilePath>
</File>
<File>
<FileName>PWM.h</FileName>
<FileType>5</FileType>
<FilePath>.\App\PWM.h</FilePath>
</File>
<File>
<FileName>HeatingSetting.h</FileName>
<FileType>5</FileType>
<FilePath>.\App\HeatingSetting.h</FilePath>
</File>
<File>
<FileName>TM1650.h</FileName>
<FileType>5</FileType>
<FilePath>.\App\TM1650.h</FilePath>
</File>
<File>
<FileName>IIC.h</FileName>
<FileType>5</FileType>
<FilePath>.\App\IIC.h</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
</Project>

162
App/DS18B20.c Normal file
View File

@@ -0,0 +1,162 @@
/*
* 18B20.c
*
* Created on: 2022年03月15日
* Author: User
*/
#include <main.h>
static uint8_t Init(void);
static uint8_t ReadData(void);
static void WriteData(uint8_t Data);
static uint8_t ReadTemp(void);
void Delay1us(); //@20.000MHz
void Delay60us(); //@20.000MHz
void Delay500us(); //@20.000MHz
DS18B20_t DS18B20 = {
0x003C,
Init,
ReadTemp};
static uint8_t Init(void)
{
uint8_t CY = 1,count = 0;
while (CY)
{
DS18B20_PIN = LOW;
Delay500us(); //电平拉低500us使18b20复位
DS18B20_PIN = HIGH;
Delay60us();
CY = DS18B20_PIN; //等待18B20响应 响应后跳出循环
Delay500us();
if (count >= 5) //超过三次直接跳出
{
return FALSE;
}
count++; //循环计数
}
return TRUE;
}
static uint8_t ReadTemp(void)
{
float tt;
uint8_t Data_temp1 = 0, Data_temp2 = 0;
if ( DS18B20.Init() == FALSE)
{
return FALSE;
}
WriteData(0xCC); //跳过读取ROM指令
WriteData(0x44); //开始温度转换指令
Public.Delay_ms(375); //延时750mS 等待转换完成
DS18B20.Init(); //复位后重新读写
WriteData(0xCC); //跳过读取ROM
WriteData(0xBE); //读出寄存器的值
Data_temp1 = ReadData(); //读出低8位
Data_temp2 = ReadData(); //读出高8位
DS18B20.Temp = Data_temp2;
DS18B20.Temp <<= 8;
DS18B20.Temp |= Data_temp1; // 两个数据组合
tt = DS18B20.Temp * 0.0625;
DS18B20.Temp = tt * 10 + 0.5;
return TRUE;
}
static uint8_t ReadData(void)
{
uint8_t i = 0, Data = 0;
for (i = 0; i < 8; i++)
{
Data = Data >> 1;
DS18B20_PIN = LOW;
Delay1us();
DS18B20_PIN = HIGH; //拉高时钟线等待信号
Delay1us();
Delay1us();
Delay1us();
if (DS18B20_PIN)
{
Data |= 0x80;
}
Delay60us(); //等待时间片结束
}
return Data;
}
static void WriteData(uint8_t Data)
{
uint8_t i;
for (i = 0; i < 8; i++)
{
if (Data & 0x01)
{
DS18B20_PIN = LOW;
Delay1us(); //延时1us代表写周期开始
DS18B20_PIN = HIGH;
Delay60us(); //等待时间片结束
}
else
{
DS18B20_PIN = LOW;
Delay60us(); //等待时间片结束
DS18B20_PIN = HIGH;
Delay1us(); //延时1us代表写周期开始
}
DS18B20_PIN = HIGH; //拉高代表一个写周期结束
Data = Data >> 1;
}
}
void Delay1us() //@20.000MHz
{
uint8_t i;
// _nop_();
// _nop_();
i = 2;
while (--i)
;
}
void Delay60us() //@20.000MHz
{
unsigned char i;
_nop_();
_nop_();
i = 147;
while (--i)
;
}
void Delay500us() //@20.000MHz
{
unsigned char i, j;
i = 5;
j = 218;
do
{
while (--j)
;
} while (--i);
}
/********************************************************
End Of File
********************************************************/

28
App/DS18B20.h Normal file
View File

@@ -0,0 +1,28 @@
/*
* 18B20.h
*
* Created on: 2022年03月15日
* Author: User
*/
#ifndef __DS18B20_H_
#define __DS18B20_H_
#define DS18B20_PIN P34
typedef struct
{
uint16_t Temp;
uint8_t (*Init)(void);
uint8_t(*ReadTemp)(void);
}DS18B20_t;
extern DS18B20_t DS18B20;
#endif

33
App/HeatingSetting.c Normal file
View File

@@ -0,0 +1,33 @@
/*
* PWM.c
*
* Created on: 2022年03月21日
* Author: User
*/
#include <main.h>
void Init(void);
HeatingSetting_t HeatingSetting = {
Init};
void Init(void)
{
EX0 = 1; // 使能INT0中断
IT0 = 0; //设置INT0的中断类型1仅下降沿 0上升沿和下降沿
EA = 1; //打开总中断
}
/********************* INT0中断函数 *************************/
void INT0_int(void) interrupt 0 //进中断时已经清除标志 无论上升下降沿都把定时器2计数清零
{
Timer2.Heating_Run_Timer = 0;
}
/********************************************************
End Of File
********************************************************/

24
App/HeatingSetting.h Normal file
View File

@@ -0,0 +1,24 @@
/*
* PWM.c
*
* Created on: 2022年03月21日
* Author: User
*/
#define Heating_SET_PIN P32
#define PTC_Fan_PIN P35
typedef struct
{
void (*Init)(void);
} HeatingSetting_t;
extern HeatingSetting_t HeatingSetting;

90
App/IIC.c Normal file
View File

@@ -0,0 +1,90 @@
/*
* IIC.c
*
* Created on: 2022年03月12日
* Author: User
*/
#include <Main.h>
static void Start1(void);
static void Write1(uint8_t Data);
static void ACK1(void);
static void Stop1(void);
static void Delay1us(); //@20.000MHz
IIC_t IIC_1 = {
Start1,
Write1,
ACK1,
Stop1};
static void Start1(void)
{
SCL_1 = HIGH;
SDA_1 = HIGH;
Delay1us(); //@20.000MHz // 1微秒延时
SDA_1 = LOW; //时钟线高电平 拉低数据线以为传输开始
}
static void Write1(uint8_t Data)
{
uint8_t i = 0;
SCL_1 = LOW; //拉低时钟线 数据可以变化
Delay1us(); // 1微秒延时
for (i = 0; i < 8; i++)
{
if (Data & 0x80)
SDA_1 = HIGH;
else
SDA_1 = LOW;
Delay1us(); // 1微秒延时
SCL_1 = LOW;
Delay1us(); // 1微秒延时
SCL_1 = HIGH;
Delay1us(); // 1微秒延时
SCL_1 = LOW;
Data <<= 1;
}
}
static void ACK1(void)
{
// static uint8_t timeout = 0;
SCL_1 = 1;
Delay1us();
SCL_1 = 0;
// while ((SDA_1) || (timeout <= 10))
// {
// timeout++;
// }
Delay1us();
Delay1us();
SCL_1 = 0;
}
static void Stop1(void)
{
SCL_1 = 1;
SDA_1 = 0;
Delay1us();
SDA_1 = 1; //时钟线高电平时 拉高数据线为停止信号
}
static void Delay1us() //@20.000MHz
{
unsigned char i;
_nop_();
_nop_();
i = 5;
while (--i)
;
}

26
App/IIC.h Normal file
View File

@@ -0,0 +1,26 @@
/*
* IIC.h
*
* Created on: 2022年03月12日
* Author: User
*/
#ifndef __IIC_H
#define __IIC_H
#include <Public.h>
#define SCL_1 P30
#define SDA_1 P31
typedef struct // IIC 结构体
{
void (*start)(void);
void (*write)(uint8_t);
void (*ACK)(void);
void (*stop)(void);
} IIC_t;
extern IIC_t IIC_1;
#endif

52
App/PWM.c Normal file
View File

@@ -0,0 +1,52 @@
/*
* PWM.c
*
* Created on: 2022年03月15日
* Author: User
*/
#include <main.h>
static void Init(void);
static void LoadPWM(uint8_t DudyCycle);
PWM_Wave_t PWM = {
0,
Init,
LoadPWM
};
static void Init(void)
{
PWM.LoadPWM(0);
}
// /**************** 计算pwm重装值函数 *******************/
static void LoadPWM(uint8_t DudyCycle)
{
if (DudyCycle == 100)
{
PWM.High = DudyCycle + 1;
}
else
{
PWM.High = DudyCycle;
}
}
/********************************************************
End Of File
********************************************************/

31
App/PWM.h Normal file
View File

@@ -0,0 +1,31 @@
/*
* PWM.h
*
* Created on: 2022年03月15日
* Author: User
*/
#ifndef __PWM_H_
#define __PWM_H_
#define FAN_PWM_PIN P33
typedef struct
{
uint8_t High;
void(*Init)(void);
void(*LoadPWM)(uint8_t);
}PWM_Wave_t;
extern PWM_Wave_t PWM;
#endif

49
App/Sys_Init.c Normal file
View File

@@ -0,0 +1,49 @@
/*
* Sys_init.c
*
* Created on: 2022年03月15日
* Author: User
*/
#include "main.h"
static void Init(void);
static void GPIO_Init(void);
Sys_Init_t Sys_Init = {
Init};
static void Init(void)
{
GPIO_Init(); //输入输出端口初始化
Timer0.Timer0_Init(); //定时器0初始化
Timer2.Timer2_Init(); //定时器2初始化
HeatingSetting.Init(); //加热信号士刂瞥跏蓟?
TM1650.Init(); // tm1650初始化
DS18B20.Init(); // DS18B20初始化
PWM.Init(); // PWM初始化
PTC_Fan_PIN = LOW; //上电默认关闭加热风扇
}
static void GPIO_Init(void)
{
// M1 M0
// 0 0 准双向口
// 0 1 推挽输出
// 1 0 高阻输入
// 1 1 开漏
// P34 开漏 18b20
// P33 推挽模式 风扇
// P32 加热信号输入
// P35 加热风扇
P3M1 = 0x14; // M1 = 0001 0100B;
P3M0 = 0x38; // M0 = 0011 1000B
}
/********************************************************
End Of File
********************************************************/

27
App/Sys_Init.h Normal file
View File

@@ -0,0 +1,27 @@
/*
* Sys_init.h
*
* Created on: 2022年03月15日
* Author: User
*/
#ifndef __SYS_INIT_H_
#define __SYS_INIT_H_
typedef struct{
void(*Init)(void);
}Sys_Init_t;
extern Sys_Init_t Sys_Init;
#endif

100
App/TM1650.c Normal file
View File

@@ -0,0 +1,100 @@
/*
* TM1650.c
*
* Created on: 2022年03月12日
* Author: User
*/
#include <Main.h>
// 数码管显示数组
static uint8_t tab[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F, // 9
0x00, // 10 = Null
0x61, // 11 = 上c
};
static void Init(void); // tm1650初始化
static void TM1650_Set(IIC_t *Channel, uint8_t Add, uint8_t Value); //设置tm1650寄存器的值
static void Display_OFF(IIC_t *Channel); //显示OFF 字符
static void Display_Close(IIC_t *Channel); //显示暂时关闭
void TM1650_Display(IIC_t *Channel, uint16_t Value, uint8_t dot); //显示使能
TM1650_t TM1650 = {
1,
Init,
Display_OFF,
Display_Close};
static void Init(void)
{
TM1650_Set(&IIC_1, 0x48, 0x31); //打开通道1 设置亮度3级 开显示
}
static void TM1650_Set(IIC_t *Channel, uint8_t Add, uint8_t Value)
{
IIC_t *const COM = Channel;
COM->start(); // iic开始
COM->write(Add); // iic写功能或者地址
COM->ACK(); //等待应答信号
COM->write(Value); // iic写设置数据或显示数据
COM->ACK(); //等待应答信号
COM->stop(); // iic停止
}
void TM1650_Display(IIC_t *Channel, uint16_t Value, uint8_t dot)
{
IIC_t *const IIC = Channel;
if (Value < 100)
{
TM1650_Set(IIC, DIG1, tab[10]); //如果温度不到100 关闭最高位数码管
}
else
{
TM1650_Set(IIC, DIG1, tab[Value % 1000 / 100]);
}
if (dot == 1) //判断是否加点
{
TM1650_Set(IIC, DIG2, (tab[Value % 100 / 10] | 0x80));
}
else
{
TM1650_Set(IIC, DIG2, tab[Value % 100 / 10]);
}
TM1650_Set(IIC, DIG3, tab[Value % 10 / 1]);
TM1650_Set(IIC, DIG4, tab[11]); //不带点 显示小c
}
static void Display_OFF(IIC_t *Channel)
{
IIC_t *const IIC = Channel;
TM1650_Set(IIC, DIG1, tab[0]); //第一位显示O
TM1650_Set(IIC, DIG2, tab[22]); //第二位显示F
TM1650_Set(IIC, DIG3, tab[22]); //第三位显示F
TM1650_Set(IIC, DIG4, tab[13]); //第四位显示关闭
}
static void Display_Close(IIC_t *Channel)
{
IIC_t *const IIC = Channel;
TM1650_Set(IIC, DIG1, tab[13]); //关闭显示
TM1650_Set(IIC, DIG2, tab[13]); //关闭显示
TM1650_Set(IIC, DIG3, tab[13]); //关闭显示
TM1650_Set(IIC, DIG4, tab[13]); //关闭显示
}

37
App/TM1650.h Normal file
View File

@@ -0,0 +1,37 @@
/*
* TM1650.h
*
* Created on: 2022年03月12日
* Author: User
*/
#ifndef __TM1650_H
#define __TM1650_H
#include <IIC.h>
#define DIG1 0x68
#define DIG2 0x6A
#define DIG3 0x6C
#define DIG4 0x6E
typedef struct
{
uint8_t Flicker_Flag;
void (*Init)(void);
void (*Display_OFF)(IIC_t*);
void (*Display_Close)(IIC_t*);
}TM1650_t;
extern void TM1650_Display(IIC_t *Channel, uint16_t Value,uint8_t dot); //显示使能
extern TM1650_t TM1650;
#endif

72
App/Timer0.c Normal file
View File

@@ -0,0 +1,72 @@
/*
* Timer0.c
*
* Created on: 2022年03月15日
* Author: User
*/
/* Includes ------------------------------------------------------------------*/
#include <main.h>
/* Private define-------------------------------------------------------------*/
/* Private variables----------------------------------------------------------*/
/* Private function prototypes------------------------------------------------*/
static void Timer0_Init(void); //定时器0初始化
/* Public variables-----------------------------------------------------------*/
Timer0_t Timer0 =
{
0,
Timer0_Init};
/*
* @name Timer0_Init
* @brief 定时器0初始化
* @param None
* @retval None
*/
static void Timer0_Init() // 5微秒@20.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x9C; //设置定时初始值
TH0 = 0xFF; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //打开定时器0中断
EA = 1; //打开总中断
}
/*
* @name Timer0_isr()
* @brief 定时器0中断函数(5us中断一次)
* @param None
* @retval None
*/
/***********定时器0中断函数***********/
void Timer0_isr() interrupt 1
{
if (PWM.High == Timer0.usMCU_Run_Timer)
{
FAN_PWM_PIN = LOW;
}
Timer0.usMCU_Run_Timer++;
if (Timer0.usMCU_Run_Timer >= TIMER0_500uS)
{
if (PWM.High != 0)
{
FAN_PWM_PIN = HIGH;
}
else
{
FAN_PWM_PIN = LOW;
}
Timer0.usMCU_Run_Timer = 0;
}
}
/********************************************************
End Of File
********************************************************/

33
App/Timer0.h Normal file
View File

@@ -0,0 +1,33 @@
/*
* Timer0.h
*
* Created on: 2022年03月15日
* Author: User
*/
#ifndef __Timer0_H__
#define __Timer0_H__
//定义枚举类型
typedef enum
{
TIMER0_50uS = (uint16_t)10,
TIMER0_100uS = (uint16_t)20,
TIMER0_500uS = (uint16_t)100,
TIMER0_1mS = (uint16_t)200,
}TIMER0_Value_t;
//定义结构体类型
typedef struct
{
uint16_t volatile usMCU_Run_Timer; //系统运行定时器
void (*Timer0_Init)(void); //定时器0初始化
} Timer0_t;
/* extern variables-----------------------------------------------------------*/
extern Timer0_t Timer0;
#endif
/********************************************************
End Of File
********************************************************/

69
App/Timer2.c Normal file
View File

@@ -0,0 +1,69 @@
/*
* Timer0.c
*
* Created on: 2022年03月15日
* Author: User
*/
/* Includes ------------------------------------------------------------------*/
#include <main.h>
/* Private define-------------------------------------------------------------*/
/* Private variables----------------------------------------------------------*/
/* Private function prototypes------------------------------------------------*/
static void Timer2_Init(void); //定时器2初始化
/* Public variables-----------------------------------------------------------*/
Timer2_t Timer2 =
{
0,
Timer2_Init};
/*
* @name Timer0_Init
* @brief 定时器0初始化
* @param None
* @retval None
*/
static void Timer2_Init() // 20毫秒@20.000MHz
{
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0xCB; //设置定时初始值
T2H = 0x7D; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
IE2 |= 0x04; //打开定时器2中断
EA = 1;
}
/*
* @name Timer2_isr()
* @brief 定时器2中断函数(20ms中断一次)
* @param None
* @retval None
*/
/***********定时器2中断函数***********/
void Timer2_isr() interrupt 12
{
if (Heating_SET_PIN == HIGH) //判断加热是否使能
{
PTC_Fan_PIN = HIGH; //加热使能打开风扇
}
else
{
if (++Timer2.Heating_Run_Timer >= TIMER2_20S)
{
Timer2.Heating_Run_Timer = 0;
if (Heating_SET_PIN != HIGH)
{
PTC_Fan_PIN = LOW; //关闭风扇
}
}
}
}
/********************************************************
End Of File
********************************************************/

39
App/Timer2.h Normal file
View File

@@ -0,0 +1,39 @@
/*
* Timer0.h
*
* Created on: 2022年03月21日
* Author: User
*/
#ifndef __Timer2_H__
#define __Timer2_H__
#include <main.h>
//定义枚举类型
typedef enum
{
TIMER2_100mS = (uint16_t)5,
TIMER2_500mS = (uint16_t)25,
TIMER2_1S = (uint16_t)50,
TIMER2_2S = (uint16_t)100,
TIMER2_4S = (uint16_t)200,
TIMER2_5S = (uint16_t)250,
TIMER2_10S = (uint16_t)500,
TIMER2_20S = (uint16_t)1000,
}TIMER2_Value_t;
//定义结构体类型
typedef struct
{
uint16_t volatile Heating_Run_Timer; //信号检测定时器
void (*Timer2_Init)(void); //定时器2初始化
}Timer2_t;
/* extern variables-----------------------------------------------------------*/
extern Timer2_t Timer2;
#endif
/********************************************************
End Of File
********************************************************/

40
App/UART.h Normal file
View File

@@ -0,0 +1,40 @@
/*
* UART.h
*
* Created on: 2022年03月15日
* f
*/
#ifndef __UART_H_
#define __UART_H_
//#define MAIN_Fosc 11059200UL //定义主时钟
#define MAIN_Fosc 20000000UL //定义主时钟
#define UART3_Baudrate 9600UL //定义波特率
#define RX_Lenth 32 //接收长度
#define UART3_BitTime (MAIN_Fosc / UART3_Baudrate)
typedef struct
{
void(*Init)(void);
void(*Rec)(void);
void(*Send)(uint8_t *,uint8_t);
}UART_t;
extern UART_t UART;
#endif

200
App/UART1.c Normal file
View File

@@ -0,0 +1,200 @@
/*
* UART1.c
*
* Created on: 2022年03月15日
* Author: User
*/
#include <main.h>
#ifdef MYDEBUG
uint8_t Tx3_read; //发送读指针
uint8_t Rx3_write; //接收写指针
uint8_t idata buf3[RX_Lenth]; //接收缓冲
//uint8_t idata buftest[2] = {1, 2};
uint16_t RxTimeOut;
bit B_RxOk; //接收结束标志
//===================== 模拟串口相关===========================
// #define P_RX3 P30; //定义模拟串口接收IO
// #define P_TX3 P31; //定义模拟串口发送IO
sbit P_RX3 = P3 ^ 0; //定义模拟串口接收IO
sbit P_TX3 = P3 ^ 1; //定义模拟串口发送IO
uint8_t Tx3_DAT; // 发送移位变量, 用户不可见
uint8_t Rx3_DAT; // 接收移位变量, 用户不可见
uint8_t Tx3_BitCnt; // 发送数据的位计数器, 用户不可见
uint8_t Rx3_BitCnt; // 接收数据的位计数器, 用户不可见
uint8_t Rx3_BUF; // 接收到的字节, 用户读取
uint8_t Tx3_BUF; // 要发送的字节, 用户写入
bit Rx3_Ring; // 正在接收标志, 低层程序使用, 用户程序不可见
bit Tx3_Ting; // 正在发送标志, 用户置1请求发送, 底层发送完成清0
bit RX3_End; // 接收到一个字节, 用户查询 并清0
//=============================================================
void UART_Init(void);
void UART_Rec(void);
void UART_Send(uint8_t *buftest,uint8_t len);
UART_t UART = {
UART_Init,
UART_Rec,
UART_Send
};
void UART_Rec(void)
{
if (RX3_End)
{ // 检测是否收到一个字节
RX3_End = 0; // 清除标志
buf3[Rx3_write] = Rx3_BUF; // 写入缓冲
if (++Rx3_write >= RX_Lenth)
Rx3_write = 0; // 指向下一个位置, 溢出检测
RxTimeOut = 1000; //装载超时时间
}
if (RxTimeOut != 0)
{ // 超时时间是否非0?
if (--RxTimeOut == 0)
{ // (超时时间 - 1) == 0?
B_RxOk = 1;
AUXR &= ~(1 << 4); // Timer2 停止运行
INT_CLKO &= ~(1 << 6); //禁止INT4中断
T2H = (65536 - UART3_BitTime) / 256; //数据位
T2L = (65536 - UART3_BitTime) % 256; //数据位
AUXR |= (1 << 4); // Timer2 开始运行
}
}
if (B_RxOk)
{ // 检测是否接收OK?
if (!Tx3_Ting)
{ // 检测是否发送空闲
if (Tx3_read != Rx3_write)
{ // 检测是否收到过字符
Tx3_BUF = buf3[Tx3_read]; // 从缓冲读一个字符发送
Tx3_Ting = 1; // 设置发送标志
if (++Tx3_read >= RX_Lenth)
Tx3_read = 0; // 指向下一个位置, 溢出检测
}
else
{
B_RxOk = 0;
AUXR &= ~(1 << 4); // Timer2 停止运行
INT_CLKO |= (1 << 6); //允许INT4中断
}
}
}
}
void UART_Send(uint8_t *buftest,uint8_t len)
{
EA = 0; //关闭总中断
INT_CLKO &= ~(1 << 6); //禁止INT4中断
T2H = (65536 - UART3_BitTime) / 256; //数据位
T2L = (65536 - UART3_BitTime) % 256; //数据位
AUXR |= (1 << 4); // Timer2 开始运行
// Tx3_BitCnt = 0;
Tx3_BUF = buftest[Tx3_read]; // 从缓冲读一个字符发送
Tx3_Ting = 1; // 设置发送标志
if (++Tx3_read > len)
{
Tx3_read = 0; // 指向下一个位置, 溢出检测
AUXR &= ~(1 << 4); // Timer2 停止运行
}
EA = 1; //打开总中断
}
// 描述: UART初始化程序.
void UART_Init(void)
{
Tx3_read = 0;
Rx3_write = 0;
Tx3_Ting = 0;
Rx3_Ring = 0;
RX3_End = 0;
Tx3_BitCnt = 0;
RxTimeOut = 0;
B_RxOk = 0;
AUXR &= ~(1 << 4); // Timer2 停止运行
T2H = (65536 - UART3_BitTime) / 256; // 数据位
T2L = (65536 - UART3_BitTime) % 256; // 数据位
INT_CLKO |= (1 << 6); // 允许INT4中断
IE2 |= (1 << 2); // 允许Timer2中断
AUXR |= (1 << 2); // 1T
}
// 描述: Timer2中断处理程序.
void timer2_int(void) interrupt 12
{
if (Rx3_Ring)
{ //已收到起始位
if (--Rx3_BitCnt == 0)
{ //接收完一帧数据
Rx3_Ring = 0; //停止接收
Rx3_BUF = Rx3_DAT; //存储数据到缓冲区
RX3_End = 1;
AUXR &= ~(1 << 4); // Timer2 停止运行
INT_CLKO |= (1 << 6); //允许INT4中断
}
else
{
Rx3_DAT >>= 1; //把接收的单b数据 暂存到 RxShiftReg(接收缓冲)
if (P_RX3)
Rx3_DAT |= 0x80; // shift RX data to RX buffer
}
}
if (Tx3_Ting)
{ // 不发送, 退出
if (Tx3_BitCnt == 0)
{ //发送计数器为0 表明单字节发送还没开始
P_TX3 = 0; //发送开始位
Tx3_DAT = Tx3_BUF; //把缓冲的数据放到发送的buff
Tx3_BitCnt = 9; //发送数据位数 (8数据位+1停止位)
}
else
{ //发送计数器为非0 正在发送数据
if (--Tx3_BitCnt == 0)
{ //发送计数器减为0 表明单字节发送结束
P_TX3 = 1; //送停止位数据
Tx3_Ting = 0; //发送停止
}
else
{
Tx3_DAT >>= 1; //把最低位送到 CY(益处标志位)
P_TX3 = CY; //发送一个bit数据
}
}
}
}
/********************* INT4中断函数 *************************/
void Ext_INT4(void) interrupt 16
{
AUXR &= ~(1 << 4); // Timer2 停止运行
T2H = (65536 - (UART3_BitTime / 2 + UART3_BitTime)) / 256; //起始位 + 半个数据位
T2L = (65536 - (UART3_BitTime / 2 + UART3_BitTime)) % 256; //起始位 + 半个数据位
AUXR |= (1 << 4); // Timer2 开始运行
Rx3_Ring = 1; //标志已收到起始位
Rx3_BitCnt = 9; //初始化接收的数据位数(8个数据位+1个停止位)
INT_CLKO &= ~(1 << 6); //禁止INT4中断
T2H = (65536 - UART3_BitTime) / 256; //数据位
T2L = (65536 - UART3_BitTime) % 256; //数据位
}
#endif
/********************************************************
End Of File
********************************************************/

80
App/main.c Normal file
View File

@@ -0,0 +1,80 @@
/*
* main.c
*
* Created on: 2022年3月15日
* Author: User
*/
#include <main.h>
void main()
{
// static uint8_t i = 0;
static uint8_t flag = 0;
static uint16_t temp = 0;
Sys_Init.Init(); //系统初始化
WDT_CONTR |= 0x3F; // 0011 1111b 设置看门狗并打开 看门狗时钟 256分频 20MHz 5S秒内喂狗
WDT_CONTR |= 0x10; //喂看门狗
PWM.LoadPWM(100); //启动时风扇先转
while (1)
{
WDT_CONTR |= 0x10; //喂看门狗
if (DS18B20.ReadTemp() == FALSE) //判断ds18b20是否正常
{
DS18B20.Temp = 600; // 18B20不正常 让风扇全开
TM1650.Display_OFF(&IIC_1); // 18B20不正常 显示off
}
else
{
TM1650_Display(&IIC_1, DS18B20.Temp, 1);
}
WDT_CONTR |= 0x10; //喂狗
if (DS18B20.Temp > 350)
{
if (flag == 1)
{
flag = 0;
PWM.LoadPWM(100); //首次风扇全速打开
Public.Delay_ms(2);
}
temp = DS18B20.Temp - 350;
PWM.LoadPWM((temp * 2.8 / 10) + 30); //超过35°C 每上升1°C PWM加2
}
else
{
flag = 1; //关闭风扇标志位
PWM.LoadPWM(0); //低于25°C关闭风扇
}
// if (DS18B20.Temp >= 600)
// {
// PWM.LoadPWM(100);
// }
// else if(DS18B20.Temp < 600 && DS18B20.Temp >=500)
// {
// PWM.LoadPWM(90); //大于60°c风扇90%
// }
// else if(DS18B20.Temp < 500 && DS18B20.Temp >=400)
// {
// PWM.LoadPWM(70); //大于40°c风扇70%
// }
// else if(DS18B20.Temp < 400 && DS18B20.Temp >=300)
// {
// PWM.LoadPWM(50); //大于30°c风扇50%
// }
// else if(DS18B20.Temp < 300 && DS18B20.Temp >=250)
// {
// PWM.LoadPWM(30); //大于25°c风扇30%
// }
// else if(DS18B20.Temp < 250)
// {
// PWM.LoadPWM(0); //小于25°c风扇0%
// }
}
}
/********************************************************
End Of File
********************************************************/

43
App/main.h Normal file
View File

@@ -0,0 +1,43 @@
/*
* main.h
*
* Created on: 2022年3月15日
* Author: User
*/
#ifndef _MAIN_H_
#define _MAIN_H_
#include <STC15.H>
#include <intrins.h>
#include <stdio.h>
#include <Sys_Init.h>
#include <public.h>
#include <DS18B20.h>
#include <PWM.h>
#include <Timer0.h>
#include <Timer2.h>
#include <TM1650.h>
#include <IIC.h>
#include <HeatingSetting.h>
//#define MYDEBUG
#ifdef MYDEBUG
#include <UART.h>
#endif
#endif /* SRC_MAIN_H_ */

48
App/public.c Normal file
View File

@@ -0,0 +1,48 @@
/*
* public.c
*
* Created on: 2022年03月15日
* Author: User
*/
/* Includes ------------------------------------------------------------------*/
#include <main.h>
/* Private define-------------------------------------------------------------*/
/* Private variables----------------------------------------------------------*/
static void Delay_ms(uint16_t); // ms延时
/* Public variables-----------------------------------------------------------*/
Public_t Public =
{
Delay_ms};
/* Private function prototypes------------------------------------------------*/
/*
* @name Delay_ms
* @brief 毫秒延时函数
* @param ms -> 需要延时的时间
* @retval None
*/
static void Delay_ms(uint16_t ms) //@20.000MHz
{
unsigned char i, j;
do
{
i = 20;
j = 113;
do
{
while (--j)
;
} while (--i);
} while (--ms);
}
/********************************************************
End Of File
********************************************************/

61
App/public.h Normal file
View File

@@ -0,0 +1,61 @@
/*
* public.h
*
* Created on: 2022年03月15日
* Author: User
*/
#ifndef __PUBLIC_H_
#define __PUBLIC_H_
//数据类型重定义
typedef signed char sint8_t;
typedef signed short int sint16_t;
typedef signed long int sint32_t;
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned long int uint32_t;
//定义位操作枚举类型
typedef enum
{
BIT0 = (uint8_t)(0x01 << 0),
BIT1 = (uint8_t)(0x01 << 1),
BIT2 = (uint8_t)(0x01 << 2),
BIT3 = (uint8_t)(0x01 << 3),
BIT4 = (uint8_t)(0x01 << 4),
BIT5 = (uint8_t)(0x01 << 5),
BIT6 = (uint8_t)(0x01 << 6),
BIT7 = (uint8_t)(0x01 << 7),
}BIT_t;
//定义枚举类型
typedef enum
{
TRUE = (bit)1,
FALSE = (bit)0,
}BOOL_t;
typedef enum
{
LOW = (bit)0,
HIGH = (bit)1,
}Voltage_t;
//定义结构体类型
typedef struct
{
void (*Delay_ms)(uint16_t); //ms延时函数
} Public_t;
/* extern variables-----------------------------------------------------------*/
extern Public_t Public;
#endif
/********************************************************
End Of File
********************************************************/

Binary file not shown.