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

📄 driver.h

📁 自己做的AVR洗衣机模型程序
💻 H
字号:
#include <iom16v.h>
#include <macros.h>
#include <bit.h>
#include "define.h"
#include "LCD_Driver.h"
#include "Sounds_and_Display.h"
#include "key.h"
#include "PWM.h"
#include "24L01_Driver.h"
#define out_o_not	   if(flag_start==0)break
#define PWM_off	   TCCR1A=0x00;TCCR1B = 0x00;DDR_PD4=0 //stop
#define PWM_on	   TCCR1A=0x23;TCCR1B = 0x1A;DDR_PD4=1 //start
uchar data_buff[2];

void Port_close(void)
{
 PORTA = 0x00;
 DDRA  = 0x00;
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00;
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0x00;
}

void timer0_init(void)
{
 TCNT0 = 0x06; //set count
 TIMSK|=BIT(0);
 SREG|=BIT(7); 
}

void set_watlev()//水位高3中2低1
{
cls;
Delay(2);
Char_Set_XY(0,1,"水位设置:");
switch(wat_lv)
		{ 
    	 case 3:Char_Set_XY(5,1,"高");break;
	     case 2:Char_Set_XY(5,1,"中");break;
    	 case 1:Char_Set_XY(5,1,"低");break;
		 default:break;
		}
set_buff=0;
while(nn==1&&flag_start==0)//水位设置标志位为1
	{
	set_buff=key2_scan();
	wat_lv+=set_buff;
	
	if(BBBuffer==1)
		{
		 	if(wat_lv>=4)//判断溢出
				wat_lv=1;
			if(wat_lv<=0)
			    wat_lv=3;
				switch(wat_lv)
				{ 
    	  		case 3:Char_Set_XY(5,1,"高");break;
	       	    case 2:Char_Set_XY(5,1,"中");break;
    	  		case 1:Char_Set_XY(5,1,"低");break;
		  		default:break;
				}
				BBBuffer=0;
					data_buff[0]='w';
					data_buff[1]=wat_lv;
					Putstr(data_buff);
		}
		key_scan();//扫描设置键盘
	}



}

void set_health()//洗衣强度
{

cls;//清屏
Delay(2);
Char_Set_XY(0,1,"洗衣强度:");
Delay(1);
	switch	(health)
		{ 
  	  		case 2:Char_Set_XY(5,1,"强");break;
   	  		case 1:Char_Set_XY(5,1,"弱");break;
	  		default:break;
		}
set_buff=0;
while(nn==2&&flag_start==0)//洗衣强度标志位为2
	{
	speed=health;
	set_buff=key2_scan();
	health+=set_buff;
	if(BBBuffer==1)
		{
		if(health>=3)//判断溢出
		   health=1;
		if(health<=0)
		   health=2;
				switch	(health)
				{ 
    	  		case 2:Char_Set_XY(5,1,"强");break;
    	  		case 1:Char_Set_XY(5,1,"弱");break;
		  		default:break;
				}
				BBBuffer=0;
			data_buff[0]='h';
			data_buff[1]=health;
			Putstr(data_buff);
		}
	key_scan();//扫描设置键盘

	}

}

void set_cycle()//电动机循环次数
{
cls;//清屏
Delay(2);
Char_Set_XY(0,1,"循环次数  次");
Delay(1);
Char_Set_XY(4,1,":");
W_1byte(0,1,0x30+cycle);

set_buff=0;
while(nn==3&&flag_start==0)//电动机循环设置标志位为3
	{
//	display(cycle);
	set_buff=key2_scan();
	cycle+=set_buff;
	if(BBBuffer==1)
		{
		if(cycle>=10)//判断溢出
			cycle=1;
		if(cycle<=0)
			cycle=9;
				Char_Set_XY(4,1,":");
				W_1byte(0,1,0x30+cycle);//显示数字
				BBBuffer=0;
			data_buff[0]='c';//发数据
			data_buff[1]=cycle;
			Putstr(data_buff);
		}
	key_scan();//扫描设置键盘
	
	}


}


