⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f_measure.c

📁 由单片机和CPLD共同构成7位数字频率计
💻 C
字号:
#include <reg51.h>

sbit Dig1 = P2^0;
sbit Dig2 = P2^1;
sbit Dig3 = P2^2;
sbit Dig4 = P2^3;
sbit Dig5 = P2^4;
sbit Dig6 = P2^5;
sbit Dig7 = P2^6;

sbit Latch = P3^0;  //latch in

sbit Clr_data = P3^4;

sbit Dig_sel2 = P3^5;
sbit Dig_sel1 = P3^6;
sbit Dig_sel0 = P3^7; 

#define T0_High_Init 0xfa;
#define T0_Low_Init 0x00;

unsigned int Counter;

unsigned char Digit1,Digit2,Digit3,Digit4,Digit5,Digit6,Digit7;

//字形表
int Get_7_Segment[16] = {0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B,0x77,0x1f,0x4e,0x3d,0x4f,0x47};

unsigned char indata;


//---------------------------------------------------------------------------------------------------------

//主函数



//初始化函数
void Initial(void)
{
    Counter = 0;

	TMOD = 0x11;        //定时器工作方式

	TH0 = T0_High_Init;
	TL0 = T0_Low_Init;   //设置定时器初值

	TR0 = 1;     //启动定时器

	ET0 = 1;     //允许定时器中断
	EA = 1;      //开中断
}



//延时
void delay()
{
	int ti;
	for(ti=0;ti<10;ti++)
     {}
}


//判断Latch是否为高电平
int latch_high(void)
{
    int reci;       //返回值

    if(Latch)
    {    
         delay();
         if(Latch)
		     reci = 1;
	     else 
             reci = 0;
	}
    else 
       reci = 0;                      

	return reci;
}


//判断Latch是否为低电平
int latch_low(void)
{
    int reci;       //返回值

    if(!Latch)
    {    
         delay();
         if(!Latch)
		     reci = 1;
	     else 
             reci = 0;
	}
    else 
       reci = 0;                      

	return reci;
}

void get_data(void)
{
        Dig_sel2 = 0;
        Dig_sel1 = 0;
        Dig_sel0 = 0;
        
        delay();
        indata = P0;

        Digit7 = indata & 0x0f;

        Dig_sel0 = 1;
        
        delay();
        indata = P0;

        Digit6 = indata & 0x0f;

        Dig_sel1 = 1;
        Dig_sel0 = 0;
        
        delay();
        indata = P0;

        Digit5 = indata & 0x0f;

        Dig_sel0 = 1;
        
        delay();
        indata = P0;

        Digit4 = indata & 0x0f;

        Dig_sel2 = 1;
        Dig_sel1 = 0;
        Dig_sel0 = 0;

        delay();
        indata = P0;

        Digit3 = indata & 0x0f;

        Dig_sel0 = 1;

        delay();
        indata = P0;

        Digit2 = indata & 0x0f;

        Dig_sel1 = 1;
        Dig_sel0 = 0;
        
        delay();
        indata = P0;

        Digit1 = indata & 0x0f; 
}

//主函数
void main()
{

    Initial();  

    while( 1 )
    {
        while( latch_high() );
        get_data();

        Clr_data = 0;
        delay();
        Clr_data = 1;

        while( latch_low() ); 
    }
}


//-------------------------------------------------------------------


//中断



//显示
void Display_Digit(unsigned int Digit_Selected)
{
	if( Digit_Selected == 1 )
	{
		Dig7 = 1;
		P1 = Get_7_Segment[Digit1];
		Dig1 = 0;
	}
    if( Digit_Selected == 2 )
	{
		Dig1 = 1;
		P1 = Get_7_Segment[Digit2];
		Dig2 = 0;
	}
	if( Digit_Selected == 3 )
	{
		Dig2 = 1;
		P1 = Get_7_Segment[Digit3];
		Dig3 = 0;
	}
	if( Digit_Selected == 4 )
	{

		Dig3 = 1;
		P1 = Get_7_Segment[Digit4];
		Dig4 = 0;
	}
    if( Digit_Selected == 5 )
	{
		Dig4 = 1;
		P1 = Get_7_Segment[Digit5];
		Dig5 = 0;
	}
	if( Digit_Selected == 6 )
	{
		Dig5 = 1;
		P1 = Get_7_Segment[Digit6];
		Dig6 = 0;
	}
	if( Digit_Selected == 7 )
	{

		Dig6 = 1;
		P1 = Get_7_Segment[Digit7];
		Dig7 = 0;
	}
}

//中断处理函数
void display(void) interrupt 1
{
	ET0 = 0;
	TR0 = 0;
	TH0 = T0_High_Init;
	TL0 = T0_Low_Init;    //重装定时器初值
	TR0 = 1;

	if( ++Counter == 8 )
		Counter = 1;
	Display_Digit(Counter);	  //显示
	ET0 = 1;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -