zhouqixinhaoceliang.c

来自「此程序可以对时钟脉冲信号进行计数」· C语言 代码 · 共 115 行

C
115
字号
/***********************************************************
  周期信号测量实验(方案2)
       2002-4-8
PHIL Instrument & Equitment Co,.Ltd.
***********************************************************/
#include <reg51.h>
unsigned char c[5]={0x0a,0x0a,0x0a,0x0a,0x0a};
unsigned char flag;
unsigned int a;
/***********************************************************
延时1秒子程序
***********************************************************/
void delaytime()
  {
   unsigned char i,j;
   /*#pragma asm
        MOV 	R5,#06H
D1S1:   MOV 	R7,#0FFH
D1S2:   MOV 	R6,#0FFH
D1S3:   DJNZ 	R6,D1S3
	DJNZ    R7,D1S2
	DJNZ    R5,D1S1
   #pragma endasm         */
   
   //延时10ms×count
   for(i=0;i<100;i++)
     {
       for(j=0;j<120;i++)		//120是在12M时钟时实验出的数值
       {}
       }          
   }
/***********************************************************
初始化子程序
***********************************************************/
void initial() reentrant  
 {
   TMOD=0x05;		//T0定义为16位计数器
   TH0=0x00;
   TL0=0x00;
   EX0=1;  
  }
 /***********************************************************
外部0中断子程序
***********************************************************/
void sever_int0() interrupt 0 using 1
  {
   flag=1;
   initial();    
  }
 /**************************
十六进制转换为十进制
**************************/
void h_d00(unsigned int i)
 { 
    c[4]=i/10000;
    if(c[4]==0)
       c[4]=0x0a;
    i=i%10000;
    c[3]=i/1000;
    if(c[3]==0)
       c[3]=0x0a;
    i=i%1000;
    c[2]=i/100;
    if(c[2]==0)
       c[2]=0x0a;
    i=i%100;
    c[1]=i/10;
    if(c[1]==0)
       c[1]=0x0a;
    i=i%10;
    c[0]=i;
  } 
 /**************************
显示子程序
**************************/
void display()
 {
  unsigned char dispnum[11]={3,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,1,9,0xff}; //0xff 为无显示
  unsigned char i,j,k;
  j=1;
  for(i=0;i!=5;i++)
     {
      P1=0;
      k=c[i];
      P0=dispnum[k];
      P1=j;
      j=j<<1;
      P1=0;
      }
  }
/***********************************************************
主子程序
***********************************************************/
main()
{
 TCON=1;		//外部中断0为下降沿触发方式
 initial();
 ET1=0;			//关定时器中断
 for(;;)
   {
     if(flag==1)
       {
        EX0=0;
        TR0=1;
        delaytime();
        TR0=0;
        a=TH0*100+TL0;
        h_d00(a);
        display();
        a=0;
        }
     flag=0;
    }
}

⌨️ 快捷键说明

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