毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 计算机安全 >> 正文

基于EasyARM615的家居智能环境控制系统 第9页

更新时间:2014-6-28:  来源:毕业论文

基于EasyARM615的家居智能环境控制系统 第9页
4.2窗磁报警模块的设计
4.2.1工作原理介绍
在窗磁报警模块中,磁铁是此模块的主要组成部分。只要磁铁是闭合的,那么就形成一个闭合的回路,一旦磁铁分开,检测电路也随之断开。检测电路的断开会触发EasyARM615开发板上的蜂鸣器,实现报警的功能。
另外为了更加人性化,这个窗磁报警的功能是可以关闭的,当需要正常使用窗户的话就不会报警了。要启动或者关闭窗磁报警功能,只需要在中控台安详相应的功能键即可。
在EasyARM615开发板上,还使用了KEY4按键用以控制窗磁报警功能的开关,以及蜂鸣器用以报警。通过通用输入输出口(general-purpose I/O port)检测窗磁电路是否被断开,若断开则响起开发板上的蜂鸣器实现报警的功能。因为用到按键以及蜂鸣器,首先要在main.c里面使能它们,还要在主函数之前定义蜂鸣器。
4.2.2电路的设计

图4-2 窗磁检测的电路图
4.2.3程序函数的设计
在窗磁报警模块的设计中,需要用到开发板上的按键4、 LED灯以及蜂鸣器,首先在主函数定义之前定义KEY4,使用了GPIO口中A组的PORT4(在开发板上应该短接PA_4):
#define  KEY4_PERIPH            SYSCTL_PERIPH_GPIOA
//定义按键4的窗磁A组的GPIO口
#define  KEY4_PORT              GPIO_PORTA_BASE 
#define  KEY4_PIN               GPIO_PIN_4       //定义PA4

然后是定义LED灯,使用了GPIO口中C组的PORT4(在开发板上应该短接PC_4):
#define  LED_PERIPH             SYSCTL_PERIPH_GPIOC 
//定义LED灯的C组的GPIO口
#define  LED_PORT               GPIO_PORTC_BASE
#define  LED_PIN                GPIO_PIN_4     //定义PC_4
#define  ledOn()                GPIOPinWrite(LED_PORT , LED_PIN , 0x00 << 4)
                                               //定义LED灯开启
#define  ledOff()               GPIOPinWrite(LED_PORT , LED_PIN , 0x01 << 4)
                                               //定义LED灯关闭
#define  ledToggle()            GPIOPinWrite(LED_PORT , LED_PIN ,
~GPIOPinRead(LED_PORT , LED_PIN))
               //定义LED灯反转

接着是定义蜂鸣器,使用了GPIO口中A组的PORT5(在开发板上应该短接PA_5):
#define  SPEAK_PERIPH       SYSCTL_PERIPH_GPIOA //定义蜂鸣器A组的PGIO口
#define  SPEAK_PORT         GPIO_PORTA_BASE
#define  SPEAK_PIN          GPIO_PIN_5          //定义PA_5
#define  SPEAK_ON()         GPIOPinWrite(SPEAK_PORT , SPEAK_PIN , 0x00 << 5)
                                                //定义蜂鸣器开启
#define  SPEAK_OFF()        GPIOPinWrite(SPEAK_PORT , SPEAK_PIN , 0x01 << 5)
                                                //定义蜂鸣器关闭
4.3烟雾报警模块的设计
4.3.1工作原理介绍
烟雾报警模块需要在DC12V的供电下进行工作,该模块不但能对环境中烟雾的检测,也能对环境中热能的检测。模块一旦检测环境中有烟雾或者温度过高,则会进行声光报警。在烟雾报警模块中,有五条引线(如图4-1),其功能为:红色的线接DC+12V,黑色的线接EasyARM615开发板的GND引脚,黄、绿、橙三条线为信号线。

图4-3 烟雾报警器的引线
4.5温度检测模块(采样功能)的设计
4.5.1群星模数转换模特点
群星(Stellaris)ADC 模块的转换分辨率为10 位,含2个输入通道和一个内部温度传感器。ADC 模块包含一个可编程的序列发生器,无需控制器参与,允许对多个模拟输入源进行采样。每个采样序列均可以灵活的编程,其输入源、触发事件、中断的发生和序列优先级都是可配置的。
4.5.2 ADC结构图

图4-4 ADC模块结构图

