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

📄 frequence.c

📁 基于51单片机设计的用1602 显示数字钟 频率计 歌曲
💻 C
字号:

//#include <at89x51.h>
#define uchar unsigned char	
//////////////////////////////
//dingshi//////////////
#define H  ((65535-49983)>>8)			//((65535-63826)>>8)
#define L   ((65535-49983)&0x00ff)		//((65535-63826)&0x00ff)

uchar counter;
bit a;
unsigned char data shuzi[16]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70};    //asc(0~9)
 //uchar D1_choose ;
//uchar D0_choose ;

/////////////////////////////////
#define LCM_RW P0_5            //定义LCD引脚
#define LCM_RS P0_6
#define LCM_E  P0_4
#define LCM_Data P2
////////////////////////////////
#define Busy 0x80             //用检测LCM状态

void WriteDataLCM(unsigned char WDLCM);//
void WriteCommandLCM(unsigned char WCLCM,BuysC);//
unsigned char ReadDataLCM(void);//
unsigned char ReadStatusLCM(void);//
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);//
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);//
void display(uchar sec,uchar min,uchar hrs,uchar dte,uchar mon,uchar day,uchar yr);//
void LCMInit(void);//
void Delay5Ms(void);//
void Delay400Ms(void);//
void disp_clk_regs(void);
void Locatexy(char x,char y);//
void displaylistchars_wo(uchar x,uchar y,uchar *zp);
void Ding_fre();

void Ding_Stopw();
void Ding_Song();
uchar kscan();
uchar D1_choose;
uchar D_choose;
///////////////频率计///////////////////////////
void Frequence_Init()
{
	EA=0;
	TR0=0;TR1=0;
	P3_4=1;
	PT1=1;
	PT0=0;
	TMOD=0x15;
	TH0=0;
	TL0=0;
	TL1=L;
	TH1=H;
	a=0;
	counter=0;
	TR0=0;TR1=0;
	ET1=1;
	ET0=1;
	EA=1;
}

uchar * measure()
{	
	unsigned long temp;
	uchar shujv[8]={0,0,0,0,0,0,'H','z'};	
	Frequence_Init();
	TR0=1;TR1=1;
	while(!a);
	TR0=0;
	TR1=0;
	temp=counter*65536+(TH0<<8)+TL0;
	shujv[7]=temp/100000;
	shujv[6]=(temp%100000)/10000;
	shujv[5]=((temp%100000)%10000)/1000;
	shujv[4]=(((temp%100000)%10000)%1000)/100;
	shujv[3]=((((temp%100000)%10000)%1000)%100)/10;
	shujv[2]=((((temp%100000)%10000)%1000)%100)%10;
	//shujv[1]=(temp-shujv[3]*100-shujv[2]*10);
		//DisplayOneChar(6, 1, shuzi[shujv[1]]);
	return shujv;
	
}

void Ding_fre0()		//T0计数器
{
	counter++;
}
void timer0()interrupt 1
{
  if(D_choose==0)Ding_fre0();
   else if (D_choose==1)Ding_Song();
}

void timer1()interrupt 3		// 定时1秒
{
 if(D1_choose==0)Ding_fre();
if(D1_choose==1)Ding_Stopw();

}
void Ding_fre()
{
static uchar i=0;
	TL1=L;
	TH1=H;
	i++;
	if(i==20)			
	{
	TR0=0;
	TR1=0;
	i=0;
	a=1;
	}
}
//////////////////以上为频率计//////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////
void frequence (void)      
{uchar * p;
 uchar key=0;
 D_choose=0;
 D1_choose=0;
 //P3_1=1;
 P0_0=0;
 Delay400Ms();        //启动等待,等LCM讲入工作状态
 LCMInit();           //LCM初始化
 Delay5Ms(); 
 while(1)
 {
 p=measure();
 key=kscan();
 DisplayListChar(3,0, "Frequence" ); 
 DisplayListChar(3,1, "f=" ); 
 DisplayOneChar(5, 1, shuzi[p[7]]);
 DisplayOneChar(6, 1, shuzi[p[6]]);
 DisplayOneChar(7, 1, shuzi[p[5]]);
 DisplayOneChar(8, 1, shuzi[p[4]]);
 DisplayOneChar(9, 1, shuzi[p[3]]);
 DisplayOneChar(10, 1, shuzi[p[2]]);
 DisplayOneChar(11, 1, 'H');
 DisplayOneChar(12, 1, 'z');
 if (key==5) break;
 }
	//WriteCommandLCM(0x80, 1); //不检测忙信号,发送地址码
	//WriteDataLCM(48);
 while(1){key=kscan();if(key==5)break;}                            //使程序停止在这,防止LCD出现闪动   zwj
}

⌨️ 快捷键说明

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