STC 51单片机49——51单片机测量脉冲周期/频率并加以计算、显示

A信号1000Hz左右,B信号1Hz左右,B信号的上升沿对齐A信号的上升沿。用两个信号发生器进行仿真。数码管左4位,为B信号高电平时,A的脉冲数;右4位为B一个周期内,A的脉冲数。

 

 

 B信号为方波(高电平和低电平等长,1Hz),A信号频率可调。仿真会有些许误差。

完整代码:

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};     //共阳数码管段码表


void  delay(uint t)                    //延时函数
{
    uchar i;
    while(t--) for(i=0;i<200;i++);
}

uint val1; //B高电平,计数值
uint val2; //B一个周期,计数值
uchar FlagInt0;
uchar i,j=0x80;
void display(void)
{
    uint dis1, dis2;
  uchar a[8]; //数码管从左到右的每一位数值    
    dis1=val1;
    dis2=val2;
    
//    dis1=1234;
//    dis2=1234;
 
    a[3]=dis1%10;
    dis1=dis1/10;
    a[2]=dis1%10;
    dis1=dis1/10;
    a[1]=dis1%10;
    dis1=dis1/10;
    a[0]=dis1%10;

    a[7]=dis2%10;
    dis2=dis2/10;
    a[6]=dis2%10;
    dis2=dis2/10;
    a[5]=dis2%10;
    dis2=dis2/10;
    a[4]=dis2%10;

    
        for(i=0;i<8;i++)
        {
           j=_crol_(j,1);        //_crol_(j,1)为将对象j循环左移1位
           P0=dis_code[a[i]];        //P0口输出段码
           P2=j;                //P2口输出位控码
           delay(1);        //延时,控制每位显示的时间
                 P0=0xff; //清零。如果没有这句,仿真时,数码管数据会闪烁
        }


}

void  main()
{    

    val1=0;
    val2=0;
    FlagInt0=0;
    
    TMOD=0x05; //T0为16位计数模式
    TH0=0;
    TL0=0; //计数值重置
    EX0=1; // 外中断0使能;
    IT0=1; // 外中断0下降沿触发
    IT1=1; // 外中断1下降沿触发
    EA=1; //总中断使能;
    
  while(1)
  {
    display();
   }
}

void int0(void) interrupt 0 //外中断0中断函数
{
    if(FlagInt0==0){
        TH0=0;
        TL0=0; //计数值重置
        TR0=1; //启动T0计数。此时为B信号的上升沿    
        EX1=1; // 外中断1使能;
        FlagInt0=1;
    }else{
        TR0=0; //停止T0计数。B信号的第二个上升沿
        EX1=0; // 外中断1禁止;
      val2=TH0*256+TL0; //B一个周期,计数值    
      FlagInt0=0;
    }

}
uint temp;
void int1(void) interrupt 2 //外中断1中断函数
{
    if(FlagInt0==1){
        temp=TH0*256+TL0; //B高电平,计数值。此时为B信号的下降沿    
        if(temp!=0) //有时候会变成0,很奇怪
        val1=temp;
    }

}


完整资料打包(含仿真):

STC51单片机49-51单片机测量脉冲周期/频率并加以计算、显示-单片机文档类资源-CSDN下载

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fengyuzhe13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值