#include "main.h"
xdata unsigned char init_time[7]={57, 44, 14, 27, 5, 6, 22}; //初始化时间
xdata unsigned int time_s,time_m,time_h,r=0;
xdata unsigned char key_flag=0,tandh_motor_flag=1,timer_control_flag=1,G_control_flag=1;
xdata unsigned char Switch_screen_flag=0;
extern xdata unsigned char Switch_screen_flag;
void uart_send_data(); //串口收发
void now_times(); //获取当前时间
void photos_data(); //获取当前光敏电压
void motor_src(); //电机控制
void TempAndHumi_data();//温湿度显示
void key_control(); //按键控制
void tempAndHuim_cont();//温湿度控制
void tandh_form(); //温湿度模块化,用于调用
void TimerControl();//时间控制
void timer_cont_form(unsigned int run_dat,unsigned char run_state);//时间控制模块化,用于调用
void timer_cont_form_2(unsigned int run_dat,unsigned char run_state);//时间控制模块化,用于调用
void G_cont_form(unsigned int run_dat,unsigned char run_state); //光敏控制模块化,用于调用
void G_cont_form_2(unsigned int run_dat,unsigned char run_state); //光敏控制模块化,用于调用
void PhotosControl();//光照控制
void G_T_H_sreen();
void main(void)
{
UsartInit();
OLED_Init();
OLED_Clear();
DS1302_Read_Time();
show_sreen1();//屏幕显示
while(1)
{
key_control(); //按键控制
now_times(); //获取当前世间
G_T_H_sreen();
uart_send_data();//串口收发
photos_data();//获取当前光敏电压并转化为百分比
TempAndHumi_data();//获取当温湿度
motor_src();//电机控制
tempAndHuim_cont();//温湿度控制
TimerControl();//时间控制
PhotosControl();//光照控制
}
}
void now_times()
{
if((Switch_screen_flag==0)||(Switch_screen_flag==2))
{
DS1302_Read_Time();
OLED_Show_String(2,0,"Time:");
OLED_Show_Num(2,40,TIME[2],2);
OLED_Show_String(2,56,":");
OLED_Show_Num(2,74,TIME[1],2);
OLED_Show_String(2,90,":");
OLED_Show_Num(2,98,TIME[0],2);
}
}
void G_T_H_sreen()
{
if(Switch_screen_flag==0)
{
OLED_Show_String(4,0,"Temp:");
OLED_Show_Num(4,40,T_int,2);
OLED_Show_String(4,56,"Humi:");
OLED_Show_Num(4,96,H_int,2);
OLED_Show_String(6,0,"Light:");
OLED_Show_String(6,88," ");
OLED_Show_Num(6,48,G,3);
OLED_Show_String(6,72,"M:");
OLED_Show_String(6,88," ");
OLED_Show_Num(6,88,run_num,3);
}
}
void motor_src()//电机控制
{
if((manual_flag==3)||(Switch_screen_flag==1))
{
switch(key_flag)
{
/*
tandh_motor_flag:温湿度控制电机标志位
key_flag:按键标志位
*/
case 1: printf("开窗中···\r\n");
OLED_Show_String(2,0," ");
OLED_Show_String(2,0,"In operation");
motor_run_counter_circle(1,Forward);
printf("已完成开窗\r\n");
printf("窗帘拉起中···\r\n");
motor_run_custom(512,1);
printf("已完成拉起\r\n");
printf("恢复操作\r\n");
OLED_Show_String(2,0," ");
OLED_Show_String(2,0,"Res operation");
OLED_Show_String(4,0,"M:");
OLED_Show_String(4,16," ");
OLED_Show_Num(4,16,run_num,3);
timer_control_flag=0;
tandh_motor_flag=0;
G_control_flag=0;
key_flag=0;
break;
case 2: printf("关窗中···\r\n");
OLED_Show_String(2,0," ");
OLED_Show_String(2,0,"Is closing");
motor_run_counter_circle(1,Back);
printf("已完成关窗\r\n");
printf("窗帘关闭中···\r\n");
motor_run_custom(512,0);
printf("已完成关闭\r\n");
printf("恢复操作\r\n");
OLED_Show_String(2,0," ");
OLED_Show_String(2,0,"Complete closure");
OLED_Show_String(4,0,"M:");
OLED_Show_String(4,16," ");
OLED_Show_Num(4,16,run_num,4);
timer_control_flag=1;
tandh_motor_flag=1;
G_control_flag=1;
key_flag=0;break;
default:key_flag=0;break;
}
}
else
key_flag=0;//在手动控制未启动之前按键无法控制
}
void key_control() //按键控制
{
/*按键4不参与控制电机屏幕等
按键3停止电机运转
*/
switch(Key_scan())
{
case 1: key_flag=1;break; //切屏 开电机
case 2: key_flag=2;break;
case 3: DS1302_Init_Time(init_time);break;
case 4: Switch_screen_flag++;
OLED_Clear();
switch(Switch_screen_flag)
{
case 0:show_sreen1();now_times();break;
case 1:show_manual_sreen();OLED_Show_String(2,0,"No operation");tandh_flag=0;break;
case 2:show_time_sreen();OLED_Show_String(4,0,"No operation");tandh_flag=0;break;
case 3:show_Light_sreen();OLED_Show_String(4,0,"No operation");tandh_flag=0;break;
case 4:show_tandh_sreen();OLED_Show_String(4,0,"No operation");tandh_flag=0;break;
default:Switch_screen_flag=0;show_sreen1();now_times();tandh_flag=0;break;
}
break;
}
}
void tempAndHuim_cont()//温度控制
{
/*大于30打开,小于27关
温度为:22~26度 湿度为40%~70%窗户 窗户全部打开
假设电机顺时针旋转1/2圈为打开
*/
if((tandh_flag==3)||(Switch_screen_flag==4)) //在温湿度模式启动
{
tandh_form();//温湿度格式化,用于调用
show_tandh_sreen();
}
}
void TimerControl()//时间控制
{
if((timer_flag==3)||(Switch_screen_flag==2))//时间控制
{
/*
优先时间控制拉开窗帘
再对温湿度判断是否打开窗户
0为关闭
1为拉起
*/
if(TIME[2]==8&&TIME[1]==0&&TIME[0]==0)//早上8点拉起
{
timer_cont_form(512,1);
}
if(TIME[2]==12)
{
timer_cont_form_2(512,0);
}
if(TIME[2]==14&&TIME[1]==20&&TIME[0]==0)
{
timer_cont_form(522,1);
}
if(TIME[2]==19&&TIME[1]==0&&TIME[0]==0)
{
timer_cont_form(522,0);
}
}
}
void PhotosControl()//光照控制
{
if((G_flag==3)||(Switch_screen_flag==3))//光照控制
{
show_Light_sreen();
if(G>=20&&G<30)
{
G_cont_form(512,1);//拉起窗帘 100%
}
if(G>=0&&G<10)
{
G_cont_form(512,0);//关闭窗帘 100%
}
if(G>=80)
{
G_cont_form_2(512,0);//关闭窗帘 100%
}
if(G>=60&&G<80)
{
G_cont_form(512,0);//关闭窗帘 50%
}
}
}
void tandh_form()//温湿度模块化,用于调用
{
if((T_int<20&&T_int>35)&&(H_int<70&&H_int>30))
{
if(tandh_motor_flag==1) //只有第一次进入这个区间电机才会启动,避免重复循环
{
OLED_Show_String(4,0," ");
OLED_Show_String(4,0,"Open window");
printf("当前温湿度比较合适开窗···\r\n");
Delay_ms(10);
printf("窗户打开中···\r\n");
printf("请勿进行其他操作\r\n");
motor_run_counter_ahalf(1,Forward);
printf("已完成打开\r\n");
tandh_motor_flag=0;
OLED_Show_String(4,0," ");
OLED_Show_String(4,0,"Res operation");
OLED_Show_String(6,0,"M:");
OLED_Show_String(6,16," ");
OLED_Show_Num(6,16,run_num,4);
}
}
else
{
if(tandh_motor_flag==0) //判断窗户是否为打开状态
{
OLED_Show_String(4,0," ");
OLED_Show_String(4,0,"Close window");
printf("当前温湿度不适宜开窗···\r\n");
Delay_ms(10);
printf("窗户关闭中···\r\n");
printf("请勿进行其他操作\r\n");
motor_run_counter_ahalf(1,Back);
printf("已完成关闭\r\n");
tandh_motor_flag=1;
OLED_Show_String(4,0," ");
OLED_Show_String(4,0,"Complete closure");
OLED_Show_String(6,0,"M:");
OLED_Show_String(6,16," ");
OLED_Show_Num(6,16,run_num,4);
}
}
}
void timer_cont_form(unsigned int run_dat,unsigned char run_state) //时间控制模块化,用于调用
{
if(timer_control_flag==1)//仅在第一次进入打开
{
OLED_Show_String(4,0," ");
OLED_Show_String(4,0,"In operation");
Delay_ms(10);
printf("窗帘拉起中···\r\n");
printf("请勿进行其他操作\r\n");
motor_run_custom(run_dat,run_state);
printf("已完成拉起\r\n");
printf("恢复操作\r\n");
timer_control_flag=0;
OLED_Show_String(4,0," ");
OLED_Show_String(4,0,"Res operation");
OLED_Show_String(6,0,"M:");
OLED_Show_String(6,16," ");
OLED_Show_Num(6,16,run_num,4);
/*判定温湿度情况*/
tandh_form();//温湿度格式化,用于调用
}
}
void timer_cont_form_2(uns
没有合适的资源?快使用搜索试试~ 我知道了~
基于51单片机的智能窗户控制系统的C语言代码.zip
共80个文件
h:15个
obj:14个
lst:14个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 136 浏览量
2024-04-24
14:32:57
上传
评论
收藏 259KB ZIP 举报
温馨提示
基于51单片机的智能窗户控制系统的C语言代码(高分项目).zip个人98分期末大作业项目,代码完整下载可用。主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含全部项目源码、该项目可以直接使用、项目都经过严格调试,下载即用确保可以运行!
资源推荐
资源详情
资源评论
收起资源包目录
基于51单片机的智能窗户控制系统的C语言代码.zip (80个子文件)
code
项目
工程
Objects
智能窗帘控制系统.build_log.htm 2KB
智能窗帘控制系统.hex 36KB
motor.obj 30KB
main.__i 124B
show.obj 29KB
adc.obj 19KB
iic.__i 121B
delay.__i 127B
adc.__i 121B
oled12864.obj 34KB
show.__i 124B
STARTUP._ia 94B
智能窗帘控制系统 332KB
SHT30.obj 25KB
readdata.__i 136B
key.__i 121B
oled12864.__i 139B
uart.obj 23KB
delay.obj 18KB
readdata.obj 22KB
ds1302.__i 130B
motor.__i 127B
uart.__i 124B
ds1302.obj 24KB
SHT30.__i 127B
STARTUP.obj 819B
智能窗帘控制系统.lnp 430B
uart_src.__i 136B
uart_src.obj 33KB
iic.obj 22KB
main.obj 50KB
key.obj 19KB
智能窗帘控制系统.uvgui.lenovo' 77KB
Target 1.BAT 971B
智能窗帘控制系统.uvopt 10KB
STARTUP.A51 6KB
Listings
readdata.lst 2KB
motor.lst 7KB
智能窗帘控制系统.m51 100KB
oled12864.lst 11KB
delay.lst 1KB
main.lst 18KB
uart_src.lst 7KB
key.lst 3KB
ds1302.lst 8KB
iic.lst 6KB
STARTUP.lst 14KB
adc.lst 2KB
uart.lst 3KB
SHT30.lst 6KB
show.lst 4KB
智能窗帘控制系统.uvproj 16KB
代码
iic.h 738B
readdata.h 213B
motor.c 3KB
SHT30.h 582B
key.c 732B
uart_src.c 4KB
ds1302.h 904B
oled12864.h 2KB
ds1302.c 5KB
uart.h 416B
key.h 599B
SHT30.c 3KB
motor.h 755B
show.h 407B
main.h 345B
STC8.h 19KB
oled12864.c 6KB
show.c 2KB
iic.c 3KB
adc.c 921B
delay.h 156B
uart.c 970B
readdata.c 307B
adc.h 577B
uart_src.h 325B
delay.c 259B
main.c 10KB
lib_12864.h 12KB
共 80 条
- 1
资源评论
生活家小毛.
- 粉丝: 6036
- 资源: 7289
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AI复活历史人物快速涨粉10w+附:不花1分钱无限使用可灵方法
- 【java毕业设计】动画门户网源码(完整前后端+说明文档+LW).zip
- Windows系统渗透工具(Windows-infiltration-tool).zip
- C#美容美发会员管理系统源码带数据库文档数据库 SQL2008源码类型 WinForm
- 贪吃蛇游戏(C++/C#)
- web渗透测试平台在docker上的搭建.zip
- JDK 22.0.2 (64-bit) for Windows 11: 步骤详述与配置指导
- Web渗透学习笔记.zip
- 数据来源于Kaggle,文件名为 cwurData.csv -预测大学得分
- 【java毕业设计】大学生户外运动管理系统源码(完整前后端+说明文档+LW).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功