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

📄 cc.c

📁 通过提升机械传动轴的转角脉冲计数,将计数值与预置值作对比,即可确定驱动电机的启停升降,达到平层就位的目的.以AT89C51为CPU,在中断处理程序中对外来脉冲计数.
💻 C
字号:
#include<reg52.h>
#include<intrins.h>

sbit RS  =P2^7;
sbit RW  =P2^6;
sbit EN  =P2^5;


#define INT 5			
unsigned char count=0,cnt=0;
//unsigned long N;
unsigned long value[ INT ];
void inil( void );

void DelayL( );
void DelayS( );
void WriteCommand( unsigned char c );
void WriteData( unsigned char c );
void ShowChar( unsigned char pos,unsigned char c );
void ShowString( unsigned char line,char *ptr );
void InitLcd( );

void main( void )
{
	unsigned char i;
	unsigned long m;
	unsigned char code str1[]="  cuit team 36  ";
	unsigned char code str2[]="   2005-7-18    ";
	unsigned char line0[]="Frequnecy is:   ";
	unsigned char line1[]="                ";

	DelayL( );
	InitLcd( );
	DelayL( );
	ShowString( 0,str1 );
	ShowString( 1,str2 );

	inil( );
	
	while( 1 )
	{
		if( count==INT )
		{
			for( i=0;i<INT;i++ )
			{
				m=m+value[i];
			}
			m=m/INT;
			m=1843200/m;
			if( m<1000 )
			{
				line1[0]=m/100+0x30;
				m=m%100;
				line1[1]=m/10+0x30;
				line1[2]=m%10+0x30;
				line1[3]='H';
				line1[4]='z';
	
				ShowString( 0,line0 );
				ShowString( 1,line1 );
			}
			else
			{
				m=m/100;
				line1[0]=m/100+0x30;
				m=m%100;
				line1[1]=m/10+0x30;
				line1[2]='.';
				line1[3]=m%10+0x30;
				line1[4]='K';
				line1[6]='H';
				line1[7]='z';
				ShowString( 0,line0 );
				ShowString( 1,line1 );
					for( i=0;i<=45;i++ )
				{
					void DelayL( );
				}
			}
			for( i=0;i<=35;i++ )
			{
				void DelayL( );
			}

			m=0;
			count=0;
			cnt=0;
			EX0=1;
			ET0=1;
			EA=1;
		}
	}
}




void inil( void )
{
	EA=0;
	INT0=1;
	IT0=1;
	TMOD=( TMOD&0XF0 )|0X01;
	TR0=0;
	TH0=TL0=0;
	EX0=1;
	ET0=1;
	EA=1;
}

void intlint0( void ) interrupt 0
{
	unsigned char th,tl,a;
	unsigned long N;
	if( TH0==TL0&&TL0==0 ) TR0=1;
	else
	{
		TR0=0;
		th=TH0;
		tl=TL0;
		a=cnt;
		EX0=0;//````````````````
		TH0=TL0=0;
		cnt=0;
	//	TR0=1;
		if( a==0 )
		{
			N=th*256+tl;
		}
		else
		{
			N=65536*a+th*256+tl;
		}
		value[ count++ ]=N;

		if( count==INT )
		{
			EX0=0;
			ET0=0;
			TH0=TL0=0;
			EA=0;
		}
		else
		{
			EX0=1;		//````````````````````
		}
	}
}


void intlt0( void ) interrupt 1
{
	cnt++;
	TH0=TL0=0;
}


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~				LCD

void DelayL( )
{
	unsigned char i,j;
	i=0xF0;
	j=0xFF;
	while( i-- )
		while( j-- );
}

void DelayS( )
{
	unsigned char i;
	i=0x1F;
	while( i-- );
}

void WriteCommand( unsigned char c )
{
	DelayS( );
	EN=0;
	RS=0;
	RW=0;
	_nop_( );
	EN=1;
	P0=c;
	EN=0;
}

void WriteData( unsigned char c )
{
	DelayS( );
	EN=0;
	RS=1;
	RW=0;
	_nop_( );
	EN=1;
	P0=c;
	EN=0;
	RS=0;
}

void ShowChar( unsigned char pos,unsigned char c )
{
	unsigned char p;
	if( pos>=0x10 )
		p=pos+0xB0;//
	else
		p=pos+0x80;//
	WriteCommand( p );
	WriteData( c );
}

void ShowString( unsigned char line,char *ptr )
{
	unsigned char l,i;
	l=line<<4;
	for( i=0;i<16;i++ )
		ShowChar( l++, *(ptr+i) );
}

void InitLcd( )
{
	DelayL( );
	WriteCommand( 0x38 );
	DelayL( );
	WriteCommand( 0x38 );
	DelayL( );
	WriteCommand( 0x06 );
	WriteCommand( 0x0c );
	WriteCommand( 0x01 );
	WriteCommand( 0x80 );
}

⌨️ 快捷键说明

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