蓝桥杯NE555定时器与频率测量
2022/2/5 23:44:51
本文主要是介绍蓝桥杯NE555定时器与频率测量,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
使用的是蓝桥杯单片机CT107D实训平台:
555定时器内部,有3个5K的电阻分压。
NE555是一个纯硬件的设计,一旦电路确定了,其功能也就定了。
在蓝桥杯的板子上,555定时器是一个信号发生电路,通过定位器Rb3可改变输出信号的频率。
频率就是信号1s产生的信号或者周期。
1HZ就是1s有一个信号(脉冲)
P34引脚计算外部脉冲的个数,但是有时间要求,1s之内。
我们需要两个定时器,一个用来计数,一个用来定时。
定时器最多能计时间65.355ms 所以需要先50ms 然后✖20就是1s。
计数我们可以选择8位自动重装计数,只要来一个脉冲,他就溢出,溢出就会来到中断函数。
按照上述思路,首先,我们需要三个变量,一个变量count_f用来计数,一个count_t用来作为计时,一个dat_f用来最后显示到数码管上的数。
其次,我们初始化定时器:
void init_Timer()
{
TH0=0xff;
TL0=0xff;
TH1=(65535-50000+1)/256;
TL1=(65535-50000+1)%256;
TMOD=0x16;
ET0=1;
ET1=1;
EA=1;
TR0=1;
TR1=1;
}
定时器0用来计数,定时器1用来计时。
中断服务函数就是这些。
void Service_T0() interrupt 1
{
count_f++;
}
void Service_T1() interrupt 3
{
TH1=(65535-50000+1)/256;
TL1=(65535-50000+1)%256;
count_t++;
if(count_t==20)
{
dat_f=count_f;
count_f=0;
count_t=0;
}
}
大体思路就是上述这些,下面是这些完整代码
首先SMG.h
#ifndef __SMG_H #define __SMG_H #include "reg52.h" void DelaySMG(unsigned char t); void DisPlaySMG_Bit(unsigned char pos,unsigned char dat); void DisPlay_All(unsigned char dat); #endif
SMG.c
#include "SMG.h" #include "reg52.h" void DelaySMG(unsigned char t) { while(t--); } void DisPlaySMG_Bit(unsigned char pos,unsigned char dat) { P0=0xff; P2=P2&0x1f|0xe0; P2=P2&0x1f; P0=0x01<<pos; P2=P2&0x1f|0xc0; P2=P2&0x1f; P0=dat; P2=P2&0x1f|0xe0; P2=P2&0x1f; } void DisPlay_All(unsigned char dat) { P0=0xff; P2=P2&0x1f|0xc0; P2=P2&0x1f; P0=dat; P2=P2&0x1f|0xe0; P2=P2&0x1f; }
最后是主函数:
#include "reg52.h" #include "SMG.h" unsigned char code SMG_duanma[18]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x80, 0xc6,0xc0,0x86,0x8e, 0xbf,0x7f}; unsigned int count_f=0; unsigned int dat_f=0; unsigned char count_t=0; void init_Timer() { TH0=0xff; TL0=0xff; TH1=(65535-50000+1)/256; TL1=(65535-50000+1)%256; TMOD=0x16; ET0=1; ET1=1; EA=1; TR0=1; TR1=1; } void Service_T0() interrupt 1 { count_f++; } void Service_T1() interrupt 3 { TH1=(65535-50000+1)/256; TL1=(65535-50000+1)%256; count_t++; if(count_t==20) { dat_f=count_f; count_f=0; count_t=0; } } void DisPlaySMG_F() { DisPlaySMG_Bit(0,0x8e); DelaySMG(100); DisPlaySMG_Bit(1,0xff); DelaySMG(100); DisPlaySMG_Bit(2,0xff); DelaySMG(100); if(dat_f>9999) { DisPlaySMG_Bit(3,SMG_duanma[dat_f/10000]); DelaySMG(100); } if(dat_f>999) { DisPlaySMG_Bit(4,SMG_duanma[(dat_f/1000)%10]); DelaySMG(100); } if(dat_f>99) { DisPlaySMG_Bit(5,SMG_duanma[(dat_f/100)%10]); DelaySMG(100); } if(dat_f>9) { DisPlaySMG_Bit(6,SMG_duanma[(dat_f/10)%10]); DelaySMG(100); } DisPlaySMG_Bit(7,SMG_duanma[dat_f%10]); DelaySMG(100); DisPlay_All(0xff); } void init() { P0=0xff; P2=P2&0x1f|0x80; P2=P2&0x1f; P0=0; P2=P2&0x1f|0xa0; P2=P2&0x1f; } void main() { init_Timer(); init(); while(1) { DisPlaySMG_F(); } }
记得要将J3上SIGNAL与P34连接上。
这篇关于蓝桥杯NE555定时器与频率测量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现