Last version

This commit is contained in:
leaf 2022-05-25 14:59:38 +08:00
parent 8ba8dda08f
commit 5774acdc1b
14 changed files with 4255 additions and 0 deletions

1893
C52.uvgui.Simular Normal file

File diff suppressed because one or more lines are too long

197
C52.uvopt Normal file
View File

@ -0,0 +1,197 @@
<?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; *.o</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>24000000</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>255</CpuCode>
<Books>
<Book>
<Number>0</Number>
<Title>Data Sheet</Title>
<Path>DATASHTS\ATMEL\AT89C52_DS.PDF</Path>
</Book>
<Book>
<Number>1</Number>
<Title>Instruction Set Manual</Title>
<Path>DATASHTS\ATMEL\AT_C51ISM.PDF</Path>
</Book>
</Books>
<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>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>0</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\MON51.DLL</pMon>
</DebugOpt>
<Breakpoint/>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</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>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
</TargetOption>
</Target>
<Group>
<GroupName>Source Group 1</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>.\Main\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

378
C52.uvproj Normal file
View File

@ -0,0 +1,378 @@
<?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>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>AT89C52</Device>
<Vendor>Microchip</Vendor>
<Cpu>IRAM(0-0xFF) IROM(0-0x1FFF) CLOCK(24000000)</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>2980</DeviceId>
<RegisterFile>REGX52.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>Atmel\</RegisterFilePath>
<DBRegisterFilePath>Atmel\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>C52</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>-p52</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TP51.DLL</TargetDlgDll>
<TargetDlgDllArguments>-p52</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>0</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\MON51.DLL</Driver>
</TargetDlls>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>1</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>0x2000</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</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>.\Include</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 1</GroupName>
<Files>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>.\Main\main.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
</Project>

70
Include/com_send.h Normal file
View File

@ -0,0 +1,70 @@
#ifndef _com_send_H
#define _com_send_H
#include "reg52.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define FOSC 11059200L //System frequency
#define BAUD 9600 //UART baudrate
bit busy;
void send_init();
void send_data(BYTE dat);
void send_string(char *s);
void send_init()
{
SCON = 0x50;
TL2 = RCAP2L = (65536-(FOSC/32/BAUD)); //Set auto-reload vaule
TH2 = RCAP2H = (65536-(FOSC/32/BAUD)) >> 8;
T2CON = 0x34; //Timer2 start run
ES = 1; //Enable UART interrupt
EA = 1; //Open master interrupt switch
}
/*----------------------------
UART interrupt service routine
----------------------------*/
void uart_isr() interrupt 4
{
if (RI)
{
RI = 0; //Clear receive interrupt flag
}
if (TI)
{
TI = 0; //Clear transmit interrupt flag
busy = 0; //Clear transmit busy flag
}
}
/*----------------------------
Send a byte data to UART
Input: dat (data to be sent)
Output:None
----------------------------*/
void send_data(BYTE dat)
{
while (busy); //Wait for the completion of the previous data is sent
ACC = dat; //Calculate the even parity bit P (PSW.0)
busy = 1;
SBUF = ACC; //Send data to UART buffer
}
/*----------------------------
Send a string to UART
Input: s (address of string)
Output:None
----------------------------*/
void send_string(char *s)
{
while (*s) //Check the end of the string
{
send_data(*s++); //Send current char and increment string ptr
}
}
#endif

59
Include/key.h Normal file
View File

@ -0,0 +1,59 @@
#ifndef _key_H
#define _key_H
#include "public.h"
//定义独立按键控制脚
sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
//使用宏定义独立按键按下的键值
#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0
u8 key_scan(u8 mode);
/*******************************************************************************
* : key_scan
* :
* : mode=0
mode=1
* : KEY1_PRESSK1按下
KEY2_PRESSK2按下
KEY3_PRESSK3按下
KEY4_PRESSK4按下
KEY_UNPRESS
*******************************************************************************/
u8 key_scan(u8 mode)
{
static u8 key=1;
if(mode)key=1;//连续扫描按键
if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))//任意按键按下
{
delay_10us(1000);//消抖
key=0;
if(KEY1==0)
return KEY1_PRESS;
else if(KEY2==0)
return KEY2_PRESS;
else if(KEY3==0)
return KEY3_PRESS;
else if(KEY4==0)
return KEY4_PRESS;
}
else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1) //无按键按下
{
key=1;
}
return KEY_UNPRESS;
}
#endif

182
Include/lcd1602.h Normal file
View File

@ -0,0 +1,182 @@
#ifndef _lcd1602_H
#define _lcd1602_H
#include "public.h"
//LCD1602数据口4位和8位定义若为1则为LCD1602四位数据口驱动反之为8位
#define LCD1602_4OR8_DATA_INTERFACE 0 //默认使用8位数据口LCD1602
//管脚定义
sbit LCD1602_RS=P2^6;//数据命令选择
sbit LCD1602_RW=P2^5;//读写选择
sbit LCD1602_E=P2^7; //使能信号
#define LCD1602_DATAPORT P0 //宏定义LCD1602数据端口
//函数声明
void lcd1602_init(void);
void lcd1602_clear(void);
void lcd1602_show_string(u8 x,u8 y,u8 *str);
/*******************************************************************************
* : lcd1602_write_cmd
* : LCD1602写命令
* : cmd
* :
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_cmd(u8 cmd)
{
LCD1602_RS=0;//选择命令
LCD1602_RW=0;//选择写
LCD1602_E=0;
LCD1602_DATAPORT=cmd;//准备命令
delay_ms(1);
LCD1602_E=1;//使能脚E先上升沿写入
delay_ms(1);
LCD1602_E=0;//使能脚E后负跳变完成写入
}
#else //4位LCD
void lcd1602_write_cmd(u8 cmd)
{
LCD1602_RS=0;//选择命令
LCD1602_RW=0;//选择写
LCD1602_E=0;
LCD1602_DATAPORT=cmd;//准备命令
delay_ms(1);
LCD1602_E=1;//使能脚E先上升沿写入
delay_ms(1);
LCD1602_E=0;//使能脚E后负跳变完成写入
LCD1602_DATAPORT=cmd<<4;//准备命令
delay_ms(1);
LCD1602_E=1;//使能脚E先上升沿写入
delay_ms(1);
LCD1602_E=0;//使能脚E后负跳变完成写入
}
#endif
/*******************************************************************************
* : lcd1602_write_data
* : LCD1602写数据
* : dat
* :
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_data(u8 dat)
{
LCD1602_RS=1;//选择数据
LCD1602_RW=0;//选择写
LCD1602_E=0;
LCD1602_DATAPORT=dat;//准备数据
delay_ms(1);
LCD1602_E=1;//使能脚E先上升沿写入
delay_ms(1);
LCD1602_E=0;//使能脚E后负跳变完成写入
}
#else
void lcd1602_write_data(u8 dat)
{
LCD1602_RS=1;//选择数据
LCD1602_RW=0;//选择写
LCD1602_E=0;
LCD1602_DATAPORT=dat;//准备数据
delay_ms(1);
LCD1602_E=1;//使能脚E先上升沿写入
delay_ms(1);
LCD1602_E=0;//使能脚E后负跳变完成写入
LCD1602_DATAPORT=dat<<4;//准备数据
delay_ms(1);
LCD1602_E=1;//使能脚E先上升沿写入
delay_ms(1);
LCD1602_E=0;//使能脚E后负跳变完成写入
}
#endif
/*******************************************************************************
* : lcd1602_init
* : LCD1602初始化
* :
* :
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_init(void)
{
lcd1602_write_cmd(0x38);//数据总线8位显示2行5*7点阵/字符
lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁
lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动
lcd1602_write_cmd(0x01);//清屏
}
#else
void lcd1602_init(void)
{
lcd1602_write_cmd(0x28);//数据总线4位显示2行5*7点阵/字符
lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁
lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动
lcd1602_write_cmd(0x01);//清屏
}
#endif
/*******************************************************************************
* : lcd1602_clear
* : LCD1602清屏
* :
* :
*******************************************************************************/
void lcd1602_clear(void)
{
lcd1602_write_cmd(0x01);
}
/*******************************************************************************
* : lcd1602_show_string
* : LCD1602显示字符
* : x,yx=0~15y=0~1;
str
* :
*******************************************************************************/
void lcd1602_show_string(u8 x,u8 y,u8 *str)
{
u8 i=0;
if(y>1||x>15)return;//行列参数不对则强制退出
if(y<1) //第1行显示
{
while(*str!='\0')//字符串是以'\0'结尾,只要前面有内容就显示
{
if(i<16-x)//如果字符长度超过第一行显示范围,则在第二行继续显示
{
lcd1602_write_cmd(0x80+i+x);//第一行显示地址设置
}
else
{
lcd1602_write_cmd(0x40+0x80+i+x-16);//第二行显示地址设置
}
lcd1602_write_data(*str);//显示内容
str++;//指针递增
i++;
}
}
else //第2行显示
{
while(*str!='\0')
{
if(i<16-x) //如果字符长度超过第二行显示范围,则在第一行继续显示
{
lcd1602_write_cmd(0x80+0x40+i+x);
}
else
{
lcd1602_write_cmd(0x80+i+x-16);
}
lcd1602_write_data(*str);
str++;
i++;
}
}
}
#endif

