经常好几天不在家,一直想做一个自动喂鱼的东西,在网上找了很久,就看到一个用15F104W单片机 只用定时器功能定时震动下鱼食的,不太喜欢,今天给大家分享一个我自己设计制作,还算比较满意的小作品。
第一次发帖 不太会啊……

制作出来的实物图如下:


引脚分配 lcd lcddata: P0
lcd_e: P2^7
lcd_rs: P2^6
lcd_rw: P2^5

    设置按键    limit_choise:        P    //温度上下限选择按键increase_temperature        P    //增加温度限值按键reduce_temperature        P    //减少温度限值按键蜂鸣器报警    warning        P   温度传感器    temperature_sensor    P制热    heatting    P制冷    refrigerating    PLED显示        normal        P    //正常温度指示灯high_temperature    P    //高温指示灯low_temperature        P    //低温指示灯


C语言参考源代码 如下:

#include <main.h>

void DelayUs(unsigned char tu)
{
while(–tu);
}

void DelayMs(unsigned char tm)
{
while(tm–)
{
DelayUs(248);
DelayUs(248);
}
}

void dianji() //喂鱼
{
unsigned int i;
speed=10;
i=3000;
while(i–)
{
A_ON
DelayMs(speed);
AB_ON
DelayMs(speed);
B_ON
DelayMs(speed);
BC_ON
DelayMs(speed);
C_ON
DelayMs(speed);
CD_ON
DelayMs(speed);
D_ON
DelayMs(speed);
DA_ON
DelayMs(speed);
}
ABCD_OFF
}
void dianji_shoudong() //手动喂鱼
{
unsigned int i;
speed=10;
i=500;
while(i–)
{
A_ON
DelayMs(speed);
AB_ON
DelayMs(speed);
B_ON
DelayMs(speed);
BC_ON
DelayMs(speed);
C_ON
DelayMs(speed);
CD_ON
DelayMs(speed);
D_ON
DelayMs(speed);
DA_ON
DelayMs(speed);
}
ABCD_OFF
}
void Timer0Init()
{
TMOD|=0X01;
TH0=0xB8; //11.0592M晶振 定时20ms
TL0=0x00;
ET0=1;
EA=1;
TR0=1;
}

void main()//主函数
{
init();//初始化函数
K1=1;
XIAODU=1;
YANGQI=1;
BENG=1;
Timer0Init();
while(1)
{
temp_control();//控制按键函数
unnormal_proccessing(get_temp(Ds18b20ReadTemp()),up_limit_temp,down_limit_temp);//恒温控制函数
if((h0)&(m0)&(s5))BENG=0; if((h3)&(m0)&(s0))BENG=1;
if((h4)&(m0)&(s0))BENG=0; if((h7)&(m0)&(s0))BENG=1;
if((h8)&(m0)&(s0))BENG=0; if((h11)&(m0)&(s0))BENG=1;
if(BENG1)
{
YANGQI=0;
XIAODU=1;
}
else
{
YANGQI=1;
XIAODU=0;
}
if((h6)&(m0)&(s0))
{
dianji();
}
if(K10)
{
DelayMs(20);
if(K10)
{
dianji_shoudong();
}
}
}
}

void init()//初始化函数
{
uint i,j;
//函数初始化
LcdInit();//LCD初始化函数
Ds18b20Init();

//I/O口初始化
heatting=1;//不制热
refrigerating=1;//不制冷
normal=1;//正常温度指示灯不显示
unnormal=1;//不正常温度指示灯不显示
warning=1;//蜂鸣器不报警

//LCD初始化显示
LcdWriteCom(0x80);//第一行显示
j=strlen(num1);
for(i=0; i<j; i++)
{
LcdWriteData(num1[i]);
delay_ms(1);
}
LcdWriteCom(0x80+0x40);//第二行显示
j=strlen(num2);
for(i=0; i<j; i++)
{
LcdWriteData(num2[i]);
delay_ms(1);
}
LcdWriteCom(0x04); //关闭写一个指针加1
}

uint get_temp(uint temp)//计算温度函数
{
float tp;

tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
temp=tp0.0625100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算加上0.5,还是在小数点后面。
return temp;
}

void display_real_tenp(uint temp)//实时温度显示函数
{
uchar datas[] = {0, 0, 0, 0}; //定义数组

datas[0] = temp % 10000 / 1000;
datas[1] = temp % 1000 / 100;
datas[2] = temp % 100 / 10;
datas[3] = temp % 10;

LcdWriteCom(0x80+0x0a); //写地址 80表示初始地址
LcdWriteData(‘0’+datas[0]); //十位

LcdWriteCom(0x80+0x0b); //写地址 80表示初始地址
LcdWriteData(‘0’+datas[1]); //个位

LcdWriteCom(0x80+0x0d); //写地址 80表示初始地址
LcdWriteData(‘0’+datas[2]); //显示小数点

LcdWriteCom(0x80+0x0e); //写地址 80表示初始地址
LcdWriteData(‘0’+datas[3]); //显示小数点

}

