久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
一個智能家居的控制單片機源碼
[打印本頁]
作者:
jingbin
時間:
2018-5-29 13:50
標題:
一個智能家居的控制單片機源碼
一個智能家居的控制,有興趣的可以練練手,里面有程序。
0.png
(56.39 KB, 下載次數: 112)
下載附件
2018-5-29 18:22 上傳
單片機源程序如下:
/*****************************
* @File Name: MENU.C
* @Author : JZHG
* @Version : V1.0
******************************/
#include "MENU.h"
#include "LCD12864.h"
#include "KEY.h"
#include "IRDA.h"
#include "DS1302.h"
#include "DS18B20.h"
#include "GTM900.h"
#include "JD.h"
#include "yanwu.h"
#include "Counter.h"
u8 Alarm_Temp=200;
/***********************************************************
* 函數名稱:MENU_X
* 函數功能:系統菜單函數
* 入口參數:無 出口參數:無
***********************************************************/
/*********************************
一級菜單
**********************************/
void MENU_A0( void )
{
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"★〓〓主菜單〓〓");
LCD12864_Show_hz(0,1,"1.家電 2.通信 ");
LCD12864_Show_hz(0,2,"3.設置 4.工具 ");
LCD12864_Show_hz(0,3,"5.娛樂 6.退出 ");
}
/*********************************
二級菜單
**********************************/
void MENU_B0( void )
{
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"〓〓 家電 〓〓");
LCD12864_Show_hz(0,1,"1.電燈 2.電冰箱");
LCD12864_Show_hz(0,2,"3.空調 4.飲水機");
LCD12864_Show_hz(0,3,"5.音箱 6.電風扇");
}
void MENU_B1( void )
{
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"〓〓 通信 〓〓");
LCD12864_Show_hz(0,1,"撥電話 掛電話");
LCD12864_Show_hz(0,2,"接電話 發短信");
LCD12864_Show_hz(0,3,"通訊錄 收件箱");
}
void MENU_B2( void )
{
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"〓〓 設置 〓〓");
LCD12864_Show_hz(0,1,"報警溫度 時間 ");
LCD12864_Show_hz(0,2,"報警號碼 鈴聲 ");
LCD12864_Show_hz(0,3,"模式設置 背光 ");
}
void MENU_B3( void )
{
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"〓〓 工具 〓〓");
LCD12864_Show_hz(0,1,"1.計算器 2.鬧鐘");
LCD12864_Show_hz(0,2,"3.收音機 4.秒表");
LCD12864_Show_hz(0,3,"5.手電筒 6.版本");
}
void MENU_B4( void )
{
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"〓〓 娛樂 〓〓");
LCD12864_Show_hz(0,1,"1.相機 2.音樂 ");
LCD12864_Show_hz(0,2,"3.小說 4.電影 ");
LCD12864_Show_hz(0,3,"5.圖庫 6.游戲 ");
}
/*********************************
三級菜單
**********************************/
void MENU_NULL( void )
{
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"尊敬的用戶您好!");
LCD12864_Show_hz(0,1,"該功能暫不支持 ");
LCD12864_Show_hz(0,2," 請按返回鍵 ");
LCD12864_Show_hz(0,3," 返回上一級 ");
}
/************************************
* 計算器菜單
*************************************/
void MENU_Counter( void )
{
LCD12864_Clear(); // 清屏函數
counter( ); // 計算器函數
}
/************************************
* 家電菜單
*************************************/
void MENU_JD( u8 num )
{
static state_value[5]={0}; // 保存狀態值
LCD12864_Clear(); // 清屏函數
switch ( num )
{
case 0:LCD12864_Show_hz(0,0,"〓〓 電燈 〓〓");break;
case 1:LCD12864_Show_hz(0,0,"〓 電冰箱 〓 ");break;
case 2:LCD12864_Show_hz(0,0,"〓〓 空調 〓〓");break;
case 3:LCD12864_Show_hz(0,0,"〓 飲水機 〓 ");break;
case 4:LCD12864_Show_hz(0,0,"〓〓 音箱 〓〓");break;
case 5:LCD12864_Show_hz(0,0,"〓 電風扇 〓 ");break;
default: break;
}
LCD12864_Show_hz(0,1,"1.開啟 2.關閉 ");
LCD12864_Show_hz(0,2,"按返回鍵:返回 ");
if ( state_value[num] == 1 )LCD12864_Show_hz(0,3,"當前狀態:開啟 ");
else LCD12864_Show_hz(0,3,"當前狀態:關閉 ");
while ( IRDA_key != 12)
{
IRDA_key=255;
while( IRDA_key==255 );
if ( IRDA_key==1 )
{
JD_Drive( num ,ON); // 家電驅動函數
LCD12864_Show_hz(5,3,"開啟");
state_value[num]=1;
}
else if ( IRDA_key==2)
{
JD_Drive( num ,OFF); // 家電驅動函數
LCD12864_Show_hz(5,3,"關閉");
state_value[num]=0;
}
}
}
void MENU_Version( void )
{
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"智能家居管理系統");
LCD12864_Show_hz(0,1,"制作人:劉清泉 ");
LCD12864_Show_hz(0,2," 雙 鋒 ");
LCD12864_Show_hz(0,3,"版 本:V1.0 ");
}
void MENU_CallON( void )
{
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"撥號......");
Call(CALLON); // 撥號
LCD12864_Show_hz(0,0,"撥號: ");
LCD12864_Show_hz(2,0,CALL_ON+3);
LCD12864_Show_hz(0,1,"成功 ^_^");
LCD12864_Show_hz(0,2," 請按返回鍵 ");
LCD12864_Show_hz(0,3," 返回 ");
}
void MENU_CallOFF( void )
{
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"掛電話中......");
Call(CALLOFF); // 撥號
LCD12864_Show_hz(0,0,"掛機: ");
LCD12864_Show_hz(2,0,CALL_ON+3);
LCD12864_Show_hz(0,1,"成功 ^_^");
LCD12864_Show_hz(2,2,"請按返回鍵");
LCD12864_Show_hz(3,3,"返回");
}
void MENU_GetCall( void )
{
LCD12864_Clear(); // 清屏函數
if ( USART_flag )
{
USART_flag=0;
LCD12864_Show_hz(0,0,"連接中......");
Call(GETCALL); // 撥號
LCD12864_Show_hz(0,0,"連接: ");
LCD12864_Show_hz(2,0,CALL_ON+3);
LCD12864_Show_hz(0,1,"成功 ^_^");
Delay_nms(500);
}
else
{
LCD12864_Show_hz(0,0,"尊敬的用戶您好!");
LCD12864_Show_hz(0,1,"沒收到來電!!");
}
LCD12864_Show_hz(2,2,"請按返回鍵");
LCD12864_Show_hz(3,3,"返回");
}
void MENU_News( void )
{
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"發送短信。。。");
Send_ENNews( ); // 發送英文短信
if ( USART_flag )
{
USART_flag = 0;
LCD12864_Show_hz(0,0,"發送短信成功 ^_^");
}
else
{
LCD12864_Show_hz(0,0,"發送短信失敗....");
}
LCD12864_Show_hz(2,2,"請按返回鍵");
LCD12864_Show_hz(3,3,"返回");
}
//void MENU_SetNewsNum( void )
//{
// u8 cnt=0;
//
// IRDA_key=255;
// LCD12864_Clear(); // 清屏函數
// LCD12864_Show_hz(0,0,"請輸入手機號碼");
// IRDA_key=255;
// while(IRDA_key==255);
// LCD12864_SetXY(0,2); // LCD設置坐標函數
// while(IRDA_key!=12) //不是返回鍵
// {
// if(IRDA_key<10&&cnt<11) //11位手機號碼
// {
//
// NEWS_LENGT[(cnt++)+3]=IRDA_key+48;
// LCD12864_Write_Data( LCD12864_DAT,IRDA_key+48);
// }
// IRDA_key=255;
// while(IRDA_key==255); //等待有鍵按下
// }
// IRDA_key=255;
// LCD12864_Show_hz(0,2,NEWS_LENGT);
// LCD12864_Show_hz(2,3,"輸入成功!");
// Delay_nms(500);
//}
void MENU_SetTime( void )
{
u8 temp=0,i, cnt=0;
for(i=6;i>0;i--) //星期不設置
{
LCD12864_Clear(); // 清屏函數
switch(i)
{
case 6:LCD12864_Show_hz(0,0,"請輸入年:");break;
case 5:LCD12864_Show_hz(0,0,"請輸入月:");break;
case 4:LCD12864_Show_hz(0,0,"請輸入日:");break;
case 3:LCD12864_Show_hz(0,0,"請輸入時:");break;
case 2:LCD12864_Show_hz(0,0,"請輸入分:");break;
case 1:LCD12864_Show_hz(0,0,"請輸入秒:");break;
default:break;
}
temp=0; // 清零
LCD12864_SetXY(0,2); // LCD設置坐標函數
while(cnt<2) //輸入的是兩位數
{
IRDA_key=255;
while(IRDA_key==255); //等待有鍵按下
temp=(temp*10)+IRDA_key;
LCD12864_Write_Data( LCD12864_DAT, IRDA_key+48);
cnt++;
}
temp = ((temp /10)<<4) +(temp%10); // 轉化BCD碼
DS1302_WriteByteToAddr( DS1302_CONTROL_WRITE, WP_STOP );// 取消寫保護
switch(i)
{
case 1: DS1302_WriteByteToAddr( DS1302_SECOND_WRITE, temp);break; // 調節的時間
case 2: DS1302_WriteByteToAddr( DS1302_MINUTE_WRITE, temp);break; // 調節的時間
case 3: DS1302_WriteByteToAddr( DS1302_HOUR_WRITE, temp);break; // 調節的時間
case 4: DS1302_WriteByteToAddr( DS1302_DATE_WRITE, temp);break; // 調節的時間
case 5: DS1302_WriteByteToAddr( DS1302_MONTH_WRITE, temp);break; // 調節的時間
case 6: DS1302_WriteByteToAddr( DS1302_YEAR_WRITE, temp);break; // 調節的時間
default: break;
}
DS1302_WriteByteToAddr( DS1302_CONTROL_WRITE, WP_START );//
IRDA_key=255;
while(IRDA_key==255); //等待有鍵按下
cnt=0;
}
IRDA_key=255;
LCD12864_Show_hz(2,3,"修改成功!");
}
void MENU_SetAlarmTemp( void )
{
u8 temp=0;
LCD12864_Clear(); // 清屏函數
LCD12864_Show_hz(0,0,"請輸入報警溫度");
IRDA_key=255;
while(IRDA_key==255);
LCD12864_SetXY(0,2); // LCD設置坐標函數
while(IRDA_key!=12) //不是確認鍵
{
temp=(temp*10)+IRDA_key;
LCD12864_Write_Data( LCD12864_DAT,IRDA_key+48);
IRDA_key=255;
while(IRDA_key==255); //等待有鍵按下
}
IRDA_key=255;
Alarm_Temp=temp; //更新報警溫度
LCD12864_Show_hz(2,3,"修改成功!");
}
/***********************************************************
* 函數名稱:MENU_ShowTime
* 函數功能:顯示時間函數
* 入口參數:無 出口參數:無
***********************************************************/
void MENU_ShowTime( void )
{
u8 T[8], D[8];
DS1302_ReadTime( );// DS1302讀取時間保存在時間結構體中
T[0]= CurrentTime.Hour >>4; // 時
T[1]= CurrentTime.Hour &0x0f;
T[2]= -3;
T[3]= CurrentTime.Minute >>4; // 分
T[4]= CurrentTime.Minute &0x0f;
T[5]= -3;
T[6]= CurrentTime.Second >>4; // 秒
T[7]= CurrentTime.Second &0x0f;
D[0]= CurrentTime.Year >>4; // 年
D[1]= CurrentTime.Year &0x0f;
D[2]= -3;
D[3]= CurrentTime.Month >>4; // 月
D[4]= CurrentTime.Month &0x0f;
D[5]= -3;
D[6]= CurrentTime.Date >>4; // 日
D[7]= CurrentTime.Date &0x0f;
// D[8]= CurrentTime.Week&0x0f; // 星期
LCD12864_Show_hz(0,2,"日期:"); // LCD顯示字符函數
LCD12864_Show_hz(0,3,"時間:"); // LCD顯示字符函數
// LCD12864_ShowChar(2,0,"星期:"); // LCD顯示字符函數
LCD12864_ShowNumS(3,2,8,D); // 顯示日期
LCD12864_ShowNumS(3,3,8,T); // 顯示時間
// LCD12864_ShowNum( 2, 3, D[8]); // LCD顯示一位數字函數
}
/***********************************************************
* 函數名稱:MENU_ShowTemperature
* 函數功能:處理顯示溫度函數
* 入口參數: 無 出口參數:無
***********************************************************/
void MENU_ShowTemperature(void)
{
LCD12864_Show_hz(0,0,"智能家居管理系統");
LCD12864_Show_hz(0,1,"環境溫度:");
Read_18B20();
LCD12864_SetXY(5,1); // LCD設置坐標函數
LCD12864_Write_Data( LCD12864_DAT,(zhengshu%100)/10+48);
LCD12864_Write_Data( LCD12864_DAT,zhengshu%10+48);
LCD12864_Write_Data( LCD12864_DAT,'.');
LCD12864_Write_Data( LCD12864_DAT,xiaoshu1+48);
LCD12864_Show_hz(7,1,"℃");
while(zhengshu>=Alarm_Temp)
{
LCD12864_Clear(); // LCD清除文本函數
LCD12864_Show_hz(0,0,"發送短信....");
Delay_nms(500);
Send_CHNews(); // 發送中文短信
if ( USART_flag )
{
USART_flag = 0;
LCD12864_Show_hz(0,0,"發送短信成功 ^_^");
}
Read_18B20();
}
}
/***********************************************************
* 函數名稱:MENU_Yanwu
* 函數功能:處理煙霧傳感器函數
* 入口參數: 無 出口參數:無
***********************************************************/
void MENU_YANWU( void )
{
YanWu(); //
}
/***********************************************************
* 函數名稱:MENU_FB
* 函數功能:菜單反白函數
* 入口參數:loca, mode 出口參數:無
***********************************************************/
void MENU_FB(u8 loca,u8 mode)
{
u8 temp[6]={0};
if ( mode ) // mode=1 反白
{
temp[loca]=0xff;
LCD12864_FB(0,1,temp[0],8); LCD12864_FB(4,1,temp[1],8);
LCD12864_FB(8,0,temp[2],8); LCD12864_FB(12,0,temp[3],8);
LCD12864_FB(8,1,temp[4],8); LCD12864_FB(12,1,temp[5],8);
}
else
{
temp[loca]=0x00;
LCD12864_FB(0,1,temp[0],8); LCD12864_FB(4,1,temp[1],8);
LCD12864_FB(8,0,temp[2],8); LCD12864_FB(12,0,temp[3],8);
LCD12864_FB(8,1,temp[4],8); LCD12864_FB(12,1,temp[5],8);
}
}
/***********************************************************
* 函數名稱:System_Init
* 函數功能:系統初始化函數
* 入口參數:無 出口參數:無
***********************************************************/
void System_Init( void )
{
USART_Init(); // 串口初始化函數
KEY_Init( ); // 按鍵初始化函數
Red_Init();
DS1302_Init(); // DS1302初始化函數
Read_18B20();
LCD12864_Init( ); // LCD初始化函數
LCD12864_Clear_GDRAM( ); // 擴充指令清屏函數
LCD12864_Clear(); // 清屏函數
}
/***********************************************************
* 函數名稱:MENU_KEYHandle
* 函數功能:菜單按鍵處理函數
* 入口參數:無 出口參數:無
***********************************************************/
void MENU_Handle( void )
{
u8 key;
u8 caidan[3]={0};
u8 caidan_ji=0;
u8 flag=0; // 按鍵標志
MENU_YANWU( ); // 煙霧傳感器
MENU_ShowTemperature();// 處理顯示溫度函數
MENU_ShowTime( ); // 顯示時間菜單函數
if ( IRDA_key==17 )
{
flag=1;
LCD12864_Clear(); // 清屏函數
MENU_A0();
}
else flag=0;
while(flag)
{
while(1)
{
key=KEY_Scan();
if((key==1)||(IRDA_key==10))
{
IRDA_key = 255;
if(caidan[caidan_ji]>0)
caidan[caidan_ji]--;
else
caidan[caidan_ji]=5;
}
if((key==2)||(IRDA_key==11))
{
IRDA_key = 255;
if(caidan[caidan_ji]<5)
caidan[caidan_ji]++;
else
caidan[caidan_ji]=0;
}
if((key==3)||(IRDA_key==13))
{
if(caidan_ji<2)
caidan_ji++;
}
if((key==4)||(IRDA_key==12))
{
if(caidan_ji>0)
caidan_ji--;
}
if((key==3)||(key==4)||(IRDA_key==12)||(IRDA_key==13))
{ IRDA_key = 255; break;}
if ( (caidan_ji!=2) )
MENU_FB(caidan[caidan_ji], 1 );
}
switch(caidan_ji)
{
case 0:
{
MENU_A0();
caidan[1]=0;
}break;
case 1:
{
switch(caidan[0])
{
case 0 :
{
MENU_FB(caidan[1], 1);
MENU_B0();
}break;
case 1 :
{
MENU_FB(caidan[1], 1);
MENU_B1();
}break;
case 2 :
{
MENU_FB(caidan[1], 1);
MENU_B2();
}break;
case 3 :
{
MENU_FB(caidan[1], 1);
MENU_B3();
}break;
case 4 :
{
MENU_FB(caidan[1], 1);
MENU_B4();
} break;
case 5 :
{
flag=0;
MENU_FB(caidan[1], 0);
}break;
default: break;
}
}break;
case 2:
{
switch (caidan[0])
{
case 0:
{
switch(caidan[1])// 三級菜單
{
case 0:MENU_JD(0);break;
case 1:MENU_JD(1);break;
case 2:MENU_JD(2);break;
case 3:MENU_JD(3);break;
case 4:MENU_JD(4);break;
case 5:MENU_JD(5);break;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
智能家居.zip
(392.5 KB, 下載次數: 297)
2018-5-29 13:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
myaspx
時間:
2018-6-19 14:53
很不錯!!!!
作者:
lcclzy
時間:
2018-9-3 19:52
先下載了,參考一下,謝謝分享
作者:
yjlei
時間:
2018-9-5 21:13
學習學習,謝謝
作者:
WFX777888
時間:
2018-11-1 18:28
謝謝分享資料
作者:
kaiyazn
時間:
2019-10-21 11:04
很好,謝謝分享
作者:
loyen
時間:
2020-2-19 22:29
這個智能家居可以很有用
作者:
loyen
時間:
2020-2-19 22:29
學習到了 謝謝分享
作者:
cishfh
時間:
2020-4-15 14:25
好的謝謝,解決了我的問題
作者:
ltachi
時間:
2020-4-29 09:32
學習學習,謝謝
作者:
Shitianz
時間:
2020-5-27 09:17
感謝分享
作者:
1314love
時間:
2023-4-12 11:12
有PCB圖和原理圖嗎?
作者:
lantian899
時間:
2023-9-12 15:06
學習了,也想自己搞一個
作者:
keilstc
時間:
2025-5-11 15:30
謝謝分享,學習一下。
作者:
dyx811
時間:
2025-5-11 16:02
這種模式第一次見,是什么編程軟件生成的圖表呢
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
av在线播放网址
|
黄色片免费看
|
国产九九热
|
成人国产网站
|
免费黄色小视频
|
成人黄色小视频
|
亚洲视频精品
|
97色综合
|
国产999视频
|
色综合色综合
|
黄色大片免费观看
|
欧美日本在线观看
|
亚洲另类色图
|
黄色成人在线视频
|
久久爱影视i
|
免费看黄色大片
|
欧美视频在线观看免费
|
成人毛片100免费观看
|
国产精品天堂
|
国产精品自拍小视频
|
久久手机视频
|
日韩一级免费视频
|
欧美一区在线视频
|
深夜福利视频网站
|
欧美成年人视频
|
亚洲国产一区在线观看
|
欧美精品www
|
亚洲激情片
|
日韩在线免费播放
|
国产天堂网
|
欧美成人综合
|
国产在线观看网站
|
日韩在线视频免费观看
|
国产精品手机在线
|
欧美亚洲一区二区三区
|
亚洲天堂av在线
|
欧美黄色一级
|
不卡av网站
|
小sao货撅起屁股扒开c微博
|
国产精品久久久久久久久
|
亚洲精品色图
|