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

📄 frequence.c

📁 单片机频率计的设计
💻 C
字号:
#include<reg51.h>
#include <intrins.h>
#include <math.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int

#define LCD_DATA P0
sbit lcd_flag=P0^7;
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_E=P2^2;
sbit p32=P3^2;
long int counter;
long float f;
uchar data1[]="precision0.1% ";     //第一行显示的内容   

			  	
		void lcd_delay(int ms)	//延时函数
{ 
        uchar i;
        while(ms--)
        {
                for(i=0;i<250;i++)
                {
                _nop_();_nop_();_nop_();_nop_();
                }
        }
 }
bit lcd_busy()                                //判断是否忙碌 RS=Low,RW=High,E=High:读状态
{ 
        bit flag;                
        LCD_RS=0;                             //寄存器为Low
        LCD_RW=1;                             //是否读写为High
        LCD_E=1;                              //使能端为High
        if (lcd_flag==1) flag=1;
        else flag=0;
        LCD_E=0;
        return flag;                         //返回标志,判断是否LCD忙碌
}

write_command(uchar command)        //写指令时序
{	while(lcd_busy());
     LCD_RS=0;
     LCD_RW=0;   
    LCD_E=0;
	LCD_DATA=command;
    //delay_1ms(5);
    LCD_E=1;
	
	LCD_E=0;
}

write_data(uchar da)      //写数据时序
{   while(lcd_busy());
    LCD_RS=1;
    LCD_RW=0;
    LCD_E=0;
   // delay_1ms(5);
   LCD_DATA=da;
    LCD_E=1;
	
	LCD_E=0;
}

void LCD_INIT(void)
{  write_command(0x38);	lcd_delay(1); //LCD为2行,5×7字
   write_command(0x0c); lcd_delay(1); //打开显示,显示光标,光标不闪
   write_command(0x06);	 lcd_delay(1); //每次右移一字符
 }
void main()
  	{uchar i,j,n;
	
	//long int m; 
	uchar buff[16];
	
	LCD_INIT();
	P1=0x00;
    while(1)
	  {	 TMOD=0X09;
         TH0=0;
         TL0=0;
         while(p32==1);
         TR0=1;
         while(p32==0);
         while(p32==1);
         TR0=0;
		 counter=TH0*256+TL0;
		 while(counter<=500)       /*判断是否分频及计算分频次数*/
             { P1++;
               i++;
            	counter=counter*10;
               if(i==4)
                  {P1=0x00;
                	break;
                  }
       		  }
		 f=(1000000.0/(2*counter))*pow(10,i);
         if(f<1000)
             {sprintf(buff,"f=%5.2fHZ",f);}
         else if(f<1000000)
		      {	f=f/1000;
			    sprintf(buff,"f=%5.2fkHZ",f);} 
		     
  
	      write_command(0x80);
	   
             for( j=0;j<16&&data1[j] != '\0';j++)
                  
                   {  
				      write_data(data1[j]) ;
			        }  
				   
     	  write_command(0xc0);
		      for(n=0;n<16&&buff[n]!='\0';n++)
			    {  write_data(buff[n]); 
				}
		 
				  
		 }
} 

⌨️ 快捷键说明

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