×
单片机 > 单片机程序设计 > 详情

51单片机简易频率计源代码

发布时间:2020-05-28 发布时间:
|
//定时器0 设置定时时间1秒   定时器1 设置计数1秒内的脉冲数量
#include
#define uchar unsigned char 
#define uint unsigned int
uint ff;   //接受频率值
uchar start=1;   //定时器,计数模式启动变量
code uchar seg[]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};
code uchar tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay(uint k)  //延时函数
{
 while(k--);      
}
void show(uint k)  //数值显示函数
{
  static uchar i,j;
  uint ss[5];
  i=0;
  do
  {
   ss[i]=k%10;
   i++;
  }while(k/=10);
  for(j=0;j   {
   P0=seg[ss[j]];
   P2=tab[j];
   delay(100);
   P0=0xff;
   P2=0xff;
  }  
}

void time0_init()
{
 TMOD|=0x01;  //定时器0 定时模式 计数范围65536
 TH0=0x3c;         //定时初值50ms
 TL0=0xb0;
 TR0=0;     //暂停定时器0
}
void time1_init()
{
 TMOD|=0x50;     //定时器1  计数模式,计数范围65536
 TH1=0;      //计数初值0
 TL1=0;
 TR1=0;    //暂停计数器
}
void str_init()    //定时器中断
{
 EA=1;
 ET0=1;
}
void time0_event() interrupt 1
{
  static uchar i;
  i++;
  TH0=0x3c;         //定时初值50ms
  TL0=0xb0;
 if(i==20)
 {
  i=0;
  TR1=0;    //停止计数
  TR0=0;          //停止定时
  ff=(TH1*256+TL1);   //求出频率值   就是1秒内脉冲次数
  TH1=0;          //计数值清零
  TL1=0;
  TH0=0x3c;         //定时初值50ms
  TL0=0xb0;
  start=1;               //启动定时器开启变量
 }
}
 
void main()
{
 time0_init();
 time1_init();
 str_init();
 while(1)
 {
  if(start==1)
  {
   TR0=1;  //启动定时器
   TR1=1;  //启动计数器
   start=0;  //关闭启动变量位 保证1秒时间
  }
  show(ff);
 }
}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式