51单片机制作简易数字频率计程序

要求用51单片机串行口,P3.0和p3.1加五个74ls164驱动五个共阳数码管,利用盘p1.0口控制164的9号脚,能显示100hz·1Mhz的方波频率!用汇编语言编写!谢谢大家!!我的邮箱是:[email protected],qq:1066527649

这里有一个四位数码管的频率计,供参考

#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned  int
uchar duan[10]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //所需的段的位码
//uchar wei[4]={0XEf,0XDf,0XBf,0X7f};                                 //位的控制端 (开发板)
uchar wei[4]={0X80,0X40,0X20,0X10};                                 //位的控制端 (仿真)
uint z,x,c,v, date; //定义数据类型
uint dispcount=0;
uint lck=0;
uint disp=0;
/******************************************************************

延时函数

******************************************************************/
void delay(uchar t)
{
  uchar i,j;
   for(i=0;i<t;i++)
   {
     for(j=13;j>0;j--);
 { ;
 }
   }
}

/**********************************************************************
                æ•°ç ç®¡åŠ¨æ€æ‰«æ
*********************************************************************/
void xianshi()
 { 
 /*****************数据转换*****************************/ 
  z=date/1000;  //求千位
  x=date%1000/100;  //求百位
  c=date%100/10;  //求十位
  v=date%10;  //求个位

      P2=wei[0];
  P0=duan[z];
  delay(50);  
     P2=wei[1];
      P0=duan[x];
  delay(50);  
      P2=wei[2];
      P0=duan[c];
  delay(50);  
      P2=wei[3];
      P0=duan[v];
  delay(50);  
                 

       }

/*************************************************************************
                                å®šæ—¶å™¨åˆå€¼1ms
**************************************************************************/
void initTimer(void)
{
 TMOD=0x0;
 TH0=0xe3;
 TL0=0xc;
}

/*************************************************************************
                                å®šæ—¶å™¨å‡½æ•°
**************************************************************************/
void timer0(void) interrupt 1
{
 TH0=0xe3;
 TL0=0xc;
 lck++;
 if(lck==1000)
       {
        disp=dispcount;
      lck=0;
dispcount=0;
       }

}

/*************************************************************************
                                ä¸­æ–­å‡½æ•°
**************************************************************************/
void int0(void) interrupt 0
{

dispcount++; //每一次中断,计数加一

}

/*************************************************************************
                                ä¸»å‡½æ•°
**************************************************************************/
void main(void)
{

IT0=1;     //INT0下降沿中断
EX0=1;     //允许INT1中断
initTimer(); //装入初值
TR0=1;
ET0=1;
EA=1;
while(1)

{
date=disp;
xianshi();
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-10
相似回答