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

📄 new

📁 自己写的频率计显示部分
💻
字号:
/*********************************************************/
/**              频 率 测 试 程 序                      **/
/**                作者:施祖清					            		**/
/**                时间:2007/3/22                    **/
/**        National University of Defence Technology    **/
/**                   0731-4534435                      **/
/*********************************************************/

#include <absacc.h>
#include <reg51.h>
#include<intrins.h>
#include <math.h>
#include <string.h>

#define uchar unsigned char
#define uint8 unsigned char
#define uint32 unsigned int
#define	schar	static  unsigned 	char

#define LED1 XBYTE [0xA000]   //数码管地址
#define LED2 XBYTE [0xA001]
#define LED3 XBYTE [0xA002]
#define LED4 XBYTE [0xA003]
#define LED5 XBYTE [0xA004]
#define LED6 XBYTE [0xA005]
#define LED7 XBYTE [0xA006]
#define LED8 XBYTE [0xA007]

/*数码管显示使用的变量和常量*/
uchar lednum = 0;  //数码管显示位控制寄存器
uchar led[8] = {0,0,0,0,0,0,0,0};  //数码管显示内容寄存器
uchar code segtab[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xbf}; //七段码段码表
                      // "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "P" ,"black" 

unsigned long num;
uchar end,i;
sbit gate=P1^1;
sbit gate2=P1^2;
sbit rst=P1^0;
schar data_in[9];//数据输入

void make(float buffer);
void process();//数据处理函数

/***************************************************
			数码管显示函数
原型:   void leddisp(void);
功能:  每次调用轮流显示一位数码管

****************************************************/
void leddisp(void)
{
	switch(lednum)  //选择需要显示的数码位
 	{
  		case 0:
    		LED1 = segtab[led[0]];
     		break;
  		case 1:
     		LED2 = segtab[led[1]];
     		break;
 		case 2:
     		LED3 = segtab[led[2]];
     		break;
 		case 3:
     		LED4 = segtab[led[3]];
     		break;
 		case 4:
     		LED5 = segtab[led[4]];
     		break;
 		case 5:
     		LED6 = segtab[led[5]];
     		break;
 		case 6:
     		LED7 = segtab[led[6]];
     		break;
		case 7:
     		LED8 = segtab[led[7]];
     		break;
  	}

	if(lednum == 0) //更新需要现实的数码位
 	{
		lednum = 7;
 	}
 	else
 	{
		lednum = lednum-1;
	}
}  

void  delay(uint8 time_nop)
{
	uint8 i;
	for(i=0;i<time_nop;i++)
	{
		_nop_();	
	}
}

void intT0() interrupt 1 //T0 定时中断处理函数
{
	TH0 = 0xf8;  //定时器中断时间间隔 1ms
 	TL0 = 0x30;
 	
 	if(num<=1000)
 	{
 		gate=0;
 	}
 	else if(num<2000)
 	{
 		gate=1;
 	}
 	else if(num==2000)
 	{
 		for(i=0;i<8;i++)
  		data_in[i]=0;
  }
 	else if(num<3000)
 	{
 		gate=0;
 	}
 	else if(num==3000)
 	{
 		num=1;
 		end=1;
 	}
 	
 	if(num<=700)
 	{
 		gate2=1;
 	}
 	else
 	{
 		gate2=0;
 	}
 	
 	num++;

 	leddisp();  //每次定时中断显示更新一次
}

void intT1() interrupt 0
{
	data_in[i++]=P0;
	if(i==9)
		i=1;
}

void main(void)
{
  TCON= 0x13;
  TH0 = 0xf8;  //定时器中断时间间隔 1ms
  TL0 = 0x30;
  ET0=1;
  EX0=1;
  TMOD=0x01;
  EA=1;
  gate=0;
  gate2=0;
  i=1;
  end=0;
  num=1;
  for(i=0;i<8;i++)
  	data_in[i]=0;
  rst=0;
  delay(10);
  rst=1;
  while(1)
  {
  	if(end)
  	{
  		process();
  		end=0;
  	}
  }
}

void process()//数据处理函数
{
	float buffer;
	unsigned long sysfre,tfre;
	
	sysfre=16777216*data_in[0]+65536*data_in[1]+256*data_in[2]+data_in[3];
	tfre=16777216*data_in[4]+65536*data_in[5]+256*data_in[6]+data_in[7];
	tfre=tfre+tfre*4/100;
	
	if(tfre==0)
	{
		led[7]=0;
		led[1]=led[2]=led[3]=led[4]=led[5]=led[6]=led[0]=16;
	}
	else 
	{
		buffer=10000*(float)tfre/(float)sysfre;
		make(buffer);
	}
}

void make(float buffer)
{
	int i,w;unsigned long n,m;
	i=0;
  while(1)
  {
  	n=(unsigned long)buffer;
  	m=1000000000;
  	if(n<10000)
		{
			buffer=buffer*10000;
			i++;
			continue;
		}
		while(1)  
		{
			if(n>=m)
				break;
			m=m/10;
		}
		switch(m)
		{	
			case 1000000000:
				w=9-i*4;break;
			case 100000000:
				w=8-i*4;break;
			case 10000000:
				w=7-i*4;break;
			case 1000000:
				w=6-i*4;break;
			case 100000:
				w=5-i*4;break;
			case 10000:
				w=4-i*4;break;
		}
		if(w>=0)
		{
			led[1]=0;led[0]=w;
		}
		else{led[1]=17;led[0]=-w;}
		led[7]=n/m; n=n%m; m=m/10;
		led[6]=n/m; n=n%m; m=m/10;
		led[5]=n/m; n=n%m; m=m/10;
		led[4]=n/m; n=n%m; m=m/10;
		led[3]=n/m;
		break;
  }
  led[2]=16;	
}

⌨️ 快捷键说明

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