39
Include/public.h Normal file
View File

@ -0,0 +1,39 @@
#ifndef _public_H
#define _public_H
#include "reg52.h"
typedef unsigned int u16; //对系统默认数据类型进行重定义
typedef unsigned char u8;
typedef unsigned long u32;
//函数声明
void delay_10us(u16 ten_us);
void delay_ms(u16 ms);
/*******************************************************************************
* : delay_10us
* : ten_us=110us
* : ten_us
* :
*******************************************************************************/
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
/*******************************************************************************
* : delay_ms
* : ms延时函数ms=11ms
* : msms延时时间
* :
*******************************************************************************/
void delay_ms(u16 ms)
{
u16 i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
#endif

63
Include/timer.h Normal file
View File

@ -0,0 +1,63 @@
#ifndef _timer_H
#define _timer_H
#include "public.h"
void timer0_init(u8 tmod, u8 th0, u8 tl0);
void timer0_reset(u8 th0, u8 tl0);
void timer1_init(u8 tmod, u8 th0, u8 tl0);
void timer1_reset(u8 th0, u8 tl0);
void timer0_init(u8 tmod, u8 th0, u8 tl0)
{
TMOD=(TMOD&0xF0)|(tmod&0x0F);//选择为定时器0模式
TH0=th0;
TL0=tl0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=0;
}
void timer0_open()
{
TR0=1;//打开定时器
}
void timer0_close()
{
TR0=0;
}
void timer0_reset(u8 th0, u8 tl0)
{
TH0=th0;
TL0=tl0;
}
void timer1_init(u8 tmod, u8 th1, u8 tl1)
{
TMOD=(TMOD&0x0F)|(tmod&0xF0);//选择为定时器1模式
TH1=th1;
TL1=tl1;
ET1=1;//打开定时器0中断允许
EA=1;//打开总中断
TR1=0;//打开定时器
}
void timer1_reset(u8 th1, u8 tl1)
{
TH1=th1;
TL1=tl1;
}
void timer1_open()
{
TR1=1;//打开定时器
}
void timer1_close()
{
TR1=0;
}
#endif

851
Listings/C52.m51 Normal file
View File

@ -0,0 +1,851 @@
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 1
BL51 BANKED LINKER/LOCATER V6.22.2.0, INVOKED BY:
C:\KEIL_V5\C51\BIN\BL51.EXE .\Objects\main.obj TO .\Objects\C52 PRINT (.\Listings\C52.m51) RAMSIZE (256)
MEMORY MODEL: SMALL WITH FLOATING POINT ARITHMETIC
INPUT MODULES INCLUDED:
.\Objects\main.obj (MAIN)
C:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FPMUL)
C:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FPDIV)
C:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FPCMP)
C:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FCAST)
C:\KEIL_V5\C51\LIB\C51FPS.LIB (PRINTF)
C:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FPGETOPN)
C:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FPROUND)
C:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FPCONVERT)
C:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FPADD)
C:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FTNPWR)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C_STARTUP)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C?CLDPTR)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C?CLDOPTR)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C?CSTPTR)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C?IMUL)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C?UIDIV)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C?LMUL)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C?LNEG)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C?PLDIIDATA)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C?CCASE)
C:\KEIL_V5\C51\LIB\C51S.LIB (PUTCHAR)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C_INIT)
LINK MAP OF MODULE: .\Objects\C52 (MAIN)
TYPE BASE LENGTH RELOCATION SEGMENT NAME
-----------------------------------------------------
* * * * * * * D A T A M E M O R Y * * * * * * *
REG 0000H 0008H ABSOLUTE "REG BANK 0"
0008H 0018H *** GAP ***
BIT 0020H.0 0001H.1 UNIT _BIT_GROUP_
BIT 0021H.1 0000H.1 UNIT ?BI?MAIN
0021H.2 0000H.6 *** GAP ***
DATA 0022H 0035H UNIT ?DT?MAIN
DATA 0057H 0027H UNIT _DATA_GROUP_
IDATA 007EH 0001H UNIT ?STACK
* * * * * * * C O D E M E M O R Y * * * * * * *
CODE 0000H 0003H ABSOLUTE
CODE 0003H 0008H UNIT ?PR?_LCD1602_WRITE_CMD?MAIN
CODE 000BH 0003H ABSOLUTE
CODE 000EH 000DH UNIT ?PR?UART_ISR?MAIN
CODE 001BH 0003H ABSOLUTE
CODE 001EH 0005H UNIT ?PR?LCD1602_CLEAR?MAIN
CODE 0023H 0003H ABSOLUTE
CODE 0026H 0693H UNIT ?C?LIB_CODE
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 2
CODE 06B9H 046FH UNIT ?PR?PRINTF?PRINTF
CODE 0B28H 0285H UNIT ?PR?MAIN?MAIN
CODE 0DADH 008CH UNIT ?C_C51STARTUP
CODE 0E39H 0089H UNIT ?PR?_LCD1602_SHOW_STRING?MAIN
CODE 0EC2H 0065H UNIT ?PR?TIMER1?MAIN
CODE 0F27H 004DH UNIT ?PR?TIMER0?MAIN
CODE 0F74H 004CH UNIT ?PR?_KEY_SCAN?MAIN
CODE 0FC0H 003DH UNIT ?CO?MAIN
CODE 0FFDH 003AH UNIT ?PR?SHOW_STRING_INIT?MAIN
CODE 1037H 0036H UNIT ?C_INITSEG
CODE 106DH 0032H UNIT ?PR?SHOW_STRING_MODE?MAIN
CODE 109FH 0031H UNIT ?PR?_DELAY_MS?MAIN
CODE 10D0H 0027H UNIT ?PR?PUTCHAR?PUTCHAR
CODE 10F7H 0026H UNIT ?PR?RESET?MAIN
CODE 111DH 0025H UNIT ?PR?_SEND_STRING?MAIN
CODE 1142H 0017H UNIT ?PR?SEND_INIT?MAIN
CODE 1159H 0016H UNIT ?PR?_TIMER0_INIT?MAIN
CODE 116FH 0016H UNIT ?PR?_TIMER1_INIT?MAIN
CODE 1185H 0014H UNIT ?PR?LCD1602_INIT?MAIN
CODE 1199H 000FH UNIT ?PR?CHANGE_RANGE?MAIN
CODE 11A8H 000EH UNIT ?PR?_TIMER0_RESET?MAIN
CODE 11B6H 000BH UNIT ?PR?_DELAY_10US?MAIN
CODE 11C1H 0009H UNIT ?PR?_SEND_DATA?MAIN
CODE 11CAH 0008H UNIT ?PR?_LCD1602_WRITE_DATA?MAIN
CODE 11D2H 0006H UNIT ?PR?TIMER1_OPEN?MAIN
CODE 11D8H 0005H UNIT ?PR?_TIMER1_RESET?MAIN
CODE 11DDH 0003H UNIT ?PR?TIMER0_OPEN?MAIN
CODE 11E0H 0003H UNIT ?PR?TIMER0_CLOSE?MAIN
CODE 11E3H 0003H UNIT ?PR?TIMER1_CLOSE?MAIN
OVERLAY MAP OF MODULE: .\Objects\C52 (MAIN)
SEGMENT BIT_GROUP DATA_GROUP
+--> CALLED SEGMENT START LENGTH START LENGTH
-------------------------------------------------------------------------
?PR?TIMER0?MAIN ----- ----- ----- -----
+--> ?PR?TIMER0_CLOSE?MAIN
+--> ?PR?TIMER1_CLOSE?MAIN
+--> ?PR?_TIMER0_RESET?MAIN
+--> ?PR?TIMER0_OPEN?MAIN
+--> ?PR?TIMER1_OPEN?MAIN
?PR?TIMER1_OPEN?MAIN ----- ----- ----- -----
+--> ?PR?TIMER0_OPEN?MAIN
*** NEW ROOT ***************************************************
?PR?TIMER1?MAIN ----- ----- ----- -----
+--> ?PR?_TIMER1_RESET?MAIN
+--> ?PR?_TIMER0_RESET?MAIN
+--> ?PR?TIMER0_CLOSE?MAIN
+--> ?PR?TIMER1_CLOSE?MAIN
*** NEW ROOT ***************************************************
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 3
?C_C51STARTUP ----- ----- ----- -----
+--> ?PR?MAIN?MAIN
+--> ?C_INITSEG
?PR?MAIN?MAIN ----- ----- 0057H 000BH
+--> ?PR?LCD1602_INIT?MAIN
+--> ?PR?SEND_INIT?MAIN
+--> ?PR?SHOW_STRING_INIT?MAIN
+--> ?PR?SHOW_STRING_MODE?MAIN
+--> ?PR?_TIMER0_INIT?MAIN
+--> ?PR?_TIMER1_INIT?MAIN
+--> ?PR?TIMER1_OPEN?MAIN
+--> ?PR?_KEY_SCAN?MAIN
+--> ?PR?CHANGE_RANGE?MAIN
+--> ?PR?RESET?MAIN
+--> ?PR?LCD1602_CLEAR?MAIN
+--> ?CO?MAIN
+--> ?PR?PRINTF?PRINTF
+--> ?PR?_LCD1602_SHOW_STRING?MAIN
+--> ?PR?_SEND_STRING?MAIN
?PR?LCD1602_INIT?MAIN ----- ----- ----- -----
+--> ?PR?_LCD1602_WRITE_CMD?MAIN
?PR?_LCD1602_WRITE_CMD?MAIN ----- ----- ----- -----
+--> ?PR?_DELAY_MS?MAIN
?PR?SHOW_STRING_INIT?MAIN ----- ----- ----- -----
+--> ?CO?MAIN
+--> ?PR?_LCD1602_SHOW_STRING?MAIN
?PR?_LCD1602_SHOW_STRING?MAIN ----- ----- 0062H 0002H
+--> ?PR?_LCD1602_WRITE_CMD?MAIN
+--> ?PR?_LCD1602_WRITE_DATA?MAIN
?PR?_LCD1602_WRITE_DATA?MAIN ----- ----- ----- -----
+--> ?PR?_DELAY_MS?MAIN
?PR?SHOW_STRING_MODE?MAIN ----- ----- ----- -----
+--> ?PR?_LCD1602_SHOW_STRING?MAIN
+--> ?CO?MAIN
?PR?_KEY_SCAN?MAIN ----- ----- ----- -----
+--> ?PR?_DELAY_10US?MAIN
?PR?CHANGE_RANGE?MAIN ----- ----- ----- -----
+--> ?PR?SHOW_STRING_INIT?MAIN
+--> ?PR?SHOW_STRING_MODE?MAIN
?PR?RESET?MAIN ----- ----- ----- -----
+--> ?PR?_TIMER0_RESET?MAIN
+--> ?PR?_TIMER1_RESET?MAIN
?PR?LCD1602_CLEAR?MAIN ----- ----- ----- -----
+--> ?PR?_LCD1602_WRITE_CMD?MAIN
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 4
?PR?PRINTF?PRINTF 0020H.0 0001H.1 0062H 001CH
+--> ?PR?PUTCHAR?PUTCHAR
?PR?_SEND_STRING?MAIN ----- ----- 0062H 0003H
+--> ?PR?_SEND_DATA?MAIN
?C_INITSEG ----- ----- ----- -----
+--> ?CO?MAIN
SYMBOL TABLE OF MODULE: .\Objects\C52 (MAIN)
VALUE TYPE NAME
----------------------------------
------- MODULE MAIN
C:0000H SYMBOL _ICE_DUMMY_
D:0080H PUBLIC P0
D:0090H PUBLIC P1
D:00A0H PUBLIC P2
D:00B0H PUBLIC P3
B:00A8H.7 PUBLIC EA
C:11CAH PUBLIC _lcd1602_write_data
D:00A8H PUBLIC IE
D:0024H PUBLIC timer0_th
D:0025H PUBLIC timer0_tl
C:1185H PUBLIC lcd1602_init
D:0028H PUBLIC range_mode
B:00A8H.4 PUBLIC ES
D:0029H PUBLIC gate_mode_number
D:00B8H PUBLIC IP
B:00B0H.1 PUBLIC KEY1
B:0098H.0 PUBLIC RI
D:002DH PUBLIC range_mode_name
B:00B0H.0 PUBLIC KEY2
B:00B0H.2 PUBLIC KEY3
B:0098H.1 PUBLIC TI
B:00B0H.3 PUBLIC KEY4
C:0E44H PUBLIC _lcd1602_show_string
D:0036H PUBLIC pause
D:00CBH PUBLIC RCAP2H
D:0037H PUBLIC result
C:0003H PUBLIC _lcd1602_write_cmd
B:00A0H.6 PUBLIC LCD1602_RS
C:10F7H PUBLIC reset
D:00CAH PUBLIC RCAP2L
C:0B28H PUBLIC main
C:111DH PUBLIC _send_string
B:00A0H.5 PUBLIC LCD1602_RW
C:11C1H PUBLIC _send_data
D:003BH PUBLIC gate_mode
D:003CH PUBLIC range_auto
D:003DH PUBLIC send
D:003EH PUBLIC gate_mode_name
D:0099H PUBLIC SBUF
D:0098H PUBLIC SCON
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 5
D:0089H PUBLIC TMOD
D:0088H PUBLIC TCON
C:11B6H PUBLIC _delay_10us
C:1142H PUBLIC send_init
B:00A0H.7 PUBLIC LCD1602_E
B:0021H.1 PUBLIC busy
C:106DH PUBLIC show_string_mode
D:00E0H PUBLIC ACC
D:004AH PUBLIC auto_count
B:00A8H.1 PUBLIC ET0
B:00A8H.3 PUBLIC ET1
D:008CH PUBLIC TH0
D:008DH PUBLIC TH1
C:11E0H PUBLIC timer0_close
D:00CDH PUBLIC TH2
C:11E3H PUBLIC timer1_close
D:008AH PUBLIC TL0
D:008BH PUBLIC TL1
C:0F74H PUBLIC _key_scan
D:00CCH PUBLIC TL2
C:10B2H PUBLIC _delay_ms
C:0F27H PUBLIC timer0
C:0EC2H PUBLIC timer1
C:0FFDH PUBLIC show_string_init
D:004BH PUBLIC time_sig
B:0088H.4 PUBLIC TR0
B:0088H.6 PUBLIC TR1
D:004DH PUBLIC range_h
D:0053H PUBLIC time_50ms
C:1199H PUBLIC change_range
C:11B1H PUBLIC _timer0_reset
C:11D8H PUBLIC _timer1_reset
D:00C8H PUBLIC T2CON
C:11DDH PUBLIC timer0_open
C:001EH PUBLIC lcd1602_clear
C:11D5H PUBLIC timer1_open
C:1159H PUBLIC _timer0_init
C:116FH PUBLIC _timer1_init
C:000EH PUBLIC uart_isr
D:0055H PUBLIC time_gate_ms
D:00D0H PUBLIC PSW
------- PROC _DELAY_10US
D:0006H SYMBOL ten_us
C:11B6H LINE# 20
C:11B6H LINE# 21
C:11B6H LINE# 22
C:11C0H LINE# 23
------- ENDPROC _DELAY_10US
------- PROC L?0118
------- ENDPROC L?0118
------- PROC _DELAY_MS
D:0006H SYMBOL ms
------- DO
D:0006H SYMBOL i
D:0004H SYMBOL j
------- ENDDO
C:10B2H LINE# 31
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 6
C:10B2H LINE# 32
C:10B2H LINE# 34
C:10BBH LINE# 35
C:10CFH LINE# 36
------- ENDPROC _DELAY_MS
------- PROC _LCD1602_WRITE_CMD
D:0007H SYMBOL cmd
C:0003H LINE# 28
C:0003H LINE# 29
C:0003H LINE# 30
C:0005H LINE# 31
C:0005H LINE# 32
C:0005H LINE# 33
C:0005H LINE# 34
C:0005H LINE# 35
C:0005H LINE# 36
C:0008H LINE# 37
C:000AH LINE# 38
------- ENDPROC _LCD1602_WRITE_CMD
------- PROC _LCD1602_WRITE_DATA
D:0007H SYMBOL dat
C:11CAH LINE# 66
C:11CAH LINE# 67
C:11CAH LINE# 68
C:11CCH LINE# 69
C:11CCH LINE# 70
C:11CCH LINE# 71
C:11CCH LINE# 72
C:11CCH LINE# 73
C:11CCH LINE# 74
C:11CFH LINE# 75
C:11D1H LINE# 76
------- ENDPROC _LCD1602_WRITE_DATA
------- PROC LCD1602_INIT
C:1185H LINE# 104
C:1185H LINE# 105
C:1185H LINE# 106
C:118AH LINE# 107
C:118FH LINE# 108
C:1194H LINE# 109
------- ENDPROC LCD1602_INIT
------- PROC LCD1602_CLEAR
C:001EH LINE# 127
C:001EH LINE# 128
C:001EH LINE# 129
------- ENDPROC LCD1602_CLEAR
------- PROC L?0121
------- ENDPROC L?0121
------- PROC _LCD1602_SHOW_STRING
D:0062H SYMBOL x
D:0005H SYMBOL y
D:0001H SYMBOL str
------- DO
D:0063H SYMBOL i
------- ENDDO
C:0E44H LINE# 139
C:0E46H LINE# 140
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 7
C:0E46H LINE# 141
C:0E49H LINE# 143
C:0E55H LINE# 145
C:0E5BH LINE# 146
C:0E5BH LINE# 147
C:0E60H LINE# 148
C:0E60H LINE# 149
C:0E6EH LINE# 150
C:0E6EH LINE# 151
C:0E72H LINE# 152
C:0E74H LINE# 154
C:0E74H LINE# 155
C:0E7CH LINE# 156
C:0E7CH LINE# 157
C:0E83H LINE# 158
C:0E8AH LINE# 159
C:0E8CH LINE# 160
C:0E8EH LINE# 161
C:0E8EH LINE# 163
C:0E8EH LINE# 164
C:0E93H LINE# 165
C:0E93H LINE# 166
C:0EA1H LINE# 167
C:0EA1H LINE# 168
C:0EA5H LINE# 169
C:0EA7H LINE# 171
C:0EA7H LINE# 172
C:0EAFH LINE# 173
C:0EAFH LINE# 174
C:0EB6H LINE# 175
C:0EBDH LINE# 176
C:0EBFH LINE# 177
C:0EC1H LINE# 178
C:0EC1H LINE# 179
------- ENDPROC _LCD1602_SHOW_STRING
------- PROC _KEY_SCAN
D:0007H SYMBOL mode
------- DO
D:0022H SYMBOL key
------- ENDDO
C:0F74H LINE# 34
C:0F74H LINE# 35
C:0F74H LINE# 38
C:0F7AH LINE# 39
C:0F8CH LINE# 40
C:0F8CH LINE# 41
C:0F93H LINE# 42
C:0F96H LINE# 43
C:0F99H LINE# 44
C:0F9CH LINE# 45
C:0F9FH LINE# 46
C:0FA2H LINE# 47
C:0FA5H LINE# 48
C:0FA8H LINE# 49
C:0FABH LINE# 50
C:0FAEH LINE# 51
C:0FAEH LINE# 52
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 8
C:0FBAH LINE# 53
C:0FBAH LINE# 54
C:0FBDH LINE# 55
C:0FBDH LINE# 56
C:0FBFH LINE# 57
------- ENDPROC _KEY_SCAN
------- PROC _TIMER0_INIT
D:0007H SYMBOL tmod
D:0005H SYMBOL th0
D:0003H SYMBOL tl0
C:1159H LINE# 11
C:1159H LINE# 12
C:1159H LINE# 13
C:1164H LINE# 14
C:1166H LINE# 15
C:1168H LINE# 16
C:116AH LINE# 17
C:116CH LINE# 18
C:116EH LINE# 19
------- ENDPROC _TIMER0_INIT
------- PROC TIMER0_OPEN
C:11DDH LINE# 21
C:11DDH LINE# 22
C:11DDH LINE# 23
C:11DFH LINE# 24
------- ENDPROC TIMER0_OPEN
------- PROC TIMER0_CLOSE
C:11E0H LINE# 26
C:11E0H LINE# 27
C:11E0H LINE# 28
C:11E2H LINE# 29
------- ENDPROC TIMER0_CLOSE
C:11A8H SYMBOL L?0120
------- PROC L?0119
------- ENDPROC L?0119
C:11A8H SYMBOL L?0120
------- PROC _TIMER0_RESET
D:0007H SYMBOL th0
D:0005H SYMBOL tl0
C:11B1H LINE# 31
C:11B1H LINE# 32
C:11B1H LINE# 33
C:11B3H LINE# 34
C:11B5H LINE# 35
------- ENDPROC _TIMER0_RESET
------- PROC _TIMER1_INIT
D:0007H SYMBOL tmod
D:0005H SYMBOL th1
D:0003H SYMBOL tl1
C:116FH LINE# 37
C:116FH LINE# 38
C:116FH LINE# 39
C:117AH LINE# 40
C:117CH LINE# 41
C:117EH LINE# 42
C:1180H LINE# 43
C:1182H LINE# 44
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 9
C:1184H LINE# 45
------- ENDPROC _TIMER1_INIT
------- PROC _TIMER1_RESET
D:0007H SYMBOL th1
D:0005H SYMBOL tl1
C:11D8H LINE# 47
C:11D8H LINE# 48
C:11D8H LINE# 49
C:11DAH LINE# 50
C:11DCH LINE# 51
------- ENDPROC _TIMER1_RESET
------- PROC L?0122
------- ENDPROC L?0122
------- PROC TIMER1_OPEN
C:11D5H LINE# 53
C:11D5H LINE# 54
C:11D5H LINE# 55
C:11D7H LINE# 56
------- ENDPROC TIMER1_OPEN
------- PROC TIMER1_CLOSE
C:11E3H LINE# 58
C:11E3H LINE# 59
C:11E3H LINE# 60
C:11E5H LINE# 61
------- ENDPROC TIMER1_CLOSE
------- PROC SEND_INIT
C:1142H LINE# 18
C:1142H LINE# 19
C:1142H LINE# 20
C:1145H LINE# 21
C:114BH LINE# 22
C:1151H LINE# 23
C:1154H LINE# 24
C:1156H LINE# 25
C:1158H LINE# 26
------- ENDPROC SEND_INIT
------- PROC UART_ISR
C:000EH LINE# 31
C:000EH LINE# 33
C:0011H LINE# 34
C:0011H LINE# 35
C:0013H LINE# 36
C:0013H LINE# 37
C:0016H LINE# 38
C:0016H LINE# 39
C:0018H LINE# 40
C:001AH LINE# 41
C:001AH LINE# 42
------- ENDPROC UART_ISR
------- PROC _SEND_DATA
D:0007H SYMBOL dat
C:11C1H LINE# 49
C:11C1H LINE# 50
C:11C1H LINE# 51
C:11C4H LINE# 52
C:11C5H LINE# 53
C:11C7H LINE# 54
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 10
C:11C9H LINE# 55
------- ENDPROC _SEND_DATA
------- PROC _SEND_STRING
D:0062H SYMBOL s
C:111DH LINE# 62
C:1123H LINE# 63
C:1123H LINE# 64
C:112EH LINE# 65
C:112EH LINE# 66
C:113FH LINE# 67
C:1141H LINE# 68
------- ENDPROC _SEND_STRING
------- PROC SHOW_STRING_MODE
C:106DH LINE# 31
C:106DH LINE# 32
C:106DH LINE# 34
C:107AH LINE# 35
C:1087H LINE# 36
C:108DH LINE# 37
C:1091H LINE# 38
C:1093H LINE# 39
C:1093H LINE# 40
C:109EH LINE# 41
C:109EH LINE# 42
------- ENDPROC SHOW_STRING_MODE
------- PROC SHOW_STRING_INIT
C:0FFDH LINE# 44
C:0FFDH LINE# 45
C:0FFDH LINE# 46
C:1009H LINE# 47
C:1014H LINE# 48
C:101FH LINE# 49
C:1023H LINE# 50
C:1027H LINE# 51
C:1029H LINE# 52
C:1029H LINE# 53
C:1036H LINE# 54
C:1036H LINE# 55
------- ENDPROC SHOW_STRING_INIT
------- PROC RESET
C:10F7H LINE# 57
C:10F7H LINE# 58
C:10FAH LINE# 59
C:10FFH LINE# 60
C:1103H LINE# 61
C:1103H LINE# 62
C:1106H LINE# 63
C:1108H LINE# 64
C:1108H LINE# 65
C:110FH LINE# 66
C:110FH LINE# 67
C:1114H LINE# 68
C:111CH LINE# 69
------- ENDPROC RESET
------- PROC CHANGE_RANGE
C:1199H LINE# 71
C:1199H LINE# 72
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 11
C:1199H LINE# 73
C:11A2H LINE# 74
C:11A5H LINE# 75
------- ENDPROC CHANGE_RANGE
------- PROC MAIN
------- DO
D:0057H SYMBOL key
------- DO
D:0058H SYMBOL disp
------- ENDDO
------- ENDDO
C:0B28H LINE# 78
C:0B28H LINE# 79
C:0B28H LINE# 80
C:0B2BH LINE# 81
C:0B2EH LINE# 82
C:0B30H LINE# 83
C:0B3FH LINE# 85
C:0B42H LINE# 86
C:0B45H LINE# 88
C:0B48H LINE# 89
C:0B4BH LINE# 92
C:0B59H LINE# 93
C:0B61H LINE# 94
C:0B61H LINE# 95
C:0B64H LINE# 97
C:0B64H LINE# 98
C:0B64H LINE# 99
C:0B6BH LINE# 100
C:0B70H LINE# 101
C:0B70H LINE# 102
C:0B72H LINE# 103
C:0B75H LINE# 104
C:0B75H LINE# 105
C:0B77H LINE# 106
C:0B7CH LINE# 107
C:0B7CH LINE# 108
C:0B7EH LINE# 109
C:0B81H LINE# 110
C:0B90H LINE# 111
C:0B93H LINE# 112
C:0B96H LINE# 113
C:0B98H LINE# 114
C:0B9DH LINE# 115
C:0B9DH LINE# 116
C:0BA0H LINE# 117
C:0BA0H LINE# 118
C:0BA2H LINE# 119
C:0BA7H LINE# 120
C:0BA7H LINE# 121
C:0BAAH LINE# 122
C:0BADH LINE# 123
C:0BB0H LINE# 124
C:0BB0H LINE# 125
C:0BB5H LINE# 126
C:0BB5H LINE# 128
C:0BBCH LINE# 129
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 12
C:0BBCH LINE# 130
C:0C5EH LINE# 131
C:0C61H LINE# 133
C:0C61H LINE# 134
C:0CEFH LINE# 135
C:0CEFH LINE# 136
C:0CFAH LINE# 137
C:0CFAH LINE# 138
C:0CFDH LINE# 139
C:0D22H LINE# 140
C:0D22H LINE# 141
C:0D24H LINE# 142
C:0D27H LINE# 143
C:0D27H LINE# 144
C:0D4BH LINE# 145
C:0D4BH LINE# 146
C:0D4FH LINE# 147
C:0D52H LINE# 148
C:0D52H LINE# 149
C:0D54H LINE# 151
C:0D54H LINE# 152
C:0D56H LINE# 153
C:0D56H LINE# 154
C:0D5BH LINE# 155
C:0D64H LINE# 156
C:0D66H LINE# 158
C:0D66H LINE# 159
C:0D84H LINE# 160
C:0D84H LINE# 161
C:0D91H LINE# 162
C:0D98H LINE# 163
C:0DA1H LINE# 164
C:0DA4H LINE# 165
C:0DA4H LINE# 166
C:0DA7H LINE# 167
C:0DAAH LINE# 168
C:0DAAH LINE# 169
------- ENDPROC MAIN
------- PROC TIMER0
C:0F27H LINE# 172
C:0F34H LINE# 174
C:0F38H LINE# 175
C:0F3BH LINE# 176
C:0F3EH LINE# 177
C:0F41H LINE# 178
C:0F49H LINE# 179
C:0F51H LINE# 180
C:0F51H LINE# 181
C:0F54H LINE# 182
C:0F56H LINE# 184
C:0F56H LINE# 185
C:0F59H LINE# 186
C:0F5CH LINE# 187
C:0F5CH LINE# 188
C:0F5EH LINE# 190
C:0F5EH LINE# 191
C:0F61H LINE# 192
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 13
C:0F69H LINE# 193
C:0F69H LINE# 194
------- ENDPROC TIMER0
------- PROC TIMER1
------- DO
D:0023H SYMBOL start
------- ENDDO
C:0EC2H LINE# 196
C:0ECFH LINE# 198
C:0ED3H LINE# 199
C:0ED3H LINE# 200
C:0ED9H LINE# 201
C:0EE1H LINE# 202
C:0EE3H LINE# 204
C:0EE3H LINE# 206
C:0EEAH LINE# 207
C:0EEEH LINE# 208
C:0EEEH LINE# 209
C:0EF1H LINE# 210
C:0EF7H LINE# 211
C:0EFAH LINE# 212
C:0EFCH LINE# 214
C:0EFCH LINE# 215
C:0F04H LINE# 216
C:0F04H LINE# 218
C:0F11H LINE# 219
C:0F11H LINE# 220
C:0F14H LINE# 221
C:0F17H LINE# 222
C:0F1AH LINE# 223
C:0F1CH LINE# 224
C:0F1CH LINE# 225
C:0F1CH LINE# 226
------- ENDPROC TIMER1
------- ENDMOD MAIN
------- MODULE ?C?FPMUL
C:0026H PUBLIC ?C?FPMUL
------- ENDMOD ?C?FPMUL
------- MODULE ?C?FPDIV
C:012FH PUBLIC ?C?FPDIV
------- ENDMOD ?C?FPDIV
------- MODULE ?C?FPCMP
C:01CEH PUBLIC ?C?FPCMP
C:01CCH PUBLIC ?C?FPCMP3
------- ENDMOD ?C?FPCMP
------- MODULE ?C?FCAST
C:024FH PUBLIC ?C?FCASTC
C:024AH PUBLIC ?C?FCASTI
C:0245H PUBLIC ?C?FCASTL
------- ENDMOD ?C?FCAST
------- MODULE PRINTF
D:0062H PUBLIC ?_PRINTF?BYTE
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 14
D:0062H PUBLIC ?_SPRINTF?BYTE
C:071BH PUBLIC _PRINTF
C:0715H PUBLIC _SPRINTF
------- ENDMOD PRINTF
------- MODULE ?C?FPROUND
C:02CDH PUBLIC ?C?FPROUND
------- ENDMOD ?C?FPROUND
------- MODULE ?C?FPCONVERT
C:02FCH PUBLIC ?C?FPCONVERT
------- ENDMOD ?C?FPCONVERT
------- MODULE ?C?FPADD
C:0406H PUBLIC ?C?FPADD
C:0402H PUBLIC ?C?FPSUB
------- ENDMOD ?C?FPADD
------- MODULE ?C?FTNPWR
C:0527H PUBLIC ?C?FTNPWR
------- ENDMOD ?C?FTNPWR
------- MODULE ?C?CLDPTR
C:0567H PUBLIC ?C?CLDPTR
------- ENDMOD ?C?CLDPTR
------- MODULE ?C?CLDOPTR
C:0580H PUBLIC ?C?CLDOPTR
------- ENDMOD ?C?CLDOPTR
------- MODULE ?C?CSTPTR
C:05ADH PUBLIC ?C?CSTPTR
------- ENDMOD ?C?CSTPTR
------- MODULE ?C?IMUL
C:05BFH PUBLIC ?C?IMUL
------- ENDMOD ?C?IMUL
------- MODULE ?C?UIDIV
C:05D1H PUBLIC ?C?UIDIV
------- ENDMOD ?C?UIDIV
------- MODULE ?C?LMUL
C:0626H PUBLIC ?C?LMUL
------- ENDMOD ?C?LMUL
------- MODULE ?C?LNEG
C:0675H PUBLIC ?C?LNEG
------- ENDMOD ?C?LNEG
------- MODULE ?C?PLDIIDATA
C:0683H PUBLIC ?C?PLDIIDATA
------- ENDMOD ?C?PLDIIDATA
------- MODULE ?C?CCASE
C:0693H PUBLIC ?C?CCASE
------- ENDMOD ?C?CCASE
BL51 BANKED LINKER/LOCATER V6.22.2.0 05/23/2022 15:58:36 PAGE 15
------- MODULE PUTCHAR
C:10D0H PUBLIC _PUTCHAR
------- ENDMOD PUTCHAR
Program Size: data=102.2 xdata=0 code=4582
LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)

