电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 5944|回复: 11

频率计程序

[复制链接]
发表于 2016-2-15 07:04:53 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
本帖最后由 吕水波 于 2016-2-15 07:09 编辑

#include <reg52.h>//实验板12M晶振计数最高频率500kHz
//频率测量输入引脚 p3.5
sbit k100ms=P1^3;//100毫秒计数
sbit k1000ms=P1^7;//1000毫秒计数
unsigned int num;//计数值
unsigned char tt_n=2;//计数长度
unsigned char c_k,c_look;//任务切换
unsigned char code LED[]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};
//数码管显示数组
void main(void)
{
   unsigned char n;
   TMOD=0x52; //定时器1设置为16位计数模式p3.5//定时器0设为8位自重装模式
   TH0=TL0=0x24;//220us
   RCAP2H=0x3c;//定时器2置值65536-50000=15536(0x3cb0)
   RCAP2L=0xb0;//50ms
   ET0=1;//打开定时器0中断
   ET2=1;//打开定时器2中断
   EA=1;//打开总中断
   PT2=1;//定时器2设为高优先级
    TR0=1;
        TR1=1;//启动定时计数器1
   TR2=1;//启动定时器2
  while(1)
   { if(c_k==0){c_k=20;if(!k100ms)tt_n=2;if(!k1000ms)tt_n=20;}//档位切换
     if(c_look==0)//六位数码显示
       {c_look=10;
        P2=0xff;//关所有显示
       if(n==0&&tt_n==2){P0=LED[0]; P2=0x7f;}//计数时长为100毫秒时补零,将原数显示为它的十倍
       if(n==1){P0=LED[num%10]; P2=0xbf;}//
           if(n==2){P0=LED[(num/10)%10]; P2=0xdf;}
           if(n==3){P0=LED[(num/100)%10]; P2=0xef;}
           if(n==4){P0=LED[(num/1000)%10]; P2=0xf7;}
           if(n==5){P0=LED[num/10000]; P2=0xfb;} //显示最高位
       n=(n+1)%6;//n从零到五循环
        }
   }
}
timer0() interrupt 1
{  T0=!T0;//f=1000/(2*0.220)=2273  自测端口P3.4
   if(c_look>0)c_look--;
   if(c_k>0)c_k--;
}
timer2() interrupt 5//定时器2中断函数
{
     static unsigned char tt=0;//
        TF2=0;//复位定时器2
        tt++;
        if(tt>=tt_n)//计数长度100ms(tt_n=2) 1000ms(tt_n=20)
        {
        TR1=0;//关计数定时器
        tt=0;
        num=(TH1<<8)+TL1;//取计数定时器的值
        TH1=TL1=0;//计数器清零
        TR1=1;//起动计数
       }
}  
发表于 2016-2-15 07:50:55 | 显示全部楼层
想说明什么呢?

刚刚开始学C语言么
发表于 2016-2-15 07:53:44 | 显示全部楼层
在实际应用中,如果你这么写程序。估计到后期你能类吐血
发表于 2016-2-15 08:47:36 | 显示全部楼层
我都不用频率计,我的示波器就频率直读。C语言想学,只怕是老了。
发表于 2016-2-15 09:09:43 | 显示全部楼层
hankaifeng 发表于 2016-2-15 07:53
在实际应用中,如果你这么写程序。估计到后期你能类吐血

也想学习,学习。请问正确的写法应该怎么写啊?
发表于 2016-2-15 09:31:21 | 显示全部楼层
夕阳行业 发表于 2016-2-15 09:09
也想学习,学习。请问正确的写法应该怎么写啊?

这种写法有点过时。
发表于 2016-2-15 09:31:58 | 显示全部楼层
夕阳行业 发表于 2016-2-15 09:09
也想学习,学习。请问正确的写法应该怎么写啊?

我用的是,25M的数字示波器;直观。
发表于 2016-2-15 18:59:27 | 显示全部楼层
夕阳行业 发表于 2016-2-15 09:09
也想学习,学习。请问正确的写法应该怎么写啊?

白天出去干活了  一会我会 上传一些 我当年自学时候的 教程 你可以自己去看看
发表于 2016-2-15 19:01:07 | 显示全部楼层
2816467499 发表于 2016-2-15 09:31
我用的是,25M的数字示波器;直观。

像楼主 用12T 单片机  还用12M晶震 做频率计 实用价值根本没有多大

如果用1T单片机  24M晶震 还勉强说得过去
 楼主| 发表于 2016-2-15 22:43:49 | 显示全部楼层
hankaifeng 发表于 2016-2-15 07:50
想说明什么呢?

刚刚开始学C语言么

只是分享以前自学单片机的一点资料,当时为了验证atmega16在ctc模式下输出的频率是不是正确的,就手头的开发板写了这个,结果很好
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2024-11-25 05:16 , Processed in 0.063240 second(s), 4 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

快速回复 返回顶部 返回列表