找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1591|回复: 0
打印 上一主题 下一主题
收起左侧

频率计

[复制链接]
跳转到指定楼层
楼主
ID:249556 发表于 2017-11-15 09:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint ff; //接受频率值
uchar start=1; //定时器,计数模式启动变量
code uchar tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
code uchar seg[]={0X00,0X04,0X08,0X0C,0X10,0X14,0X18,0X1C};
void delay(k)
{
        while(k--);
}
void display_1(uchar yi)  //数值显示函数
{
        P2=0x00; // 1100-0000
        P0=tab[yi]; //数码管显示
        delay(500);       
}

void display_2(uchar er)
{
        P2=0x04; //
        P0=tab[er]; //数码管显示
        delay(500);
}

void display_3(uchar san)
{
        P2=0xc08; //
        P0=tab[san]; //数码管显示
        delay(500);       
}

void display_4(uchar si)
{
        P2=0x0c; //
        P0=tab[si]; //数码管显示
        delay(500);
       
}


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)           //循环20次为1秒
        {
                i=0;
                TR1=0; //停止计数
                TR0=0; //停止定时
                ff=(TH1*256+TL1); //求出频率值 就是1秒内脉冲次数
                TH1=0; //计数值清零
                TL1=0;
                TH0=0x3c; //定时初值50ms
                TL0=0xb0;
                start=1; //启动定时器开启变量
        }
}
void main()
{        uint        yi,er, san, si;
        uchar i,j;
        uint ss[5];
        time0_init();          //定时器初始化
        time1_init();
        str_init();                  //开中断
        while(1)
        {
                if(start==1)
                {
                        TR0=1; //启动定时器
                        TR1=1; //启动计数器
                        start=0; //关闭启动变量位 保证1秒时间
                }

        i=0;
        do
                {
                        ss[i]=ff%10;
                        i++;
                }while(ff/=10);
         yi=ss[0];
         er=ss[1];
         san=ss[2];
         si=ss[3];
         while(1)
                {
                          display_1(yi);
                        display_2(er);
                        display_3(san);
                        display_4(si);
                }
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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