《實(shí)訓(xùn)報(bào)告-智能家居實(shí)訓(xùn)報(bào)告模板.doc》由會員分享,可在線閱讀,更多相關(guān)《實(shí)訓(xùn)報(bào)告-智能家居實(shí)訓(xùn)報(bào)告模板.doc(17頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
實(shí) 訓(xùn) 報(bào) 告
嵌入式智能家居實(shí)訓(xùn)報(bào)告
班級學(xué)號 13391–24
姓 名 張德進(jìn)
實(shí)訓(xùn)地點(diǎn) E501
指導(dǎo)教師 龐春輝
完成日期 2015 年 12月 20日
一、實(shí)訓(xùn)目的
(1)具有閱讀程序能力,查閱相關(guān)資料能力,掌握程序修改能力
(2)具備編寫代碼能力,掌握程序分析,編寫,調(diào)試能力。
二、實(shí)訓(xùn)環(huán)境
校內(nèi)環(huán)境:E501
校外環(huán)境:工作單位
以校內(nèi)實(shí)訓(xùn)為主,校外實(shí)訓(xùn)為輔。
(1)硬件設(shè)備
計(jì)算機(jī)。
(2)軟件
Eclipse。
3、 技術(shù)介紹
隨著社會、經(jīng)濟(jì)水平的發(fā)展,人們對家居品質(zhì)的要求也越來越高,要求居住環(huán)境舒適化、安全化,家居生活人性化、智能化。智能家居是3C技術(shù)(即)向傳統(tǒng)家電產(chǎn)業(yè)滲透發(fā)展的必然結(jié)果。從社會背景的層面來看,近年來信息化的高度進(jìn)展,通訊的自由化與高層次化、業(yè)務(wù)量的急速增加與人類對工作環(huán)境的安全性、舒適性、效率性要求的提高,造成家居智能化的需求大為增加;此外在科學(xué)技術(shù)方面,由于計(jì)算機(jī)控制技術(shù)的發(fā)展與電子信息通訊技術(shù)的成長,促成了智能家居的誕生。現(xiàn)在的中國正迎來一個(gè)"數(shù)字城市"、"數(shù)字社區(qū)"建設(shè)與發(fā)展的熱潮,3G技術(shù)和互聯(lián)網(wǎng)應(yīng)用對智能家居的發(fā)展也起到很重要的推動(dòng)作用,智能家居的日漸興起影響到人們生活的方方面面,改變了人們的生活習(xí)慣,提高了人們的生活質(zhì)量,促使家庭實(shí)現(xiàn)了生活現(xiàn)代化,給人們的家居生活帶來了全新的感受,它必將成為一種發(fā)展趨勢。
目前市場上出現(xiàn)得智能家居控制系統(tǒng)主要有:
(1)X-10系統(tǒng)(美國),該系統(tǒng)是利用電力線作為網(wǎng)絡(luò)平臺,采用集中控制方式實(shí)現(xiàn)。這套系統(tǒng)的功能較為強(qiáng)大,與其它家居控制系統(tǒng)如ABB、C_BUS等比起來更容易接收,使用也相對簡單。因?yàn)閷?shí)現(xiàn)同樣的功能,X-10家居控制系統(tǒng)是利用220v電力線將發(fā)射器發(fā)出的X-10信號傳送給接收器從而實(shí)現(xiàn)智能化的控制,因此采用這套系統(tǒng)不需要額外的布線,這也是這套系統(tǒng)的最大的一個(gè)優(yōu)勢,因?yàn)槠渌到y(tǒng)基本上都需要布低壓線,在墻上或地面開槽、鉆孔,施工難度大、費(fèi)用高、工期長。但由于缺乏在國內(nèi)市場推廣的條件且價(jià)格昂貴,該系統(tǒng)在國內(nèi)應(yīng)用極少。
(2)EIB系統(tǒng)(德國),該系統(tǒng)采用預(yù)埋總線及中央控制方式實(shí)現(xiàn)控制功能。但由于其工程要求復(fù)雜嚴(yán)苛,并且價(jià)格較高,因此一直無法打開國內(nèi)市場。
(3)8X系統(tǒng)(新加坡),該系統(tǒng)采用預(yù)處理總線跟集中控制方式來實(shí)現(xiàn)功能。它的優(yōu)點(diǎn)在于利用的產(chǎn)品對系統(tǒng)進(jìn)行擴(kuò)展,系統(tǒng)較為成熟,比較適合中國國情。但是由于系統(tǒng)架構(gòu)、靈活性及產(chǎn)品價(jià)格等方面還難以達(dá)到要求,所以目前在國內(nèi)還較少應(yīng)用。 對于我國的智能家居進(jìn)展目前,主要采用國外的一些技術(shù)產(chǎn)品,但也有一些企業(yè)推出了自己的產(chǎn)品,
主要有: (1)e家庭(海爾),該系列產(chǎn)品以海爾電腦作為控制中心,各種網(wǎng)絡(luò)家電作為終端設(shè)備,海爾移動(dòng)電話作為移動(dòng)數(shù)字控制中心。海爾在技術(shù)上同微軟合作,利用微軟的Windows Me技術(shù)和海爾的網(wǎng)絡(luò)家電,使“e家庭”已具雛形,已推出了網(wǎng)絡(luò)洗衣機(jī)、網(wǎng)絡(luò)冰箱、網(wǎng)絡(luò)空調(diào)、網(wǎng)絡(luò)微波爐等一系列網(wǎng)絡(luò)家電。 (2)e-home數(shù)字家園(清華同方),該智能家居控制系統(tǒng)是專門針對中國家庭設(shè)計(jì)的,遵
循國際技術(shù)標(biāo)準(zhǔn),采用嵌入式軟、硬件技術(shù),提供網(wǎng)絡(luò)、網(wǎng)絡(luò)節(jié)點(diǎn)及末端設(shè)備。產(chǎn)品以功能模塊開發(fā)為主,基于國外成熟的智能家居標(biāo)準(zhǔn)之上。其智能家居控制系統(tǒng)主要有以下三個(gè)部分: A系列:遵循EIB協(xié)議的家庭控制產(chǎn)品,適用于中高檔住宅區(qū)。 B系列:遵循X-10協(xié)議的家庭控制產(chǎn)品,適用于中檔住宅區(qū)。 易家三代:配電箱集中安裝式家庭控制產(chǎn)品。 國內(nèi)各大軟、硬件機(jī)構(gòu)正在積極的研制、開發(fā)更為符合市場的智能化家居設(shè)備,以解決當(dāng)前智能化產(chǎn)品實(shí)用性差、使用復(fù)雜及產(chǎn)品價(jià)格昂貴等缺點(diǎn),而技術(shù)創(chuàng)新性也逐步向國際先進(jìn)水平靠攏,這樣的未來值得期待。 4、存在的不足或有待深入研究解決的問題; ①不足之處:由于我國的智能家居相對于國外起步較晚, 還缺乏統(tǒng)一明確的國際標(biāo)準(zhǔn),許多公司開發(fā)出的產(chǎn)品都是基于自己組的網(wǎng)絡(luò)和信息交換協(xié)議,很多產(chǎn)品是針對特定的組網(wǎng)環(huán)境開發(fā)的,部分核心技術(shù)沒有對外公布,技術(shù)復(fù)雜,直接導(dǎo)致了使用范圍的局限性。再者,缺乏對應(yīng)的第三方產(chǎn)品,各個(gè)接入設(shè)備之間不能兼容,互操作性差,不利于產(chǎn)品的擴(kuò)充,因而進(jìn)一步局限了產(chǎn)品的發(fā)展。再加上,有的系統(tǒng)成本過高,嚴(yán)重影響了產(chǎn)品的普及。因此設(shè)計(jì)一個(gè)符合國家國情和規(guī)范的集遠(yuǎn)程控制和本地控制為一體的智能家居控制系統(tǒng)是非常具有現(xiàn)實(shí)意義的,且勢在必行。 ②主要問題:根據(jù)前面提到的一些調(diào)查結(jié)果及數(shù)據(jù)可以看出,雖然目前智能家居系統(tǒng)有了一定的發(fā)展,并且市場上也開始出現(xiàn)相應(yīng)的產(chǎn)品,但從總體的發(fā)展來看,不容樂觀,特別是統(tǒng)一標(biāo)準(zhǔn)和權(quán)威產(chǎn)品的缺乏嚴(yán)重影響了家居智能化的發(fā)展。隨著科技的提高,經(jīng)濟(jì)的發(fā)展,人們的物質(zhì)生活水平的提高,對家居環(huán)境的要求也越來越高,作為家居智能化的核心部分——智能家居控制系統(tǒng)也越發(fā)顯得重要。家居智能化控制的開發(fā)和建設(shè)是未來國家、經(jīng)濟(jì)發(fā)展的必然趨勢。
智能家居控制器可以為系統(tǒng)提供智能控制方案,使住戶的控制更便捷,更高效,更能為家庭的日?;顒?dòng)節(jié)約不必要的能耗。而且在現(xiàn)在這個(gè)注重綠色環(huán)保的世界里,智能的為住戶控制好空氣的濕度、溫度等,檢查分析空氣成分,讓住戶安心入住。同時(shí),智能家居控制器可以根據(jù)住戶的要求調(diào)整方案,加強(qiáng)緊急處理,危機(jī)救護(hù)等急救控制,充分達(dá)到只要是“用戶想要的,就是我們追求的”宗旨。
經(jīng)過2013年的哥本哈根會議,我國更加明確了節(jié)能減排,綠色建筑的目標(biāo),這就使住宅智能化凸顯出了其合理規(guī)劃,最大限度的節(jié)約能源的優(yōu)勢。如果我國大力推廣綠色建筑,僅在鋪設(shè)智能化系統(tǒng)上所需的新設(shè)備的生產(chǎn)上就有2000億到3000億人民幣的新市場。而中國“智能家居網(wǎng)絡(luò)”必在“智能化住宅”的框架下形成一個(gè)新型IT產(chǎn)業(yè),而這一切必將對未來幾十年我國房地產(chǎn)的健康有效發(fā)展起著深遠(yuǎn)的影響。 作為智能家居的核心系統(tǒng)的智能家居的控制系統(tǒng),它的設(shè)計(jì)功能的完善必將推動(dòng)住宅智能化的發(fā)展。而系統(tǒng)功能的集成化、用戶使用的傻瓜化以及市場的平民化將是智能家居控制器的發(fā)展趨勢,系統(tǒng)也將逐步邁向綠色化。最終,我想全人類的夢想是智能家居控制系統(tǒng)將囊括所有的家事雜物,讓我們真正的享受舒適溫馨的家庭生活。
4、 實(shí)訓(xùn)內(nèi)容
#include
#include
#include "lpc11xx.h"
#include "clkconfig.h"
#include "gpio.h"
#include "uart.h"
#include "timer32.h"
#include "ssp.h"
#include "i2c.h"
#include "wdt.h"
#include "adc.h"
#include "rom_drivers.h"
#include "seg7led.h"
#include "oled2864.h"
#include "light.h"
#include "acc.h"
#include "key.h"
#include "rfid.h"
#include "tools.h"
#include "spi_uart.h"
#include "temp_hum.h"
#include "collect_data.h"
#include "led_spk_fan.h"
#include "menu.h"
extern void LED_Test(void);
extern void Speaker_Test(void);
extern void Fan_Test(void);
extern void ADC_Test(void);
extern void CAN_Test_ROM(void);
extern void CAN_Test(void);
#define ID_NUM 2
#define ntype 1
#define itype 2
#define rtype 4
#define transhead 0xaa
#define LED_ON 0
#define LED_OFF 1
#define FAN_ON 2
#define FAN_OFF 3
#define LED7_ON 4
#define LED7_OFF 5
#define SPEAKER_ON 6
#define SPEAKER_OFF 7
#define ANSWER 8
volatile uint32_t counter1 = 0;
volatile uint32_t counter2 = 0;
static const unsigned char aucCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40
};
static const unsigned char aucCRCLo[] = {
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7,
0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E,
0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9,
0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC,
0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32,
0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D,
0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38,
0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF,
0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1,
0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4,
0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB,
0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA,
0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,
0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97,
0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E,
0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89,
0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,
0x41, 0x81, 0x80, 0x40
};
typedef struct //數(shù)據(jù)封裝
{
uint8_t head; //數(shù)據(jù)頭
uint8_t dev_no; //房間號
uint8_t type; //數(shù)據(jù)類型
uint8_t len; //數(shù)據(jù)長度
uint8_t ndata;
uint8_t temp[2];
uint8_t hum[2];
uint8_t light[2];
uint8_t adc[2];
uint8_t acc[3];
uint8_t rfid[4];
uint_least16_t check;
}transdata;
int32_t xoff = 0; //初始化三軸信息
int32_t yoff = 0;
int32_t zoff = 0;
int8_t x = 0;
int8_t y = 0;
int8_t z = 0; //初始化三軸信息
void SysTick_Handler(void) //線程
{
static uint32_t Tick=0;
static uint8_t cnt=0;
Tick ++;
if(Tick == 500)
{
cnt ++;
cnt &= 0x1f;
}
else if(Tick >= 1000)
{
counter1++;
counter2++;
Tick = 0;
}
}
void collect_data(uint8_t *temp,uint8_t *hum,uint8_t *light) //顯示溫濕度和亮度函數(shù)
{
uint8_t i;
char buf[16];
uint32_t light_data;
i = Read_Temp_Hum(temp, hum); //采集溫濕度
I2CInit(I2CMASTER, 0); //初始化亮度函數(shù)
light_init();
light_enable();
light_setRange(LIGHT_RANGE_4000); //初始化亮度函數(shù)
light_data = light_read(); //采集亮度
light[0] = (light_data >> 8); //左移八位,使光亮度值在整數(shù)位上
light[1] = (light_data & 0xff);
if(i != 0)
{
OLED_ClearScreen(); //清屏
snprintf(buf, 16, "Temp: %d.%d ", temp[0], temp[1]);
OLED_DisStrLine(1, 0, (uint8_t *)buf); //顯示溫度
snprintf(buf, 16, "Hum: %d.%d ", hum[0], hum[1]);
OLED_DisStrLine(2, 0, (uint8_t *)buf); //顯示濕度
snprintf(buf, 20, "Light: %d ", light_data);
OLED_DisStrLine(3, 0, (uint8_t *)buf); //顯示亮度
if((temp[0]>30)) //判斷溫度高位是否超過閥值
{
GPIOSetValue(PORT3, 0, 0); //Turn on led1
speaker_op(1); //Turn on speaker
GPIOSetValue(PORT0, 2, 0); // Turn on Fan
}
if((temp[0]<30))
{
GPIOSetValue(PORT0, 2, 1); // Turn off Fan
GPIOSetValue(PORT3, 0, 1); //Turn off led1
speaker_op(0); //Turn off speaker
}
if(light_data < 100) //判斷是否需要開燈
{
GPIOSetValue(PORT3, 1, 0); //turn on led2
}
else
{
GPIOSetValue(PORT3, 1, 1); //turn off led2
}
}
}
void adc_set(uint8_t *adc) //顯示電壓信息函數(shù)
{
char buf[16];
uint32_t adv;
float vol;
ADCInit(ADC_CLK); //初始化電壓函數(shù)
adv = ADCRead(0); //獲得電壓信息
vol = adv*3.3/1023; //轉(zhuǎn)化電壓信息
adv = vol*10;
snprintf(buf, 21, "ADC: %d.%dV ", adv/10, adv%10);
adc[0] = adv/10;
adc[1] = adv%10;
OLED_DisStrLine(4, 0, (uint8_t *)buf); //顯示電壓信息
}
void acc_set_init(void) //初始化三軸函數(shù)
{
I2CInit(I2CMASTER, 0);
acc_init();
acc_read(&x, &y, &z);
xoff = 0-x;
yoff = 0-y;
zoff = 0-z;
}
void acc_set(uint8_t *abc) //顯示三軸信息函數(shù)
{
char buf[16];
acc_read(&x, &y, &z); //獲得三軸信息
x = x+xoff; //轉(zhuǎn)化三軸信息
y = y+yoff;
z = z+zoff; //轉(zhuǎn)化三軸信息
abc[0] = x;
abc[1] = y;
abc[2] = z;
snprintf(buf, 20, "Acc x: %d ", x);
OLED_DisStrLine(5, 0, (uint8_t *)buf); // 顯示X軸信息
snprintf(buf, 20, "Acc y: %d ", y);
OLED_DisStrLine(6, 0, (uint8_t *)buf); // 顯示Y軸信息
snprintf(buf, 20, "Acc z: %d ", z);
OLED_DisStrLine(7,0,(uint8_t*)buf); // 顯示Z軸信息
if(x > 30 || x < -30 || y > 30 || y < -30 || z > 30 || z < -30) //判斷是否超過設(shè)定的閥值
{
speaker_op(1); //turn on spear
GPIOSetValue(PORT3, 0, 0); //Turn on led1
}
else
{
speaker_op(0); //Turn off speaker
GPIOSetValue(PORT3, 0, 1); //Turn off led1
}
}
void send_data(uint8_t *data, uint8_t len) //發(fā)送信息函數(shù)
{
uint8_t i = 0,buf[16];
for(i = 0;i> 8;
buf[16] = data.check & 0xff;
send_data(buf,17); //發(fā)送信息和CRC檢驗(yàn)位
}
if(data.type == rtype)
{
buf[2] = data.type;
buf[3] = 4;
buf[4] = data.rfid[0];
buf[5] = data.rfid[1];
buf[6] = data.rfid[2];
buf[7] = data.rfid[3];
data.check = usMBCRC16(buf,8); //根據(jù)發(fā)送數(shù)據(jù)設(shè)置CRC檢驗(yàn)位
buf[8] = data.check >> 8;
buf[9] = data.check & 0xff;
send_data(buf,10); //發(fā)送信息和CRC檢驗(yàn)位
}
if(data.type == ntype)
{
buf[2] = data.type;
buf[3] = 1;
buf[4] = data.ndata;
data.check = usMBCRC16(buf,5); //根據(jù)發(fā)送數(shù)據(jù)設(shè)置CRC檢驗(yàn)位
buf[5] = data.check >> 8;
buf[6] = data.check & 0xff;
send_data(buf,7); //發(fā)送信息和CRC檢驗(yàn)位
}
}
Led7_On(void) //數(shù)碼管顯示函數(shù)
{
uint32_t i = 0;
while(i < 10)
{
Seg7Led_Put(i);
i++;
delay_ms(1000);
}
}
int main(void)
{
uint8_t rd[32] = {0};
uint8_t *p;
volatile uint8_t i = 0;
uint8_t k;
transdata data;
uint_least16_t ccheck;
uint32_t key;
p = rd;
SystemInit(); //初始化M0設(shè)備
GPIOInit(); // Enables clock for GPIO
CLKOUT_Setup(CLKOUTCLK_SRC_MAIN_CLK); //set clock source :main clock
LPC_IOCON->PIO0_1 &= ~0x07;
LPC_IOCON->PIO0_1 |= 0x01; /* CLK OUT */
GPIOSetDir(PORT3, 0, 1); // Set PIO3_0 to output
GPIOSetValue(PORT3, 0, 1); // PIO3_0 output 1, close LED1
GPIOSetDir(PORT3, 1, 1); // Set PIO3_1 to output
GPIOSetValue(PORT3, 1, 1); // PIO1_1 output 1, close LED2
GPIOSetDir(PORT0, 2, 1); // Set PIO0_2 to output
GPIOSetValue(PORT0, 2, 1); // PIO0_2 output 1, close FAN
LPC_IOCON->R_PIO1_1 &= ~0x07;
LPC_IOCON->R_PIO1_1 |= 0x01;
GPIOSetDir(PORT1, 1, 1); // Set PIO3_2 to output
GPIOSetValue(PORT1, 1, 1); // PIO3_2 output 1, Speaker turn off
Seg7Led_Init(); //初始化數(shù)碼管
Seg7Led_Put( ); // Output
SysTick_Config(48000);
GPIOSetValue(PORT3, 0, 0); // PIO3_0 output 0, Turn on LED1
GPIOSetValue(PORT3, 1, 0); // PIO3_1 output 0, Turn on LED2
delay_ms(200);
GPIOSetValue(PORT3, 0, 1); // PIO3_0 output 1, Turn off LED1
GPIOSetValue(PORT3, 1, 1); // PIO3_1 output 1, Turn off LED2
SPI_IOConfig(0);
SPI_Init(0, 8, 2); //初始化M0板的顯示屏
OLED_Init_I();
UARTInit(115200); //初始化串口
NVIC_SetPriority(UART_IRQn, 2);
printf("\r\n\r\nFS_11C14 Main Menu\r\n");
delay_ms(250);
SPI_IOConfig(1); /* 初始化zigbee發(fā)送設(shè)備 */
SPI_Init(1, 8, 2);
SPI752_Init(1, 115200); /* 初始化zigbee發(fā)送設(shè)備 */
for(k =0 ; k<80 ; k++) //加延遲
delay_ms(200);
data.head = transhead; //數(shù)據(jù)頭
data.dev_no = ID_NUM; //設(shè)備號
data.type = ntype; //數(shù)據(jù)類型
data.ndata = 0x01; //設(shè)備已開啟的信息值
data_pakget_trans(data); //發(fā)送設(shè)備開啟函數(shù)
acc_set_init(); //初始化三軸函數(shù)
while(1)
{
//GPIOSetValue(PORT0, 2, 6);
/*if(k > 9)
{
k = 0;
}
Seg7Led_Put(k);
k++;
delay_ms(250);
if(counter1 > 1)
{
collect_data(data.temp,data.hum,data.light); //顯示溫濕度和亮度函數(shù)
adc_set(data.adc); //顯示電池函數(shù)
acc_set(data.acc); //顯示三軸函數(shù)
data.type = itype; //設(shè)置發(fā)送數(shù)據(jù)類型
data_pakget_trans(data); //發(fā)送數(shù)據(jù)
counter1 = 0;
}
if(ZigBee_GetChar(p)) //接收上層發(fā)下來的命令
{
if (i < 6) //接收前5個(gè)命令符
{
p++;
i++;
}
else
{
i = 0;
p = rd;
ccheck = usMBCRC16(p, 5);//將前5個(gè)命令符進(jìn)行CRC檢驗(yàn) ,獲得檢驗(yàn)位
if (((ccheck & 0xff) == p[6]) && ((ccheck >> 8) == p[5] )) {
if (p[1] - 0 == ID_NUM) //如果設(shè)備號一致則執(zhí)行命令
{
switch (p[4]) //如果有設(shè)備已開啟信息
{
case LED_ON:
GPIOSetValue(PORT3, 1, 0); //開led2
break;
case LED_OFF:
GPIOSetValue(PORT3, 1, 1); //關(guān)led2
break;
case FAN_ON:
GPIOSetValue(PORT0, 2, 0); //開風(fēng)扇
break;
case FAN_OFF:
GPIOSetValue(PORT0, 2, 1); //關(guān)風(fēng)扇
break;
case LED7_ON:
Led7_On(); //數(shù)碼管倒計(jì)時(shí)
break;
case LED7_OFF:
Seg7Led_Put( ); //關(guān)數(shù)碼管
break;
case SPEAKER_ON:
speaker_op(1); //開報(bào)警器
break;
case SPEAKER_OFF:
speaker_op(0); //關(guān)報(bào)警器
break;
case ANSWER:
GPIOSetValue(PORT0, 2, 6); //風(fēng)扇加速
break;
default:
printf("not write commod");
break;
}
}
}
}
}
//判斷是否有刷卡,返回值不為0則有人刷卡
if(RFID_Test(data.rfid)/*!GPIOGetValue(PORT2, 8)*/) {
GPIOSetValue(PORT3, 0, 0); //刷卡顯示燈led1亮
data.type = rtype;
delay_ms(250);
data_pakget_trans(data);
GPIOSetValue(PORT3, 0, 1); //刷卡顯示燈led1滅
}
// Go to sleep to save power between timer interrupts
__WFI();
}
}
5、 實(shí)訓(xùn)總結(jié):
綜上所述,本文通過對智能家居及其功能的介紹,展示智能家居的現(xiàn)代生活中的必要性。在介紹國外智能家居發(fā)展近況及國內(nèi)發(fā)展現(xiàn)狀后,對我國智能家居發(fā)展提出有利建議。最后,預(yù)想出我國未來智能家居的發(fā)展趨勢。
6、 實(shí)訓(xùn)成績:
鏈接地址:http://www.820124.com/p-9345389.html