void set_replay()//洗衣加排水重复次数
{
cls;//清屏
Delay(2);
Char_Set_XY(0,1,"洗衣重复次数  次");
Char_Set_XY(6,1,":");

Delay(1);
W_1byte(0,1,0x30+replay);


set_buff=0;
while(nn==4&&flag_start==0)//洗衣强度标志位为4
	{


	set_buff=key2_scan();
	replay+=set_buff;
	if(BBBuffer==1)
		{
		if(replay>=6)//判断溢出
				replay=1;
		if(replay<=0)
				replay=5;
		Char_Set_XY(6,1,":");
			W_1byte(0,1,0x30+replay);//显示数字
			BBBuffer=0;
			data_buff[0]='r';
			data_buff[1]=replay;
			Putstr(data_buff);
		}
	key_scan();//扫描设置键盘
	}
	

}





void wait_time(uchar w_t)
{
TCNT0=0;
count=0;
endcount=w_t;
}

void PWM_motor_going(uchar dir)
{
switch (dir)
	{
	case 0:DDR_PB0=1,_PB0=1;DDR_PB1=1,_PB1=0;break;
	case 1:DDR_PB0=1,_PB0=0;DDR_PB1=1,_PB1=1;break;
	default:break;
	}
}

void Water_in(uchar ff)
{
switch(ff)
	{
	case 0:DDR_PC4=1;_PC4=0;break;
	case 1:DDR_PC4=1;_PC4=1;break;
	default:break;
	}
}

void Water_out(uchar ff)
{
switch(ff)
	{
	case 0:DDR_PC5=1;_PC5=0;break;//写语句
	case 1:DDR_PC5=1;_PC5=1;break;//写语句
	default:break;
	}
}


void get_clean(void)//洗衣
{
SET_PWMA(speed);//设置洗衣强弱模式
PWM_on;
wait_time(8);//定时8s正转
PWM_motor_going(0);
while(1)
{
out_o_not;//判断是否应该退出大循环
if(count==endcount)
		break;
}
PWM_off;
wait_time(2);//定时2s停转
while(1)
	{
	out_o_not;//判断是否应该退出大循环	
	if(count==endcount)
 	   break;
	}
PWM_on;
wait_time(8);//定时8s反转
PWM_motor_going(1);
while(1)
	{out_o_not;//判断是否应该退出大循环	
	if(count==endcount)
		break;
	}
PWM_off;
wait_time(3);//定时3s停转
while(1)
   {out_o_not;//判断是否应该退出大循环	
   if(count==endcount)
 	    break;
   }
}

void get_dry()//脱水
{
PWM_on;
wait_time(10);//定时10s狠转
while(1)
  {out_o_not;//判断是否应该退出大循环
   if(count<endcount)
	PWM_motor_going(0);
   else break;
  }
PWM_off;
wait_time(2);//定时2s停转
while(count<endcount)
  {
out_o_not;//判断是否应该退出大循环
  }

PWM_on;
wait_time(10);//定时10s狠转
while(1)
  {
out_o_not;//判断是否应该退出大循环
if(count<endcount)
	PWM_motor_going(1);
   else break;
  }
PWM_off;

wait_time(2);//定时2s停转
while(count<endcount)
{
out_o_not;//判断是否应该退出大循环
}

}

void handle_receive(uchar ceive[2])//串口接收处理程序
{
switch (ceive[0])
	{
	case start:flag_start=ceive[1];BBBuffer=1;break;
	case wat:wat_lv=ceive[1];BBBuffer=1;break;
	case heal:health=ceive[1];BBBuffer=1;break;
	case cyc:cycle=ceive[1];BBBuffer=1;break;
	case rep:replay=ceive[1];BBBuffer=1;break;
	defult:break;
	}
}

⌨️ 快捷键说明

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