1. 51仿真:
LCD第一屏显示食物重量,当前时间,温湿度。第二屏显示喂食时间,第三屏显示喂食重量。可通过点击查看喂食时间翻转屏幕显示。
点击查看喂食时间后,显示喂食时间,可以设置三个时间,再点击设置,可以设置喂食时间。
主程序片段:
void main()
{
unsigned int count,dj_count;
short temperature;//温度
short humidity;//湿度
bit flag = 0;
lcd_init();//1602初始化
Timer_Init();//定时器初始化
To_Zero();//找回零点
lcd_write_str(0,0,"W: . kg T: C");//第一行显示的内容
lcd_write_str(0,1," : : H: %");//第二行显示的内容
while(1)
{
keyscan();//按键扫描
if(count++>=50 && setN == 0 && see_nz == 0)//延时一段时间,进入下面函数
{
count=0;
get_weight();//获取重量
RH();//读取温湿度
humidity = U8RH_data_H;
temperature = U8T_data_H;
display_weight();//显示重量
display_time();//显示时间
lcd_write_char(13,0,temperature/10+0x30);//显示温度
lcd_write_char(14,0,temperature%10+0x30);
lcd_write_char(13,1,humidity/10+0x30);//显示湿度
lcd_write_char(14,1,humidity%10+0x30);
if((shi == n1_shi && fen == n1_fen && miao == n1_miao)||
(shi == n2_shi && fen == n2_fen && miao == n2_miao)||
(shi == n3_shi && fen == n3_fen && miao == n3_miao)
)
{
//三个喂食时间,任意一个时间到,则开启电机
if(weight < food_weight)open_flag = 1;//必须小于设定重量,才能开启
}
if(open_flag==1)//电机标志位开启
{
if(dj_count++ > 100)//喂食完成,关闭电机
{
dj_count = 0;//电机延时清零
open_flag = 0;//开启电机标志位清零
flag = 0; //电机反转标志清零
MotorStop();//关闭电机
}
if(dj_count < 50)//计数值小于50,电机正转
{
MotorCW();//电机正转
}
else//等于或超过50
{
if(weight >= food_weight)//投食重量达标后,开启电机反转标志
{
flag = 1;
}
if(flag == 1)//重量达标电机反转
MotorCCW();
else
dj_count = 50;//重量不达标,电机不动作,dj_count赋值为50
}
}
}
}
}
2. 实物制作
lcd原理图:
重量传感器使用hx711:
语音模块使用WT588D:
3. 整理资料:
需要资料或者事物的加🐧qq🐧: 2711326046