4.5.3 ADC的初始化和配置
为了使用ADC 模块,必须使能PLL,同时使用所支持的晶振频率。使用不支持的频率可能会导致ADC 模块的的运作发生错误。
一、模块初始化
    ADC 模块的初始化过程很简单,只需几个步骤。主要的步骤包括使能ADC 时钟和配置采样序列发生器的优先级(如有必要)。
ADC 初始化的顺序如下:
1. 通过写0x00010000 到系统控制模块中的RCGC1寄存器将ADC 时钟使能
2. 一经应用要求,必须在ADCSSPRI寄存器中对采样序列发生器的优先级进行配
置。默认的配置是采样序列发生器0 优先级最高,采样序列发生器3 优先级最低。

二、采样序列发生器的配置
    采样序列发生器的配置要稍微比模块初始化的过程复杂,因为每个采样序列是完全可
编程的。
每个采样序列发生器按照以下步骤进行配置:
1. 保证采样序列发生器被禁能,这可以通过写0到ADCACTSS寄存器中对应的ASEN位来实现。采样序列发生器无需使能就可编程。如果在配置过程发生触发事件,那么在编程过程中禁能序列发生器就可以预防发生错误的执行操作。
2. 为ADCEMUX寄存器中的采样序列发生器配置触发事件。
3. 在ADCSSMUXn寄存器中为采样序列中的每个采样配置相应的输入源。
4. 在ADCSSCTLn寄存器中为采样序列中的每个采样配置采样控制位。在对最后半个字节进行编程时,确保END 位已置位。不过置位END 位失败可能会引发不可预测的行为。
5. 如果要使用中断,必须写1到ADCIM寄存器中相应的MASK位。
6. 通过写1到ADCACTSS寄存器中相应的ASEN 位将采样序列发生器逻辑使能。

三、模数转换程序关键部分
首先在主函数中初始化ADC,代码如下:
void adcInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_ADC);              //  使能ADC模块
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS);       //  设置ADC采样速率
    ADCSequDisable(ADC_BASE, 3);                      //  配置前先禁止采样序列
    ADCSequConfig(ADC_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
                 //  采样序列配置:ADC基址,采样序列编号,触发事件,采样优先级
    ADCSequStepConfig(ADC_BASE, 3, 0, ADC_CTL_TS |
                                      ADC_CTL_END |
                                      ADC_CTL_IE);
                 //  采样步进设置:ADC基址,采样序列编号,步值,通道设置
    ADCIntEnable(ADC_BASE, , 3);                      //  使能ADC中断                           IntEnable(INT_ADC3);                              //  使能ADC采样序列中断    
    IntMasterEnable();                                //  使能处理器中断
ADCSequEnable(ADC_BASE, 3);                       //  使能采样序列
}

然后进行ADC的采样,函数如下:
unsigned long adcSample(void)
{
    unsigned long ulValue;
    ADCProcessorTrigger(ADC_BASE, 3);                 //  处理器触发采样序列
while (!ADC_EndFlag);                             //  等待采样结束
    ADC_EndFlag = false;                          //  清除ADC采样结束标志
    ADCSequDataGet(ADC_BASE, 3, &ulValue);             //  读取ADC转换结果
    return(ulValue);
}

最后,需要把ADC采样的结果显示在EasyARM615的LCD液晶屏上:
void Task_Disp(unsigned long ulValue)
{
    int ulTemp_buff;
    long  In_Temp;
    unsigned char D1,D2,D3;
                                           // 显示CPU的工作温度
    In_Temp = 151040UL - 225 * ulValue;
    ulTemp_buff = In_Temp/10-400;
  D1 = (unsigned char) (ulTemp_buff/1000);
  D2 = (unsigned char) ((ulTemp_buff-D1*1000)/100);
  D3 = (unsigned char) ((ulTemp_buff-D1*1000-D2*100)/10);
  
  Lcd_Seg.D2 = HexToSeg(D1);
  Lcd_Seg.D3 = HexToSeg(D2)+LCD_DP;
                Lcd_Seg.D4 = HexToSeg(D3);
                Lcd_Seg.Sign = LCD_TMP;
    
  delay(3000);                  //延时0.5秒左右刷新一次
  Lcd_Update();                  // 刷新LCD的内容
  delay( 100 );                 // 延时
}

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

基于EasyARM615的家居智能环境控制系统 第9页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。