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

📄 备份电机转速.c

📁 按键控制电机的开启
💻 C
字号:
/*************k1冷风,k2热风,k3低速,k4中速,k5高速,k6确认******************
**************当复位时,显0000***********************************************
**************当红外被挡时,初始显示H002,热风,中速,电热灯亮**************** 		
**************进入设置程序,长按k6,首先设置冷热风,风档,k6确认*************
**************换档按冷风键退后,重新选择调节*********************************
**************设置结束,长按k6保存设置值,并退出****************************/  	  

#include <reg51.h>
#include "EEPROM.c"
#define uint unsigned int
#define uchar unsigned char
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit k6=P1^5;
sbit fk=P1^6;				//控制电机信号	
sbit jr=P1^7;				//控制继电器,加热

sbit d1=P3^4;
sbit d2=P3^5;				
sbit d3=P3^6;
sbit d4=P3^7;
bit flag3;
bit flag4;
bit flag5;
bit set1;
bit set2;

uint code table[]={0x3f,0x06,0x5b,0x4f,0x38,0x76};
uchar code tacle[]={0,1,2,3,10,20,30};
uchar key,key1,key2,key3,key4,key5,key6,a,b,tem,dis,step;
uchar flag,flag1,flag2;
void xianshi(uchar,uchar,uchar,uchar);
void break_init();
void dj_sence(uchar,uchar,uchar,uchar);
void dj_ISP_store(uchar,uchar,uchar,uchar);
void dj_key();
uchar dj_setup();

delayms(uint z)
{
	uchar x;
	while(z--)
		for(x=0;x<110;x++);
}
//功能: 默认状态
void chushi(uchar tem,uchar dis,uchar step)				 
{
	if(tem==1)
		xianshi(4,0,0,dis);
	else
	{
		xianshi(5,0,0,dis);
		jr=1;
		d2=0;
	}
	if(tacle[step]==2)
		fk=1;
	else
		fk=0;
}
//功能: 中断初始	
void break_init()										 
{
	TMOD=0x01;
	TH0=(65535-500)/256;
	TL0=(65535-500)%256;	
	IE=0X87;
	TR0=1;
	TR1=1;
	fk=0;
	jr=0;	
	set1=0;
	set2=0;
	tem=2;
	dis=2;
	step=2;
}
main()
{	
	break_init();	
	while(1)
	{		
		if((set1==1)&(set2==1))
		{	
			flag3=dj_setup();			//未进入功能设置,执行初始阶段 
			
			if(flag3==0)
			{	
				flag4=ISP_read(14);		//读取各设置数据 
				while(flag4==1)
				{
					tem=ISP_read(11);
					dis=ISP_read(12);
					step=ISP_read(13);
				}				
				chushi(tem,dis,step);
			}			
			else										 
			{
				d2=1;
				d3=0;				
				fk=0;
				jr=0;
				flag4=0;
			 	while(flag3==1)			//进入功能设置阶段 
				{	
					xianshi(1,1,1,1);
					dj_key();
				}
			}
		}
		else 
			xianshi(0,0,0,0);
	}
}
//功能: 按键功能目录 
void dj_key()											
{	
	while(k1==0)
	{	
		a=1;
		d1=0;
		d2=1;
		jr=0;
		b=0;
	}
	while(k2==0)
	{	
		jr=1;
		d1=1;
		d2=0;
		b=2;
		a=0;	
	}
	while(k3==0)
	{	
		delayms(5);
		key3=1;
		while(k3==0);			
	}
	while(k4==0)
	{
		delayms(5);
		key4=1;
		while(k4==0);
	}
	while(k5==0)
	{
		delayms(5);
		key5=1;
		while(k5==0);
	}
	while(key3==1)
	{
		dj_sence(key3,a,1,flag);
		key3=0;
	}
	while(key4==1)
	{
		dj_sence(key4,a,2,flag1);
		key4=0;
	}
	while(key5==1)
	{
		dj_sence(key5,a,3,flag2);
		key5=0;
	}
}
//功能: 功能设定
void dj_sence(uchar k,uchar h,uchar i,uchar j)				 
{	
	if(flag4==0)
	{	
		while(k==1)
		{				
			while(k6!=0);
			while(k6!=1);
			while(k==1)
			{
				if(h==1)
					xianshi(4,0,0,i);
				else
					xianshi(5,0,0,i);
				if(j==tacle[j])
					fk=1;
				else
					fk=0;			
				while(k1==0)					
					k=0;
				flag4=dj_setup();
				if(flag4==1)
				{
					flag5=1;
					k=0;
					dj_ISP_store(h,i,j,flag4);
				}
			}	
		}		
	}
	if(flag4==1)
	{
		while(flag5==1)
		{
			flag3=0;
			xianshi(0,0,0,0);
		}
	}
}
//功能: 将各数据存入EEPROM 
void dj_ISP_store(uchar h,uchar i,uchar j,uchar flag4)	
{
	ISP_write(11,h);
	delayms(1);
	ISP_write(12,i);
	delayms(1);
	ISP_write(13,j);
	delayms(1);
	ISP_write(14,flag4);
	delayms(1);
}
//功能: 设置功能启始按键
uchar dj_setup()												   
{
	uchar d;
	while(k6==0)
	{
		delayms(100);
		while(k6==0)
		{
			delayms(100);
			while(k6==0)
			{
				d=1;				
			}
		}
	}
	return d;
}
//功能: 数码显示
void xianshi(uchar a,uchar b,uchar c,uchar d)			 
{	
	P2=0x01;
	P0=table[a];
	delayms(1);
	
	P2=0x02;
	P0=table[b];
	delayms(1);
	
	P2=0x04;
	P0=table[c];
	delayms(1);

	P2=0x08;
	P0=table[d];
	delayms(1);	
}
//功能: 设置三种风速
void time0() interrupt 1								 
{
	uint t0,t1,t2;
	TH0=(65535-500)/256;
	TL0=(65535-500)%256;
	t0++;	
	t1++;
	t2++;
	if(t0<=100)
		flag=1;
	else
	{
		flag=0;
		if(t0==1000)
		{
			t0=0;
			flag=1;
		}
	}

	if(t1<=500)
		flag1=2;
	else
	{
		flag1=0;
		if(t1==1000)
		{
			t1=0;
			flag1=2;
		}
	}

	if(t2<=900)
		flag2=3;
	else
	{
		flag2=0;
		if(t2==1000)
		{
			t2=0;
			flag2=3;
		}
	}
}
//功能:释放感应
init0() interrupt 0									 
{
	set1=1;
}
//功能:红外感应 
init1() interrupt 2									
{
	set2=1;
}

⌨️ 快捷键说明

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