中断测频.bak

来自「51定时器常用例子包括测频率测脉宽产生波形」· BAK 代码 · 共 61 行

BAK
61
字号
#include"at89x52.h"
#include <math.h>

#define uchar unsigned char
#define uint  unsigned int

uchar code  tv[]={0xfe,0xfd,0xfb,0xf7};
uchar code  a[]={0x3f,0x06,0x5b,0x4f,
	     0x66,0x6d,0x7d,0x07,0x7f,
	     0x6f,0x77,0x7c};
uchar data j,led[4];
uint  f=0,s;


void delay(void)
{
	uint i;
	for(i=0;i<900;i++);
}


void kINT1( void ) interrupt 2
{
	f=(TH1<<8)+TL1;
	TH1=0; 
	TL1=0;
	IE1 = 0;   //可不要,但不要proteus运行不正常。bug?
}


 ledxianshi()
      {
          uchar k,i;
     	  led[0]=f/1000;
          led[1]=(f%1000)/100;
	  led[2]=(f%100)/10;
	  led[3]=f%10;
	  		
		for(k=0;k<4;k++)
		 { i=led[k];
		   P0=a[i];
		   P2=tv[k];
	           delay();
		 }
	 } 

void main()
{
	EA=1;
	EX1=1;
	IT1=1;
	TMOD=0x50;
	TH1=0; 
	TL1=0;
	TR1=1;
	
	while(1)
	{
	ledxianshi();
	}
}

⌨️ 快捷键说明

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