📄 main.c
字号:
/****************************************************************************
* *
* File: Main.c *
* *
* Author: 王 *
* *
* Compiler: KEIL C51 V7.01
* *
* Description: CPU=AT89C2051 11.0592M HZ *
* *
* Date: 2007/03/28 *
* *
*****************************************************************************
* *
* Version | Date | Description *
* --------+----------+----------------------------------------------------- *
* V1.0 | 07.03.28 | 原始文本 *
* *
****************************************************************************/
#define Main_GLOBALS
#include "includes.h"
bit FlagS;
/****************************************************************************
* *
* Function: main *
* *
****************************************************************************/
void main(void)
{
Uint32 FREQ_Buffer;
Uchar buffer;
Uint16 TimerBuf;
char i;
init();
while(1)
{
if(TestOver==0)
{
TR0=0;
TR1=0;
TestOver=1;
ten=1;
hud=0;
Test=1;
TL1=0;
TH1=0;
TH0=TH0_VAL;
TL0=TL0_VAL;
Over_CNT=0;
uc1s=19;//测试频率50ms
TR0=1;
TR1=1;
}
if(T1sOver)
{
TR0=0;
TR1=0;
T1sOver=0;
if(Test)
{
Test=0;
if(Over_CNT==0)
{
TimerBuf=TL1+TH1*256;
if(TimerBuf<31)//FREQ<200k/s
{
SingleFRE=1;//置实频标志
Buf=1;
ten=0; //实频切换
hud=0;
}
else if((TimerBuf>30)&&TimerBuf<70)//FREQ<200k/s
{
Buf=16;
ten=0; //切换为16倍分频
hud=1;
}
else
{
SingleFRE=0;
Buf=256;
ten=1; //切换为100倍分频
hud=0;
}
}
else
{
SingleFRE=0;
Buf=256;
ten=1; //切换为100倍分频
hud=0;
}
TL1=0;
TH1=0;
TH0=TH0_VAL;
TL0=TL0_VAL;
Over_CNT=0;
uc1s=0; //测试频率1s
TR0=1;
TR1=1;
}
else
{
TestOver=0;
FREQ=Over_CNT*65536+TH1*256+TL1;
FREQ=FREQ*Buf;
}
Over_CNT=0;
}
if(FREQ!=Old_FREQ) //频率有变化显示
{
Old_FREQ=FREQ;
FREQ_Buffer=FREQ;
for(i=0;i<8;i++)
{
Led[i]=FREQ_Buffer%10;
FREQ_Buffer=FREQ_Buffer/10;
}
if(FREQ>99999)
{
Led_KHZ=ON;
Led_HZ=OFF;
buffer=FREQ/100000;
if(buffer>9) //FREQ>=1M
{
for(i=0;i<5;i++)
{
Led[i]=Led[i+2];
}
Led[1]=Led[1]|0x80;
}
else //FREQ<1m && FREQ>=100000
{
for(i=0;i<5;i++)
{
Led[i]=Led[i+1];
}
Led[2]=Led[2]|0x80;
}
}
else
{
Led_KHZ=OFF;
Led_HZ=ON;
}
send_byte(CMD_RESET);//清除显示(消引)
delay10ms(1);
UnDis_Flag=0;
for(i=4;i>=0;i--)
{
if(Led[i]!=0)
{
DisNum(i,Led[i]);
UnDis_Flag=1;
}
else
{
if(UnDis_Flag==1)
{
DisNum(i,0);
}
}
}
if(FREQ==0)
{
DisNum(0,1);
}
}//END if(FREQ!=Old_FREQ)
} //END while(1)
} //END main
/****************************************************************************
* *
* Function: void init(void) *
* *
* Input: - *
* Output: - *
* *
* Description: 程序初始化 *
* *
****************************************************************************/
void init(void)
{
Uchar j;
Uint16 Timer;
EA=0;
P1=0xff;
P3=0xff;
ten=1;
hud=0;
Old_FREQ=0;
FREQ=0;
Over_CNT=0;
for (tmr=0;tmr<0x2000;tmr++); // 上电延时DisPlay
send_byte(CMD_RESET); // 复位HD7279A
send_byte(CMD_TEST); // 测试指令
for (j=0;j<3;j++) // 延时约3秒
{
delay10ms(100);
}
send_byte(CMD_RESET); //清除显示
DisNum(0,0);
TMOD=0x51; //T0 timer 50ms,T1 计数。
// TMOD=0x21; //T0 timer 50ms,T1 定时。
Timer=65536-Fosc*T/12;
TH0_VAL=Timer/256;
TL0_VAL=Timer%256;
uc1s=0;
T1sOver=0;
TH0=TH0_VAL;
TL0=TL0_VAL;
TH1=0;
TL1=0;
ET0=1;
ET1=1;
TestOver=0;
Test=0;
SingleFRE=0;
EA=1;
}
/****************************************************************************
* *
* Function: void Timer0(void) interrupt 1 *
* *
* Input: - *
* Output: - *
* *
* Description: 50ms中断 *
* *
****************************************************************************/
void Timer0(void) interrupt 1
{
TR0=0;
TH0=TH0_VAL;
TL0=TL0_VAL;
TR0=1;
uc1s++;
if(uc1s>19)
{
TR0=0;
TR1=0;
T1sOver=1;
}
}
/****************************************************************************
* *
* Function: void Count1(void) interrupt 3 *
* *
* Input: - *
* Output: - *
* *
* Description: T1 溢出中断 *
* *
****************************************************************************/
void Count1(void) interrupt 3
{
Over_CNT++;
}
void EXTINT1(void) interrupt 2
{
TR1=0;
if(FlagS==1)
{
if(TH1!=0||TL0>20)
{
Over_CNT++;
}
}
else
{
TH1=0;
TL1=0;
}
TR1=1;
FlagS=!FlagS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -