【篮球杯】 555检测频率__计数模式

这篇博客介绍了STM32单片机中使用定时器0进行频率测量的方法。通过设置定时器模式和初值,实现了一秒一次的中断触发,中断服务函数中更新数码管显示并记录频率。同时,文章还涉及到LED、按键和数码管的处理函数,展示了完整的嵌入式系统实时性操作。
摘要由CSDN通过智能技术生成

目录

main.c 

有关原理图:

设计图 ​


main.c 

#include "STC15F2K60S2.h"
#include "init.h"
#include "led.h"
#include "time.h"
#include "seg.h"
#include "key.h"
#include "onewire.h"
#include <ds1302.h>
#include "iic.h"
#include "STDIO.h"

//函数声明-----------------
void Key_Pro (void);
void Seg_Pro (void);
void Led_Pro (void);
//LEd ---------------    
unsigned char  ucled ;
//数码管 ------
unsigned char seg_sss[10];
unsigned char seg_buf[8];
unsigned char pos=0;
//按键------
unsigned char key_hig,key_low;
unsigned char key_i;
//减速 --------
unsigned char Key_Mm;
unsigned char Seg_Mm;
unsigned char Led_Mm;


//============-----------------------------=-----
unsigned long Tit;    //===================================这部分是主要有关
unsigned int  SJ_bl555;  //===================================这部分是主要有关
///================================================================这部分是主要有关
void Timer0Init(void)		//计数模式			//                ||   
{											//                    ||      
											//          	      ||   
	TMOD  &=0xf0;	//设置定时器模式			//                    ||   
	TMOD |=0x05;	//设置定时器模式			//                    ||   
	TL0 = 0x00;		//设置定时初值   低位    //                    ||   
	TH0 = 0x00;		//设置定时初值		 高位	//                ||   
											//                    ||   
	TR0 = 1;		//定时器0开始计时		//                    ||   
}											//                    ||   
											//                    ||   
//------------------------------------------------------------------
void main()
{
	Off_init();   //
	Timer1Init();
	EA =1 ;
Timer0Init();
	
	while(1)
	{
		 Key_Pro ();
		 Seg_Pro ();
		Led_Pro ();
	}
}


void tm1_isr() interrupt 3
{
   if(++Key_Mm == 10) Key_Mm=0;
   if(++Seg_Mm == 2) Seg_Mm=0;
   if(++Led_Mm == 300) Led_Mm=0;
	Tit++;    //定时加加

	//=============================================================  这部分是主要有关
		if((Tit % 1000) == 0)  //每一秒钟   所做了多少次叫 【频率】         ||
	{														//			  ||
		SJ_bl555 = (( (TH0)<<8) | TL0);							//		  ||
	    TL0 = 0x00;			//清零定时初值    低位	//			 		  ||
	    TH0 = 0x00;			//清零定时初值    高位//			              ||
	}														//			  ||
	//=====================================================================


	
	
	Seg_Vip(seg_buf,pos);
	if(++pos==8)  pos= 0;
}
//--------------------------------------------------------------

void Key_Pro (void)
{
	if(Key_Mm) return;Key_Mm=1;
	key_i = Key_Read_INB();
	key_low = key_i & ( key_low ^ key_i);
	key_hig = key_i;
	
	
}


void Seg_Pro (void)
{
		if(Seg_Mm) return;Seg_Mm=1;
	


	sprintf(seg_sss, "%08d",(unsigned int ) SJ_bl555);
	Seg_Ring ( seg_sss,seg_buf );

}



void Led_Pro (void)
{
		if(Led_Mm) return;Led_Mm=1;

	
}

有关原理图:

 

 

设计图 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值