📄 frequence.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 + -