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

📄 plj.c

📁 基于AT89C51 和 ZLG7289的频率计程序
💻 C
字号:
  #include <reg51.h> 
  #include<stdio.h>
  #define UINT  unsigned int
  sbit CLK=P1^1;
  sbit DIO=P1^2;
  sbit ZLG_CS=P1^3;

  void SysInit(void);
  void UserInit(void);
  void DisInit(void);
  void SendComm(UINT);
  void SendData(UINT);
  void Display(UINT,UINT);
  void DataDis(unsigned long);
  void Delay(UINT);
  UINT T1count;
  UINT timecount;
  bit flag;
  unsigned long pl;

void main(void)
 {
  SysInit();
  UserInit();
  DisInit();
  TMOD=0x51;
  TH1=0;
  TL1=0;
  TH0=(65536-46080/256;
  TL0=(65536-46080)%256;
  TR0=1;
  TR1=1;
  ET0=1;
  ET1=1;
  EA=1;

  while(1)
  {
   if(flag==1)
   {
    flag=0;
    pl=T1count*65535+TH1*255+TL1;    
    T1count=0;
    TH1=0;
    TL1=0;
    TH0=(65536-46080/256;
    TL0=(65536-46080)%256;
    TR1=1;
    TR0=1;
    }
   DataDis(pl);
   }
  }


  void t1(void) interrupt 3 using 0
  {
   TH1=0;
   TL1=0;
   T1count++;
  }

  void t0(void) interrupt 1 using 0
  {
   TH0=(65536-46080/256;
   TL0=(65536-46080)%256;
   timecount++;
   if(timecount==20)
   {
    TR1=0;
    TR0=0;
    timecount=0;
    flag=1;
   }
 }

void UserInit()
{
    ZLG_CS = 1;         
    CLK = 0;  
    DIO = 0; 	
}	


void DisInit()
{
	ZLG_CS = 0;
	Delay(10);             
	SendComm(0xa4);   
	ZLG_CS = 1;
	Display(0x0c,3);
	Display(0x0b,4);
        Display(0x0d,5);
        Display(0x0e,6);
}


void SendComm(UINT commandTemp)
{
    UINT temp = commandTemp;
	UINT i;
	for(i = 0;i < 8;i++)
	{
	    if((temp&0x80) == 0x80)
	    	DIO = 1;
	    else
	    	DIO = 0;
	    Delay(10);
		CLK = 1;
        Delay(10);          
        CLK = 0;
		temp <<= 1;
    }
}

  void SendData(UINT dataTemp)
  {
	UINT temp = dataTemp;
	UINT i;
	for(i = 0;i < 16;i++)
	{
	    if((temp&0x8000) == 0x8000)
	    {
	        DIO = 1;
	    }
	    else
	    {
	        DIO = 0;
	    }
	    Delay(10);
	    CLK = 1;
            Delay(10);      
	    CLK = 0;
	    temp <<= 1;
        }
  }


  void Display(UINT disData,UINT position)
  {
	UINT sendData = 0x8000;
	UINT temp = position;        
	sendData |= disData;
	temp <<= 8;
	sendData |= temp;
	ZLG_CS = 0;
	Delay(10);            
	SendData(sendData);
	ZLG_CS = 1;
  }

  void DataDis(unsigned long dataTmp)
  {
	UINT disData[7];
	UINT i;
	unsigned long ref = 1000000;
	for(i = 0;i < 7;i++)
	{
		disData[i] = dataTmp/ref;
		dataTmp %= ref;
		ref /= 10;
	}
	for(i = 0;i < 3;i++)
	{
		Display(disData[6-i],i);
		Delay(10);
	}
	for(i = 3;i < 7;i++)
	{
		Display(disData[6-i],9-i);
		Delay(10);
	}
  }

 void SysInit(void)
 {
    IE = 0x01;
    IP = 0x00;
    TMOD = 0x20;
    IT0 = 1;
    IT1 = 0;
    SCON = 0x50;
    PCON = 0x00;    
    TH1 = 0xfd;
    TL1 = 0xfd;
    TR1 = 1;
    EA = 1;
 }

 void Delay(UINT n)
 {
    UINT i;
    for(i = n; i > 0; i--);
 }

⌨️ 快捷键说明

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