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

📄 08-10-31频率检测.c

📁 C51单片机用中断频率检测
💻 C
字号:
//#include<reg52.h>
#include<STC89C51RC.H>
#define uint unsigned int
#define uchar unsigned char
//#include<intrins.h> //右移函数需要此头文件INTRINS.H  大小写不限
uint i=0,meimiao=0;
uint tt=0,x=0,y=0,h=0,m=0,s=0,a=0,b=0,c=0,d=0,e=0,f=0;
sbit rs=P2^3;
sbit rw=P2^2;
sbit lcden=P2^4;

sbit led=P1^0;
sbit send=P1^2;

uchar code table[]="               ";//"  2007-7-30 MON";
uchar code table1[]="               ";//"    00:00:00";
void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}
void comd(uchar com)
{
    rs=0;
	lcden=0;
	rw=0;
    P0=com;
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;
}
void date(uchar date)
{
    rs=1;
	lcden=0;
    rw=0;
	P0=date;
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;
}
void init(void)
{
    uint num;
	comd(0x38);//设置16*2显示,8位数据口
	comd(0x0c);//不显示光标
	comd(0x06);//写一个字地址加1,且光标位置加1
	comd(0x01);//清零
	comd(0x80);
	for(num=0;num<15;num++)
		{
			date(table[num]);
			delay(5);
		}
    comd(0x80+0x40);
	for(num=0;num<12;num++)
		{
			date(table1[num]);
			delay(5);
		}
}
void sfm(uchar add,uchar dat)
{
	comd(0x80+add);//+0x40+8
	date(0x30+dat);

}
void see(void)
{
    uchar ge,shi,bai,qian,wan,shiwan,baiwan,qianwan,yi;
    ge=i%10;
    shi=i/10%10;
    bai=i/100%10;
    qian=i/1000%10;
    wan=i/10000%10;
    shiwan=i/100000%10;
    baiwan=i/1000000%10;
    qianwan=i/10000000%10;
    yi=i/100000000%10;

	sfm(0,yi);
	sfm(1,qianwan);
	sfm(2,baiwan); 
	sfm(3,shiwan);
	sfm(4,wan);
	sfm(5,qian);
	sfm(6,bai);
	sfm(7,shi);
	sfm(8,ge);
	sfm(9,'H'-48);
	sfm(10,'z'-48);
}
void play(void)
{
	EA=1;//开总中断
	ET1=1;//开定时器中断
	TMOD=0X01;//定时器工作方式为T0
	TH0=(65536-50000)/256;//定时器高八位初值
	TL0=(65536-50000)%256;//定时器低八位初值
	ET0=1;					//开定时器0
	TR0=1;					//启用定时器0

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

void Timer2init(void)
{
	T2MOD=0x02;
	T2CON=0x14;
	//EA=1;                      /* interupt enable */
	//ET2=1;                     /* enable timer1 interrupt */
	TR2=1;  
RCAP2L=200;
RCAP2H=255;
}
main()
{   
	Timer2init();
	play();
    init();
	while(1)
	{   
		see();
		delay(400);
	}
    
}


void ISR_Key(void) interrupt 0
{
   led=~led;//外部中断触发一次,P1取反一次
   meimiao++;
}

void time0() interrupt 1//定时器工作方式是1
{
	TH0=(65536-50000)/256;//定时器高八位初值
	TL0=(65536-50000)%256;//低八位初值
	tt++;
	if(tt==20)
	{
		tt=0;
		i=meimiao;
		meimiao=0;
	}
}
/*
void Timer2(void) interrupt 5
{
 TH2=255;		 Init value 
 TL2=200;
send=~send;
P1=~P1;
 //LED=~LED;

}
*/

⌨️ 快捷键说明

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