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

📄 plj.c

📁 用单片机AT89s52和epm7128设计的频率计
💻 C
字号:
#include<intrins.h>
#include<absacc.h>
#include<reg51.h>

#define uchar unsigned char
#define uint  unsigned int

#define state 0
#define dataa 1

sfr T2CON = 0xc8;
sfr RAP2H = 0xcb;
sfr RAP2L = 0xca;

sbit e = P3^0; sbit wr = P3^1; sbit rs = P3^2;
sbit clr = P2^3; sbit gate = P2^4;
sbit sw = P3^3;
bit f;
bit fhl;

uchar res[8],distp[8];

uchar code dish[8] = {'z',' ','f','>','2','0','H','z'};
uchar code disl[8] = {'z',' ','f','<','2','0','H','z'};

void delay()
{
	uchar di;
	for(di=0;di<255;di++)
		_nop_();
}

void senddata(uchar cdata)
{
	SBUF = cdata;
	while(TI==0);
   	TI   = 0;
}
/////led/////
//rs = 1 data; rs = 0 comm
//wr = 1 read; wr = 0 write
//e 
//bf = 1 busy  
//A8 第二行起始址

void writecomm(uchar comm)
{
	e = 1;
	
	delay();
	P1 = comm;
	rs = 0;
	wr = 0;
	e  = 0;
	_nop_();
}

void writedata(uchar dat)
{
	//uchar sta;
	e = 1;
	//do
	//{
	//	sta = readsd(state);
	//	sta = sta&0x80;
	//}
	//while(sta!=0x00);
	delay();
	P1 = dat;
	rs = 1;
	wr = 0;
	e  = 0;
	_nop_();
	delay();
}

void initializelcd()
{
	writecomm(0x38);//2 line 
	delay();
	writecomm(0x38);//2 line 
	delay();
	writecomm(0x0c);
	delay();
	writecomm(0x06);
	delay();
	writecomm(0x80);
}


uchar readdata(uchar adr)
{
	uchar cc;
	P2 = adr;
	_nop_();
	_nop_();
	cc = P0;
	return cc;
}

void display()//h = 1;l = 0;
{
	uchar i;
	writecomm(0x80);
	for(i=0;i<8;i++)
		writedata(distp[i]);	
}

void calc()
{
	float bzq,tsq;
	uchar calct;
	writecomm(0xa8);
	writedata('z');

	bzq = res[3]*16777216+res[2]*65536+res[1]*256+res[0];
	tsq = res[7]*16777216+res[6]*65536+res[5]*256+res[4];
	if(bzq==0)
	{
		for(calct=0;calct<6;calct++)
			distp[calct] = 0x20;
		distp[6] = 0x30;
		display();
		return;
	}
	tsq = 20000000*tsq/bzq;
	//tsq = 19;
	bzq = tsq;

	calct = tsq/1000000;
	if(calct!=0)
	{
		tsq = tsq - calct*1000000;
		distp[0] = calct+48;
	}
	else 
		distp[0] = 0x20;
/////////////////0
	calct = tsq/100000;
	distp[1] = calct+48;
	if(calct!=0)
		tsq = tsq - calct*100000;
	else 
		if(distp[0]==0x20)
			distp[1] = 0x20;
////////////////1
	calct = tsq/10000;
	distp[2] = calct+48;
	if(calct!=0)
		tsq = tsq - calct*10000;
	else 
		if(distp[1]==0x20)
			distp[2] = 0x20;
/////////////////2
	calct = tsq/1000;
	distp[3] = calct+48;
	if(calct!=0)
		tsq = tsq - calct*1000;
	else 
		if(distp[2]==0x20)
			distp[3] = 0x20;
/////////////////3
	calct = tsq/100;
	distp[4] = calct+48;
	if(calct!=0)
		tsq = tsq - calct*100;
	else 
		if(distp[3]==0x20)
			distp[4] = 0x20;
//////////////////4
	calct = tsq/10;
	distp[5] = calct+48;
	if(calct!=0)
		tsq = tsq - calct*10;
	else 
		if(distp[4]==0x20)
			distp[5] = 0x20;
//////////////////5
	distp[6] = tsq/1+48; 
	tsq = tsq - (distp[6]-48);
	if(bzq<=20)
	{
		for(calct=0;calct<3;calct++)
			distp[calct] = 0x20;
		distp[3] = distp[5];
		distp[4] = distp[6];
		distp[5] = '.';
		distp[6] = (tsq*10)/1+48;
	}
	display();
}