void temp_control()//控制温度上下限函数
{
if(limit_choise0)//选择按键
{
delay_ms(5);
if(limit_choise0)
{
while(!limit_choise);
limit_choise_num++;
if(limit_choise_num>=3)
{
limit_choise_num=0;
}
}
}
if(limit_choise_num==0)//正常显示
{
LcdWriteCom(0x0c);//关闭光标
display_real_tenp(get_temp(Ds18b20ReadTemp()));//显示函数
}

if(limit_choise_num1)//调节上限温度
{
LcdWriteCom(0x80+0X40+2);
LcdWriteCom(0x0f);//开启光标
if(increase_temperature0)//增加温度
{
delay_ms(5);
if(increase_temperature0)
{
while(!increase_temperature);
up_limit_temp++;
if(up_limit_temp>=100)
{
up_limit_temp=0;
}
//写入新数据
LcdWriteCom(0x80+0X40+0x03);
LcdWriteData(‘0’+up_limit_temp/10);
LcdWriteCom(0x80+0X40+0x04);
LcdWriteData(‘0’+up_limit_temp%10);
LcdWriteCom(0x80+0X40+2);//光标回写
}
}
if(reduce_temperature0)//减少温度
{
delay_ms(5);
if(reduce_temperature==0)
{
while(!reduce_temperature);
up_limit_temp–;
if(up_limit_temp<0)
{
up_limit_temp=99;
}
//写入新数据
LcdWriteCom(0x80+0X40+0x03);
LcdWriteData(‘0’+up_limit_temp/10);
LcdWriteCom(0x80+0X40+0x04);
LcdWriteData(‘0’+up_limit_temp%10);
LcdWriteCom(0x80+0X40+2);//光标回写
}
}
}

if(limit_choise_num2)//调节下限温度
{
LcdWriteCom(0x80+0X40+12);
LcdWriteCom(0x0f);//开启光标
if(increase_temperature0)//增加温度
{
delay_ms(5);
if(increase_temperature0)
{
while(!increase_temperature);
down_limit_temp++;
if(down_limit_temp>=100)
{
down_limit_temp=0;
}
//写入新数据
LcdWriteCom(0x80+0X40+0x0d);
LcdWriteData(‘0’+down_limit_temp/10);
LcdWriteCom(0x80+0X40+0x0e);
LcdWriteData(‘0’+down_limit_temp%10);
LcdWriteCom(0x80+0X40+12);//光标回写
}
}
if(reduce_temperature0)//减少温度
{
delay_ms(5);
if(reduce_temperature==0)
{
while(!reduce_temperature);
down_limit_temp–;
if(down_limit_temp<0)
{
down_limit_temp=99;
}
//写入新数据
LcdWriteCom(0x80+0X40+0x0d);
LcdWriteData(‘0’+down_limit_temp/10);
LcdWriteCom(0x80+0X40+0x0e);
LcdWriteData(‘0’+down_limit_temp%10);
LcdWriteCom(0x80+0X40+12);//光标回写
}
}
}
}

void unnormal_proccessing(uint temp,uint up_temp,uint down_temp)//恒温控制函数
{
uchar datas[] = {0, 0, 0, 0}; //定义数组
uint temp1=0;

datas[0] = temp % 10000 / 1000;
datas[1] = temp % 1000 / 100;
datas[2] = temp % 100 / 10;
datas[3] = temp % 10;
temp1=datas[0]*1000+datas[1]*100+datas[2]*10+datas[3];//实际的温度乘以100

if(temp1 < down_temp*100)//升温函数
{
heatting=0;//制热
refrigerating=1;//不制冷

unnormal=0;//不正常温度指示灯显示
normal=1;//正常温度指示灯不显示

//蜂鸣器报警
//warning=0;
//delay_ms(10);
//warning=1;
}
else if(temp1 > up_temp*100)//降温函数
{
heatting=1;//不制热
refrigerating=0;//制冷

unnormal=0;//不正常温度指示灯显示
normal=1;//正常温度指示灯不显示

//蜂鸣器报警
// warning=0;
// delay_ms(10);
// warning=1;
}
else//正常
{
heatting=1;//不制热
refrigerating=1;//不制冷

unnormal=1;//不正常温度指示灯不显示
normal=0;//正常温度指示灯显示

//蜂鸣器不报警
// warning=1;
}
}
void Time0() interrupt 1
{
static u8 i;
TH0=0xB8; //11.0592M晶振 定时20ms
TL0=0x00;
i++;
if(i>=50) //1秒时间到
{
i=0;

鉴于篇幅有限,只能写部分代码

最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,
本博客所有技术文件目前全部开源下载 ,如果需要完整代码或设计文件,请加简介中QQ群自行下载 或者私信我下载链接
谢谢!

创意设计:带自动喂鱼的鱼缸自动控制系统设计与制作 单片机程序 原理图 源代码相关推荐

  1. STM32物联网智能鱼缸智能家居系统(程序+原理图+PCB+图文教程)

    本设计: 基于STM32物联网智能鱼缸智能家居系统设计方案(程序+原理图+PCB) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0027 功能说明: 1. ...

  2. 《javaScript100例|01》超级经典一套鼠标控制左右滚动图片带自动翻滚

    目录 HTML示例 图片示例 HTML示例 <html > <head> <meta http-equiv="Content-Type" conten ...

  3. MySQL中 begin 事务 begin ,第二个begin带自动提交功能???

    两个begin,第二个begin带自动提交功能吗,不是只能commit和rollback提交结束事务吗?

  4. 【PPT】《使用ChatGPT一键制作带自动配图的PPT演讲稿》- 知识点目录

    <使用ChatGPT一键制作带自动配图的PPT演讲稿> 1. 使用ChatGPT生成prompt 生成一个用于Tome制作<汽车诞生史>PPT的prompt 为了制作<汽 ...

  5. 5VUSB微孔雾化器IC方案FS150C SOP8带自动扫频加湿器IC

    5VUSB微孔雾化器IC方案FS150C带自动扫频加湿器IC5V USB微孔雾化器IC方案FS150C带自动扫频加湿器IC 一.产品概述 本IC是专为雾化器而设计的一款ASIC集成电路,具有如下功能: ...

  6. Tensorflow2.x 利用“GradientTape 梯度带”自动求梯度

    目录 自动微分和梯度 中间结果 多目标的梯度 控制流 获取None的梯度 零而不是None 自动微分和梯度 Tensorflow为自动微分提供了 tf.GradientTape API,将tf.Gra ...

  7. PHP响应式VIP电影影视系统源码 带自动采集和会员管理系统

    PHP响应式VIP电影影视系统源码 带自动采集和会员管理系统,支持app打包,无加密无授权,目前最好的全自动采集VIP电影源码,包含三套模版后台自由选择+直播加入批量添加功能+后台管理电影+安全防御系 ...

  8. 2022年全球自动去鱼皮机行业分析报告

    2022年全球市场自动去鱼皮机总体规模.主要生产商.主要地区.产品和应用细分研究报告 本文研究全球市场.主要地区和主要国家自动去鱼皮机的销量.销售收入等,同时也重点分析全球范围内主要厂商(品牌)竞争态 ...

  9. matlab带未知数的劳斯判据,自动控制原理实验用Matlab软件编制劳斯判据程序并解题(《学习辅导》例435).doc...

    自动控制原理实验用Matlab软件编制劳斯判据程序并解题(<学习辅导>例435) 上 海 电 力 学 院 实 验 报 告 自 动 控 制 原 理 实 验 课 程 题目:用Matlab软件编 ...

  10. 带自动收录批量验证简洁的福利网址导航源码

    简介: 带自动收录.批量验证的导航主题免费发布 网盘下载地址: http://kekewangLuo.cc/CUAGhatFECT0 图片:

最新文章

  1. 机器学习的5个常见痛点及解决方法
  2. C++ 的复制构造函数
  3. [踏得网]HTML5在线教程阅读进度记录
  4. svn无法读取日志问题解决
  5. NVIDIA 显卡与 CUDA 在深度学习中的应用
  6. 51 NOD 1363 最小公倍数之和 (欧拉函数思维应用)
  7. yui3 html属性,YUI Rich Editor + invalidHTML + style
  8. python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
  9. mysql 两表关联查询 group by having
  10. linux修改时区为UTC
  11. 到底如何理解文本?一文读懂命名实体识别(实体消歧和实体统一)
  12. Sensible, not sensitive; simply complicated; predictably irrational; kindly demanding; constructivel
  13. ROS实验笔记之——SLAM无人驾驶初入门
  14. 三星S95Z / S90Z OLED 电视 评测
  15. HTML表格,列表,超链接,图片
  16. 好用的日历 android,手机日历软件哪个最好用?日历app排行榜(10款)
  17. 【新闻】李晓翾先生荣获北美产险精算学会2022年度卓越成就奖
  18. linux资源查看命令详解大全[top|vmstat|free]
  19. FPGA:设计一个原码一位乘法器
  20. form编译报错:ORA-12162: TNS:net service name is incorrectly specified解决办法

热门文章

  1. 社保管理系统服务器异常,社保费客户端登录服务器异常
  2. 计算机毕业设计SSM常见病辅助食疗系统【附源码数据库】
  3. 星界边境联机服务器未响应,星界边境Starbound联机注意事项
  4. android10怎么截屏,安卓手机怎么截图?安卓手机截图方法大全
  5. flutter11 - 调试程序
  6. 【5G核心网】5GC核心网之网元UDM
  7. 全球及中国医用外科缝合器行业市场需求潜力及投资战略研究报告2022-2028年
  8. C语言简单游戏编程入门之四子棋
  9. 谭浩强大师的世界纪录
  10. length()、size()、sizeof()三者的区别