⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zbb.c

📁 在keil C下开发的频率监测程序
💻 C
字号:

#include "AT892051.H"

#define B0    P1_7
#define B1    P1_6
#define B2    P1_5
#define B3    P1_4
#define B4    P1_3
#define B5    P1_2
#define B6    P1_1
#define B7    P1_0

#define DOG   P3_0

#define W1    P3_3
#define W2    P3_4
#define W3    P3_5
#define W4    P3_1
 
#define RUN   P3_7

#define uchar  unsigned char 
#define uint   unsigned int
/****************************/
uint  data timeCount=0;
uchar data sampCount=0;   //采集计数

uchar data countFlag=0x55;   //计数起始标志  
long  data zjData=0;	  //频率计算中间变量

uint  data tempData=0;  
long  data endData=0; 	  //最终显示数据//频率计算结果
uchar data disbuffer[4]={5,0,0,0};
uint  data feqBuf[20];   //20个采样数据取平均值
uchar data allCount=0;
//uint  data allBuf[3];	//3次平均值
uchar data ShowFlag;
//LED显示字符编码,按照0~9的顺序。
uchar data ledNo[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
void init();

//========================================
void Int0(void) interrupt 0 using 1	   
{  
	if(ShowFlag == 0x55)
	{
		countFlag=~countFlag;
		if(countFlag == 0xaa)
		{
			TL0=0x00;
			TH0=0x00;
		}
		else
		{
			tempData=TH0;
			tempData=(tempData<<8)+TL0;
			ShowFlag=0x66;
		}
	}	
}
	
//========================================
  /***********************************
	定时器0
	1ms
************************************/		
/*void TIME_0(void) interrupt 1 using 1
{
    TL0=0X66;
	TH0=0XFC;
	timeCount++;
}*/

void main()
{
    uint iii;
	uchar i=0;
	init();

    ShowFlag=0x55;

	while(1)
	{ 
		DOG=!DOG;
		if(ShowFlag == 0x66)
		{
			if ((tempData <= 30000) && (tempData >= 15400))
			{
				zjData=100000000/tempData;
				allCount++;
				feqBuf[sampCount]=zjData;
				sampCount++;
				ShowFlag=0x55;
				if (sampCount >= 20)
				{
					sampCount=0;
					endData=0;
					for (iii=0;iii<20;iii++)
					{
						endData+=feqBuf[iii];
					}
					endData=endData/20+3;
					if (allCount >= 150)
					{
						allCount=0;
						disbuffer[0]=endData/1000;
						endData=endData%1000;
						disbuffer[1]=endData/100;
						endData=endData%100;
						disbuffer[2]=endData/10;
						disbuffer[3]=endData%10;
					}
				}
			}
			else
			{
				ShowFlag=0x55;
				countFlag=0x55;
			}
		}

		if (timeCount >= 100)
		{
			timeCount = 0;
			RUN=!RUN;
		}
		P1=0x0;
		W1=1;
		W2=0;
		W3=0;
		W4=0;	
		P1=ledNo[disbuffer[0]];
		for (iii=0;iii<400;iii++);
		
		P1=0x0;
		W1=0;
		W2=1;
		W3=0;
		W4=0; 
		P1=ledNo[disbuffer[1]]&0xfe;
		for (iii=0;iii<400;iii++);
		
		P1=0x0;
		W1=0;
		W2=0;
		W3=1;
		W4=0; 
		P1=ledNo[disbuffer[2]];
		for (iii=0;iii<400;iii++);
		
		P1=0x0;
		W1=0;
		W2=0;
		W3=0;
		W4=1;
		P1=ledNo[disbuffer[3]];
		for (iii=0;iii<400;iii++);
		W1=0;
		W2=0;
		W3=0;
		W4=0;
		if ((ShowFlag != 0x55) && (ShowFlag != 0x66))
		{
			ShowFlag=0x55;
		}
  		if ((countFlag != 0x55) && (countFlag != 0xaa))
		{
			countFlag=0x55;
		}
		timeCount++;
	}
}
/*******************************************************************************************/
//接收读卡数据
/*******************************************************************************************/

/*******************************************************************************************/
//读卡
/*******************************************************************************************/


/*******************************************************************************************/
//单片机初始化
/*******************************************************************************************/
void init()
{	
	EA  = 0;    
	TMOD= 0x11;     	    //T0 定时器方式1

    //TH0 = 0xfc;
	//TL0 = 0x66; 			//1毫秒定时*/
    //TH0 = 0x0;
	//TL0 = 0x0; 			//定时*/
	
	ET0 = 1;			    //定时器0中断允许
	TR0 = 1;				// 设定时器0开始计数
	//ET1 = 1;			    //定时器1中断允许
	//TR1 = 1;				// 设定时器1开始计数

	IT0 = 1;				//外部中断0下降沿触发
 	EX0 = 1;				//外部中断0允许

	//ES  = 1;
	EA  = 1;
}

//===========================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -