实时温控报警系统

发布时间 : 星期六 文章实时温控报警系统更新完毕开始阅读

3.软件设计

3.1 系统控制程序概述

系统软件主要实现以下几大功能:

(1) 利用键盘设置初始判断温度,并在数码管上显示; (2) 通过LM75A数字温度传感器将感应的实际温度送入寄存器; (3) 根据设定的参数初值对数据进行判断,从而开启或关闭加热器,并控制蜂鸣器的报警。

程序开始是定义位地址,定义温度传感器的位地址,温度值的储存缓存区的地址,显示缓存区地址。然后是复位和中断入口地址表:设定主程序 MAIN 的入口地址 0000H、外部中断源 INT0的中断入口地址 0003H。其次是系统的主程序:在主程序中分为若干个子程序,通过依次对各个子程序地调用来完成整个系统的程序运行。

3.2 系统控制程序的设计

3.2.1 主程序设计

主程序中仅实现系统的初始化,对系统进行自检和调用数据处理子程序。包括键盘读取子程序,温度传感器获取温度子程序,温度转化子程序,显示子程序。

- 9 -

程序初始化 打开中断 N 低电平? Y 读键盘值 判断键盘键值为“B”? N N 判断键盘键值为“A”? 输入个位(ge) Y 输入十位(shi) Y N 32<(shi*10+ge)N Y 蜂鸣器不响 蜂鸣器鸣响

图3.1 控制系统主程序流程图

3.2.2 键盘读取与数码管显示子程序设计 由键盘输入键值并判断而后在数码管上显示。

ZLG7290 I2C接口键盘及LED驱动器应用流程图如图4.2。

- 10 -

设置P1口为准向ZLG7290送入显示有键按下否 N Y 读出键数码管显示左移2将键值输出到数码管并使能

图3.2 键盘扫描及显示流程图

3.3 设计过程及结果

3.3.1对于键盘操作的描述

所有键盘都以十六进制进行控制。其中数字0-9即为十六进制的0000-1001。1010-A,作为十位数的控制键。1011-B,作为个位数的控制键。

3.3.2对于数码管显示器的描述

用一个八位数码管来实现实验。其中第一位显示C,表示温度单位。第二位显示“°”,第三位显示个位温度;第四位显示十位温度。 3.3.3程序执行基本流程

1.输入一个两位温度给模块作为其初始温度。显示温度在数码管上的第3、4位。

2.假设一个具体数值,如32,把此数值假设为温度传感器感应的温度,与数码管上显示的温度进行比较。

- 11 -

3.若32小于数码管上显示的温度,则蜂鸣器无任何操作。因为对应管脚位低电平,蜂鸣器不激活。

4.若32大于于数码管上显示的温度,则蜂鸣器蜂鸣。因为对应管脚为高电平。

5.在步骤4的情况下,按下“A”“B”键可再次改变数码管显示温度。 6.在步骤5的情况下,若数码管显示温度大于32,则蜂鸣器不工作,即停止蜂鸣。

4.源程序代码

#include \config.h\ //包含了\ includes.h\和一些系统配置文件 #include \stdlib.h\

#define beep 1<<7 //P0.7为蜂鸣器的控制I/O #define TaskStkLengh 64 用户任务0的堆栈长度 void Task0(void *pdata);

//Task0 任务0

//Define the Task0 stack length 定义

OS_STK TaskStk [TaskStkLengh]; //Define the Task0 stack 定义用户任务0的堆栈

int main (void) //将main函数设置为整型是为了防止编译警告 { IO0SET=beep; //初始化蜂鸣器(不响) }

/*************************************************************** Task0 任务0

***************************************************************/

void Task0 (void *pdata)

- 12 -

OSInit ();

OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 2);//创建任务0 OSStart (); return 0;

联系合同范文客服:xxxxx#qq.com(#替换为@)