258
Listings/main.lst Normal file
View File

@ -0,0 +1,258 @@
C51 COMPILER V9.57.0.0 MAIN 05/23/2022 15:58:34 PAGE 1
C51 COMPILER V9.57.0.0, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Objects\main.obj
COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE Main\main.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\Include) DEBUG OBJECTEXTEN
-D PRINT(.\Listings\main.lst) TABS(2) OBJECT(.\Objects\main.obj)
line level source
1 #include<reg52.h>
2 #include<stdio.h>
3
4 #include"public.h"
5 #include"lcd1602.h"
6 #include"key.h"
7 #include"timer.h"
8 #include"com_send.h"
9
10 u16 time_sig;
11 u16 time_50ms;
12 u16 time_gate_ms;
13 u8 send;
14 u8 pause;
15 u8 range_mode;
16 u8 gate_mode;
17 double result;
18
19 u8* range_mode_name[3] = {"L","M","H"};
20 u8* gate_mode_name[4] = {" 1"," 2"," 5","10"};
21 u8 gate_mode_number[4] = {1,2,5,10};
22
23 u8 timer0_th = 0x4c;
24 u8 timer0_tl[3] = {0xa0,0x16,0x14};
25
26
27 u8 range_auto;
28 u8 auto_count;
29 u16 range_h[3] = {100,50000,460000};
30
31 void show_string_mode()
32 {
33 1
34 1 lcd1602_show_string(5,1,range_mode_name[range_mode]);
35 1 lcd1602_show_string(13,1,gate_mode_name[gate_mode]);
36 1 if(range_auto){
37 2 lcd1602_show_string(6,1,"a");
38 2 }
39 1 else{
40 2 lcd1602_show_string(6,1," ");
41 2 }
42 1 }
43
44 void show_string_init()
45 {
46 1 lcd1602_show_string(0,0,"Frq:");
47 1 lcd1602_show_string(14,0,"Hz");
48 1 lcd1602_show_string(0,1,"Mode: Time:");
49 1 if(range_mode){
50 2 lcd1602_show_string(15,1,"s");
51 2 }
52 1 else{
53 2 lcd1602_show_string(15,1,"T");
54 2 }
C51 COMPILER V9.57.0.0 MAIN 05/23/2022 15:58:34 PAGE 2
55 1 }
56
57 void reset(){
58 1 timer0_reset(timer0_th,timer0_tl[range_mode]);
59 1 time_50ms=0;
60 1 if(range_mode)
61 1 {
62 2 timer1_reset(0x00,0x00);
63 2 }else
64 1 {
65 2 timer1_reset(0xFF,0xFF);
66 2 }
67 1 time_sig=0;
68 1 result = 0;
69 1 }
70
71 void change_range()
72 {
73 1 range_mode %= 3;
74 1 show_string_init();
75 1 show_string_mode();
76 1 }
77
78 int main()
79 {
80 1 u8 key=0;
81 1 range_mode = 1;
82 1 gate_mode = 0;
83 1 time_gate_ms = 20*gate_mode_number[gate_mode];
84 1
85 1 lcd1602_init();
86 1 send_init();
87 1
88 1 show_string_init();
89 1 show_string_mode();
90 1
91 1
92 1 timer0_init(0x01,timer0_th,timer0_tl[range_mode]);
93 1 timer1_init(0x50,0x00,0x00);
94 1 timer0_open();
95 1 timer1_open();
96 1
97 1 while(1)
98 1 {
99 2 key=key_scan(0);
100 2 if(key==KEY1_PRESS)
101 2 {
102 3 range_mode++;
103 3 change_range();
104 3 reset();
105 3 }
106 2 else if(key==KEY2_PRESS)
107 2 {
108 3 gate_mode++;
109 3 gate_mode %= 4;
110 3 time_gate_ms = 20*gate_mode_number[gate_mode];
111 3 show_string_mode();
112 3 reset();
113 3 }
114 2 else if(key==KEY3_PRESS)
115 2 {
116 3 range_auto = ~range_auto;
C51 COMPILER V9.57.0.0 MAIN 05/23/2022 15:58:34 PAGE 3
117 3 show_string_mode();
118 3 }
119 2 else if(key==KEY4_PRESS)
120 2 {
121 3 lcd1602_clear();
122 3 show_string_init();
123 3 show_string_mode();
124 3 }
125 2 if(send==1)
126 2 {
127 3 char disp[10];
128 3 if(range_mode)
129 3 {
130 4 result = (double)(time_sig*65536+TH1*256+TL1)/(double)(time_50ms*50+((TH0-timer0_th)*256+TL0-timer0_tl
-[range_mode])/1000)*1000;
131 4 }
132 3 else
133 3 {
134 4 result = (double)1000000*gate_mode_number[gate_mode]/(double)(time_50ms*50006+((TH0-timer0_th)*256)+TL
-0-timer0_tl[range_mode]);
135 4 }
136 3 if(range_auto && auto_count>0)
137 3 {
138 4 auto_count = 0;
139 4 if(range_mode < 2 && result>range_h[range_mode])
140 4 {
141 5 range_mode += 1;
142 5 change_range();
143 5 }
144 4 if(range_mode > 0 && result<range_h[range_mode-1])
145 4 {
146 5 range_mode += 2;
147 5 change_range();
148 5 }
149 4 }
150 3 else
151 3 {
152 4 auto_count++;
153 4 }
154 3 if(range_mode ==2){
155 4 sprintf(disp,"%.2f",result);
156 4 }
157 3 else
158 3 {
159 4 sprintf(disp,"%.3f",result);
160 4 }
161 3 lcd1602_show_string(4,0,disp);
162 3 send_string(disp);
163 3 send_string("\r\n");
164 3 reset();
165 3 timer0_open();
166 3 timer1_open();
167 3 send=0;
168 3 }
169 2 }
170 1 }
171
172 void timer0() interrupt 1 //¶¨Ê±Æ÷0ÖжϺ¯Êý
173 {
174 1 if(range_mode){
175 2 timer0_close();
176 2 timer1_close();
C51 COMPILER V9.57.0.0 MAIN 05/23/2022 15:58:34 PAGE 4
177 2 timer0_reset(timer0_th,timer0_tl[range_mode]);
178 2 time_50ms++;
179 2 if(time_50ms==time_gate_ms)
180 2 {
181 3 send=1;
182 3 }
183 2 else
184 2 {
185 3 timer0_open();
186 3 timer1_open();
187 3 }
188 2 }
189 1 else
190 1 {
191 2 timer0_reset(timer0_th,timer0_tl[range_mode]);
192 2 time_50ms++;
193 2 }
194 1 }
195
196 void timer1() interrupt 3
197 {
198 1 if(range_mode)
199 1 {
200 2 timer1_reset(0x00,0x00);
201 2 time_sig++;
202 2 }
203 1 else
204 1 {
205 2 static u8 start = 0;
206 2 timer1_reset(0xFF,0xFF);
207 2 if(!start)
208 2 {
209 3 timer0_reset(timer0_th,timer0_tl[range_mode]);
210 3 time_50ms = 0;
211 3 start = 1;
212 3 }
213 2 else
214 2 {
215 3 time_sig++;
216 3 }
217 2
218 2 if(time_sig==gate_mode_number[gate_mode])
219 2 {
220 3 timer0_close();
221 3 timer1_close();
222 3 send=1;
223 3 start = 0;
224 3 }
225 2 }
226 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1458 ----
CONSTANT SIZE = 61 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 53 16
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

226
Main/main.c Normal file
View File

@ -0,0 +1,226 @@
#include<reg52.h>
#include<stdio.h>
#include"public.h"
#include"lcd1602.h"
#include"key.h"
#include"timer.h"
#include"com_send.h"
u16 time_sig;
u16 time_50ms;
u16 time_gate_ms;
u8 send;
u8 pause;
u8 range_mode;
u8 gate_mode;
double result;
u8* range_mode_name[3] = {"L","M","H"};
u8* gate_mode_name[4] = {" 1"," 2"," 5","10"};
u8 gate_mode_number[4] = {1,2,5,10};
u8 timer0_th = 0x4c;
u8 timer0_tl[3] = {0xa0,0x16,0x14};
u8 range_auto;
u8 auto_count;
u16 range_h[3] = {100,50000,460000};
void show_string_mode()
{
lcd1602_show_string(5,1,range_mode_name[range_mode]);
lcd1602_show_string(13,1,gate_mode_name[gate_mode]);
if(range_auto){
lcd1602_show_string(6,1,"a");
}
else{
lcd1602_show_string(6,1," ");
}
}
void show_string_init()
{
lcd1602_show_string(0,0,"Frq:");
lcd1602_show_string(14,0,"Hz");
lcd1602_show_string(0,1,"Mode: Time:");
if(range_mode){
lcd1602_show_string(15,1,"s");
}
else{
lcd1602_show_string(15,1,"T");
}
}
void reset(){
timer0_reset(timer0_th,timer0_tl[range_mode]);
time_50ms=0;
if(range_mode)
{
timer1_reset(0x00,0x00);
}else
{
timer1_reset(0xFF,0xFF);
}
time_sig=0;
result = 0;
}
void change_range()
{
range_mode %= 3;
show_string_init();
show_string_mode();
}
int main()
{
u8 key=0;
range_mode = 1;
gate_mode = 0;
time_gate_ms = 20*gate_mode_number[gate_mode];
lcd1602_init();
send_init();
show_string_init();
show_string_mode();
timer0_init(0x01,timer0_th,timer0_tl[range_mode]);
timer1_init(0x50,0x00,0x00);
timer0_open();
timer1_open();
while(1)
{
key=key_scan(0);
if(key==KEY1_PRESS)
{
range_mode++;
change_range();
reset();
}
else if(key==KEY2_PRESS)
{
gate_mode++;
gate_mode %= 4;
time_gate_ms = 20*gate_mode_number[gate_mode];
show_string_mode();
reset();
}
else if(key==KEY3_PRESS)
{
range_auto = ~range_auto;
show_string_mode();
}
else if(key==KEY4_PRESS)
{
lcd1602_clear();
show_string_init();
show_string_mode();
}
if(send==1)
{
char disp[10];
if(range_mode)
{
result = (double)(time_sig*65536+TH1*256+TL1)/(double)(time_50ms*50+((TH0-timer0_th)*256+TL0-timer0_tl[range_mode])/1000)*1000;
}
else
{
result = (double)1000000*gate_mode_number[gate_mode]/(double)(time_50ms*50006+((TH0-timer0_th)*256)+TL0-timer0_tl[range_mode]);
}
if(range_auto && auto_count>0)
{
auto_count = 0;
if(range_mode < 2 && result>range_h[range_mode])
{
range_mode += 1;
change_range();
}
if(range_mode > 0 && result<range_h[range_mode-1])
{
range_mode += 2;
change_range();
}
}
else
{
auto_count++;
}
if(range_mode ==2){
sprintf(disp,"%.2f",result);
}
else
{
sprintf(disp,"%.3f",result);
}
lcd1602_show_string(4,0,disp);
send_string(disp);
send_string("\r\n");
reset();
timer0_open();
timer1_open();
send=0;
}
}
}
void timer0() interrupt 1 //¶¨Ê±Æ÷0ÖжϺ¯Êý
{
if(range_mode){
timer0_close();
timer1_close();
timer0_reset(timer0_th,timer0_tl[range_mode]);
time_50ms++;
if(time_50ms==time_gate_ms)
{
send=1;
}
else
{
timer0_open();
timer1_open();
}
}
else
{
timer0_reset(timer0_th,timer0_tl[range_mode]);
time_50ms++;
}
}
void timer1() interrupt 3
{
if(range_mode)
{
timer1_reset(0x00,0x00);
time_sig++;
}
else
{
static u8 start = 0;
timer1_reset(0xFF,0xFF);
if(!start)
{
timer0_reset(timer0_th,timer0_tl[range_mode]);
time_50ms = 0;
start = 1;
}
else
{
time_sig++;
}
if(time_sig==gate_mode_number[gate_mode])
{
timer0_close();
timer1_close();
send=1;
start = 0;
}
}
}

BIN
Objects/C52 Normal file

Binary file not shown.

36
Objects/C52.build_log.htm Normal file
View File

@ -0,0 +1,36 @@
<html>
<body>
<pre>
<h1>µVision Build Log</h1>
<h2>Tool Versions:</h2>
IDE-Version: ¦ÌVision V5.24.2.86
Copyright (C) 2017 ARM Ltd and ARM Germany GmbH. All rights reserved.
License Information: leaf green, oair, LIC=3U39U-SKLG7-H1EPN-YJ8UA-X3RTS-RJMY6
Tool Versions:
Toolchain: MDK51 Professional Version: 9.57.0.0
Toolchain Path: C:\Keil_v5\C51\BIN
C Compiler: C51.exe V9.57.0.0
Assembler: A51.exe V8.2.7.0
Linker/Locator: BL51.exe V6.22.2.0
Library Manager: LIB51.exe V4.30.1.0
Hex Converter: OH51.exe V2.7.0.0
CPU DLL: S8051.DLL V3.113.0.0
Dialog DLL: DP51.DLL V2.64.0.0
Target DLL: MON51.DLL V2.47.0.0
Dialog DLL: TP51.DLL V2.60.0.0
<h2>Project:</h2>
C:\Users\Simular\Desktop\My\C52.uvproj
Project File Date: 05/11/2022
<h2>Output:</h2>
Build target 'Target 1'
linking...
Program Size: data=102.2 xdata=0 code=4582
creating hex file from ".\Objects\C52"...
".\Objects\C52" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:00
</pre>
</body>
</html>

3
Objects/C52.lnp Normal file
View File

@ -0,0 +1,3 @@
".\Objects\main.obj"
TO ".\Objects\C52"
PRINT(".\Listings\C52.m51") RAMSIZE(256)