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