微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 简易频率计数器

简易频率计数器

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
bit flag;
uchar  dis_buff[]={0,0,0,0,0,0};   //一个空的缓冲数组
uint T0count;
uint a,b,x;
//数码管段显示
uchar code leddata[]={
                                        0x3F,  //"0"
                                        0x06,  //"1"
                                        0x5B,  //"2"
                                        0x4F,  //"3"
                                        0x66,  //"4"
                                        0x6D,  //"5"
                                        0x7D,  //"6"
                                        0x07,  //"7"
                                        0x7F,  //"8"
                                        0x6F,  //"9"
                                };
//位显示
uchar code table_1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};   //从右至左显示,低位在最右边。
//延时函数
void delay(uint k)
{
        uint i,j;
        for(i=k;i>0;i--);
        for(j=110;j>0;j--);
       
}  
//初始化,T0为计数器,T1为定时器
void init()
{
        TMOD=0X15;
        TH0=0;
        TL0=0;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        EA=1;
        ET0=1;
        ET1=1;
        TR0=1;
        TR1=1;
}
void T0_inte() interrupt 1    //计数
{
        T0count++;
}
void T1_inte() interrupt 3     //定时
{
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        a++;
        if(a==20)    //一秒的定时
                {
                        TR0=TR1=0;
                        a=0;
                        flag=1;
                }
                       
}
void main()
{
        init();
       
       
                        if(flag==1)
                                {
                                        flag=0;
                                        x=T0count*65536+TH0*256+TL0;
                                        dis_buff[4]=x/10000;        //拆分计数值
                                        dis_buff[3]=(x%10000)/1000;
                                        dis_buff[2]=(x%1000)/100;
                                        dis_buff[1]=(x%100)/10;
                                        dis_buff[0]=x%10;  
                                        TH0=0;
                                        TL0=0;  
                                       
                                }
       
                        for(b=0;b<5;b++)
                                                {
                                                        P2=table_1[b];
                                                        P0=leddata[dis_buff[b]];
                                                        delay(1);
                                                }
}
proteus制作的电路图已经上传了!
希望大神帮帮我,这个问题困扰我好久了!谢谢了!



不懂诶     大神帮帮他吧

这个好像不行吧,试过了,不显示呀

脉冲信号应该接到T0吧而你接到串口上。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top