void count()
{
	uchar i,t1,t2;
	f = 1;
	TH0 = 0x3c;
	TL0 = 0xb0;

	clr = 1;
	_nop_();
	clr = 0;///clear
		
	
	TR0 = 1;
	gate = 1;
	while(f);
	gate = 0;
	
	P2 = 0x04;
	do
	{
		t1 = P0;
		_nop_();
		t2 = P0;
	}
	while(t1!=t2);
	for(i=0;i<8;i++)
		res[i] = readdata(i);

	for(i=0;i<8;i++)
		senddata(res[i]);

	TH0 = 0x3c;
	TL0 = 0xB0;
	i = 0;
	
	while(i<10)
	{
		TR0 = 1;
		while(f);
		i++;
		f = 1;
		TH0 = 0x3c;
		TL0 = 0xb0;
	}
	calc();
}

void delay10s()
{	
	uint ds,tt1,tt2;
	EX0 = 0;
	writecomm(0xa8);
	writedata(0x20);
	writecomm(0x80);
	for(ds=0;ds<8;ds++)
		writedata(0x20);
	writecomm(0x80);
	writedata('W');
	writedata('a');
	writedata('i');
	writedata('t');
	ds  = 0;
	TH0 = 0x3c;
	TL0 = 0xb0;

	clr = 1;
	_nop_();
	clr = 0;///clear
	
	
	gate = 1;
	while(ds<282)
	{
		TR0 = 1;
		while(f);
		ds++;
		f = 1;
		TH0 = 0x3c;
		TL0 = 0xb0;
	}
	gate = 0;

	P2 = 0x04;
	do
	{
		tt1 = P0;
		_nop_();
		tt2 = P0;
	}
	while(tt1!=tt2);

	for(ds=0;ds<8;ds++)
		res[ds] = readdata(ds);

	for(ds=0;ds<8;ds++)
		senddata(res[ds]);
	calc();
	ds  = 0;
	TH0 = 0x3c;
	TL0 = 0xb0;
	EX0 = 1;
	while(ds<60)
	{
		TR0 = 1;
		while(f);
		ds++;
		f = 1;
		TH0 = 0x3c;
		TL0 = 0xb0;
	}
}

void t0pro(void) interrupt 1
{
	TR0 =  0;
	f   =  0;
}

void keyb(void) interrupt 0
{
	uchar *dp,i;
	while(sw==0);
	fhl = !fhl;
	writecomm(0xa8);
	if(fhl)
		dp = dish;
	else
	{
		dp = disl;
	}
	for(i=0;i<8;i++)
		writedata(*(dp+i));
}

main()
{
	uchar mi = 0x30;
	e = 0;
	SCON  = 0x50;
	RAP2H = 0xff;
   	RAP2L = 0xd9;
   	T2CON = 0x34;
	
	TMOD  = 0x01;
	clr  = 0;
	gate = 0;
	EA   = 1;
	ET0  = 1;
	IT0  = 1;
	EX0  = 1;

	delay();
	initializelcd();

	distp[0] = 0x20;
	distp[1] = 0x20;
	distp[2] = 0x20;
	distp[3] = 0x20;
	distp[4] = 0x20;
	distp[5] = 0x20;
	distp[6] = 0x30;
	distp[7] = 'H';
	fhl      = 1;
	display();
	writecomm(0xa8);
	for(mi=0;mi<8;mi++)
		writedata(dish[mi]);

	while(1)
	{
		//while(RI==0);
		//RI = 0;
		
		if(fhl)
			count();
		else
			delay10s();
	}
}

⌨️ 快捷键说明

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