传感器原理课程设计报告.docx

上传人:b****5 文档编号:5734737 上传时间:2022-12-31 格式:DOCX 页数:27 大小:187.94KB
下载 相关 举报
传感器原理课程设计报告.docx_第1页
第1页 / 共27页
传感器原理课程设计报告.docx_第2页
第2页 / 共27页
传感器原理课程设计报告.docx_第3页
第3页 / 共27页
传感器原理课程设计报告.docx_第4页
第4页 / 共27页
传感器原理课程设计报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

传感器原理课程设计报告.docx

《传感器原理课程设计报告.docx》由会员分享,可在线阅读,更多相关《传感器原理课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。

传感器原理课程设计报告.docx

传感器原理课程设计报告

郑州轻工业学院

课程设计报告书

 

课题名称

多点温度监测仪

姓名

***

学号

54*********

院、系、部

计算机与通信工程学院

专业

物联网工程***班

指导教师

**

 

2***年**月**日

 

郑州轻工业学院

课程设计任务书

题目多点温度监测仪

专业、班级物联网工程***班学号54******姓名***

主要内容、基本要求、主要参考文献等:

1、主要内容

(1)掌握传感器采集数据处理的方法。

(2)学习LCD的显示原理和控制办法,了解汉仪器仪表系统的软件组织方式,操作界面切换的原理,。

(3)完成多点温度监测仪程序设计,多点温度数值显示,报警提示。

2、基本要求

(1)编写图形界面显示函数,在LCD上显示仪表各操作界面。

(2)编写警报设定函数,对各路信号进行警报设定。

(3)菜单程序设计,实现菜单的选择操作。

3、主要参考文献

【1】吴建平.传感器原理及应用.成都.电子工业出版社,2010

【2】田泽.嵌入式系统开发与应用实验教程.北京航空航天大学出版社,2004

【3】周立功.ARM微控制器基础与实战[M].北京航天航空大学出版社,2003

完成期限:

指导教师签名:

******

课程负责人签名:

********

目录

 

一、设计目的

二、设计思路

三、设计过程

四、程序及其显示

五、设计体会与建议

 

多点温度监测仪

一、设计目的

1.巩固传感器信号采集与处理方法。

2.巩固并进一步加强仪器仪表系统的理解与应用。

3.综合运用C及汇编编程知识(基础知识及高级应用)

4.掌握开发仪器仪表系统的开发方法

二、设计思路

 

三、设计过程

1、按照设计要求,分别编写五个函数,每个函数就是一个界面,五个函数及界面分别如下所示:

(1)、第一个界面如图-01所示,

(2)、第二个界面如图-02所示,

函数名为MainTask()函数名为MainInterface()

图-01图-02

(3)、第三个界面如图-03所示,(4)、第四个界面如图-04所示,

函数名为switchover()。

函数名为setting()。

图-03图-04

(5)、第五个界面如图-05所示,函数名为name()。

图-05

2、编写温度函数,具体办法就是用随机函数生成随机数,然后把随机数放到一个数组里面,并让数组里面的值不断向前平移,再对数组里面的值求均值,把均值放到另外一个数组里面,记录下来,作为函数的返回值。

编写设置函数,调用编辑框控件,把编辑框中值赋值给变量,当做设定值。

3、把五个函数封装好,放到一个工程里面,先执行第一个函数,然后进入主页面,并不断捕获鼠标状态,按照设计要求进行调转。

当进入其它页面时,也不断捕获鼠标状态,按照设计要求进行调转。

四、程序及其显示

(1)、第一个页面设计的代码如下所示:

voidMainTask(void)

{

GUI_Init();

GUI_SetColor(GUI_WHITE);//设置前景色为白色,背景色为蓝色

GUI_SetBkColor(GUI_BLUE);

GUI_Clear();

//把两个存储随机数的数组初进行赋值

for(i=0;i<200;i++)

{

data[i]=(rand()%6000)*0.01;

}

for(i=0;i<10;i++)

{

sum=0;

for(k=0;k<199;k++)

{

data[k]=data[k+1];

}

data[199]=(rand()%6000)*0.01;

for(k=0;k<200;k++)

{

sum+=data[k];

}

num[i]=sum/200;

}

//在屏幕上显示"多点温度监测仪"和"Loading"

GUI_SetFont(&GUI_FontHZ24);

GUI_DispStringHCenterAt("多点温度监测仪",160,90);

GUI_DispStringHCenterAt("Loading",140,140);

GUI_SetColor(GUI_WHITE);

GUI_SetBkColor(GUI_BLUE);

//显示Loading后的小圆点

for(i=0;i<10;i++)

{

GUI_FillCircle(150+10*i,157,5-0.2*i);

GUI_Delay(250);

}

GUI_Clear();//清空窗口

while

(1)

{

MainInterface();//进入主界面

}

}

显示效果和设计效果一致。

(2)第二个界面设计的代码如下所示:

voidMainInterface(void)

{

GUI_PID_STATETouchState;

GUI_SetColor(GUI_WHITE);

GUI_SetBkColor(GUI_BLUE);

GUI_Clear();

GUI_SetFont(&GUI_FontHZ24);

//画三个矩形框里面分别是"设置","切换","姓名"。

for(i=0;i<3;i++)

{

GUI_DrawRect(15+100*i,195,105+100*i,230);

}

GUI_DispStringHCenterAt("设置",60,200);

GUI_DispStringHCenterAt("切换",160,200);

GUI_DispStringHCenterAt("姓名",260,200);

//在主界面画出4个小矩形,4个大矩形和4个"C"。

for(i=0;i<4;i++)

{

GUI_SetColor(GUI_WHITE);

GUI_SetBkColor(GUI_BLUE);

LCD_L0_FillRect(90,15+45*i,230,45+45*i);

LCD_L0_FillRect(20,15+45*i,70,45+45*i);

GUI_FillCircle(280,30+45*i,15);

GUI_SetColor(GUI_GRAY);

GUI_SetBkColor(GUI_WHITE);

GUI_DispStringHCenterAt("C",210,20+45*i);

}

//在4个白色的小矩形上分别写上"Ch1","Ch2","Ch3","Ch4"。

GUI_SetFont(&GUI_FontHZ16);

GUI_DispStringHCenterAt("Ch1",55,20);

GUI_DispStringHCenterAt("Ch2",55,65);

GUI_DispStringHCenterAt("Ch3",55,110);

GUI_DispStringHCenterAt("Ch4",55,155);

GUI_SetFont(&GUI_FontHZ24);

while

(1)

{

//显示温度和圆

if(flag1==1)//flag1=1表示Ch1节点开关为开,如果开关为开,则显示温度。

{

t1=temperature(20);

GUI_SetColor(GUI_GRAY);

GUI_SetBkColor(GUI_WHITE);

GUI_GotoXY(110,20);

GUI_DispFloatFix(t1,6,3);

if(t1>=c1)//如果节点1的温度大于设定值则显示红色小圆

{

GUI_SetColor(GUI_RED);

GUI_SetBkColor(GUI_WHITE);

GUI_FillCircle(280,30,15);

}

else//如果节点1的温度不大于设定值则显示绿色小圆

{

GUI_SetColor(GUI_GREEN);

GUI_SetBkColor(GUI_WHITE);

GUI_FillCircle(280,30,15);

}

GUI_Delay(20);//延迟0.02秒

}

else//flag1!

=1表示Ch1节点开关为关,如果开关为关,则显示灰色小圆。

{

GUI_SetColor(GUI_GRAY);

GUI_SetBkColor(GUI_BLUE);

GUI_FillCircle(280,30,15);

}

if(flag2==1)//flag2=1表示Ch2节点开关为开,如果开关为开,则显示温度。

{

t2=temperature(60);

GUI_SetColor(GUI_GRAY);

GUI_SetBkColor(GUI_WHITE);

GUI_GotoXY(110,65);

GUI_DispFloatFix(t2,6,3);

if(t2>=c2)//如果节点2的温度大于设定值则显示红色小圆

{

GUI_SetColor(GUI_RED);

GUI_SetBkColor(GUI_WHITE);

GUI_FillCircle(280,75,15);

}

else//如果节点2的温度不大于设定值则显示绿色小圆

{

GUI_SetColor(GUI_GREEN);

GUI_SetBkColor(GUI_WHITE);

GUI_FillCircle(280,75,15);

}

GUI_Delay(20);

}

else//flag2!

=1表示Ch2节点开关为关,如果开关为关,则显示灰色小圆。

{

GUI_SetColor(GUI_GRAY);

GUI_SetBkColor(GUI_BLUE);

GUI_FillCircle(280,75,15);

}

if(flag3==1)//flag3=1表示Ch3节点开关为开,如果开关为开,则显示温度。

{

t3=temperature(120);

GUI_SetColor(GUI_GRAY);

GUI_SetBkColor(GUI_WHITE);

GUI_GotoXY(110,110);

GUI_DispFloatFix(t3,6,3);

if(t3>=c3)//如果节点3的温度大于设定值则显示红色小圆

{

GUI_SetColor(GUI_RED);

GUI_SetBkColor(GUI_WHITE);

GUI_FillCircle(280,120,15);

}

else//如果节点3的温度不大于设定值则显示绿色小圆

{

GUI_SetColor(GUI_GREEN);

GUI_SetBkColor(GUI_WHITE);

GUI_FillCircle(280,120,15);

}

GUI_Delay(20);

}

else//flag3!

=1表示Ch3节点开关为关,如果开关为关,则显示灰色小圆。

{

GUI_SetColor(GUI_GRAY);

GUI_SetBkColor(GUI_BLUE);

GUI_FillCircle(280,120,15);

}

if(flag4==1)//flag4=1表示Ch4节点开关为开,如果开关为开,则显示温度。

{

t4=temperature(180);

GUI_SetColor(GUI_GRAY);

GUI_SetBkColor(GUI_WHITE);

GUI_GotoXY(110,155);

GUI_DispFloatFix(t4,6,3);

if(t4>=c4)//如果节点4的温度大于设定值则显示红色小圆

{

GUI_SetColor(GUI_RED);

GUI_SetBkColor(GUI_WHITE);

GUI_FillCircle(280,165,15);

}

else//如果节点4的温度不大于设定值则显示绿色小圆

{

GUI_SetColor(GUI_GREEN);

GUI_SetBkColor(GUI_WHITE);

GUI_FillCircle(280,165,15);

}

GUI_Delay(20);

}

else//flag4!

=1表示Ch1节点开关为关,如果开关为关,则显示灰色小圆。

{

GUI_SetColor(GUI_GRAY);

GUI_SetBkColor(GUI_BLUE);

GUI_FillCircle(280,165,15);

}

//捕获鼠标状态

if(GUI_TOUCH_GetState(&TouchState))

{

if((TouchState.x>15)&&(TouchState.x<105)&&(TouchState.y>195)&&(TouchState.y<230))//设置

{

while(GUI_TOUCH_GetState(&TouchState));setting();//如果点击设置按钮,则执行setting()函数

}

if((TouchState.x>115)&&(TouchState.x<205)&&(TouchState.y>195)&&(TouchState.y<230))//转换

{

while(GUI_TOUCH_GetState(&TouchState));switchover();//如果点击转换按钮,则执行switchover()函数

}

if((TouchState.x>215)&&(TouchState.x<305)&&(TouchState.y>195)&&(TouchState.y<230))//姓名

{

GUI_SetBkColor(GUI_WHITE);//

while(GUI_TOUCH_GetState(&TouchState));name();//如果点击姓名按钮,则执行name()函数

}

}

}

}

初始状态开关全部为开,进入界面后,和设计效果一样,当关闭其中几个节点后,例如:

节点1和节点3关闭后,显示效果如图-06所示,可见数字显示没有了,显示状态的小圆点变为灰色,而其它节点显示没有变化。

 

图-06

(3)第三个界面设计代码如下:

voidswitchover(void)

{

GUI_PID_STATETouchState;

GUI_SetColor(GUI_WHITE);

GUI_SetBkColor(GUI_BLUE);

GUI_Clear();

GUI_SetFont(&GUI_FontHZ24);

//显示三个矩形框当按钮

for(i=0;i<3;i++)

{

GUI_DrawRect(15+100*i,195,105+100*i,230);

}

//显示"设置","切换","姓名"三个词在三个矩形框中

GUI_DispStringHCenterAt("设置",60,200);

GUI_DispStringHCenterAt("切换",160,200);

GUI_DispStringHCenterAt("姓名",260,200);

GUI_SetColor(GUI_WHITE);

GUI_SetBkColor(GUI_BLUE);

LCD_L0_FillRect(30,20,290,170);

GUI_SetColor(GUI_BLACK);

GUI_SetBkColor(GUI_WHITE);

//显示传感器节点编号

GUI_DispDecAt(1,50,30,1);

GUI_DispDecAt(2,210,60,1);

GUI_DispDecAt(3,50,110,1);

GUI_DispDecAt(4,170,120,1);

while

(1)

{

//显示节点的状态

intr;

for(r=0;r<4;r++)

{

if(r==0)

flag=flag1;

if(r==1)

flag=flag2;

if(r==2)

flag=flag3;

if(r==3)

flag=flag4;

if(flag==1)//如果开关为开,则显示红色或绿色小圆。

{

t1=temperature(20);

t2=temperature(60);

t3=temperature(120);

t4=temperature(180);

//如果温度大于设定值,则显示红色小圆

GUI_SetColor(GUI_RED);

GUI_SetBkColor(GUI_WHITE);

if((r==0)&&(t1>=c1))

{

GUI_FillCircle(80,60,10);

}

if((r==1)&&(t2>=c2))

{

GUI_FillCircle(250,75,10);

}

if((r==2)&&(t3>=c3))

{

GUI_FillCircle(80,120,10);

}

if((r==3)&&(t4>=c4))

{

GUI_FillCircle(200,140,10);

}

//如果温度小于设定值,则显示绿色小圆

GUI_SetColor(GUI_GREEN);

GUI_SetBkColor(GUI_WHITE);

if((r==0)&&(t1

{

GUI_FillCircle(80,60,10);

}

if((r==1)&&(t2

{

GUI_FillCircle(250,75,10);

}

if((r==2)&&(t3

{

GUI_FillCircle(80,120,10);

}

if((r==3)&&(t4

{

GUI_FillCircle(200,140,10);

}

GUI_Delay(20);

}

else//如果开关为关,则显示灰色小圆。

{

GUI_SetColor(GUI_GRAY);

GUI_SetBkColor(GUI_WHITE);

if(r==0)

GUI_FillCircle(80,60,10);

if(r==1)

GUI_FillCircle(250,75,10);

if(r==2)

GUI_FillCircle(80,120,10);

if(r==3)

GUI_FillCircle(200,140,10);

GUI_Delay(20);

}

}

if(GUI_TOUCH_GetState(&TouchState))//捕获鼠标状态

{

if((TouchState.x>15)&&(TouchState.x<105)&&(TouchState.y>195)&&(TouchState.y<230))//设置

{

while(GUI_TOUCH_GetState(&TouchState));setting();//如果点击设置按钮,则进入setting()界面

}

if((TouchState.x>115)&&(TouchState.x<205)&&(TouchState.y>195)&&(TouchState.y<230))//转换

{

while(GUI_TOUCH_GetState(&TouchState));MainInterface();//如果点击转换按钮,则进入MainInterface()界面

}

if((TouchState.x>215)&&(TouchState.x<305)&&(TouchState.y>195)&&(TouchState.y<230))//姓名

{

GUI_SetBkColor(GUI_WHITE);

while(GUI_TOUCH_GetState(&TouchState));name();//如果点击姓名按钮,则进入name()界面

}

}

}

}

//设置温度输入框

voidEdit(void)

{

GUI_PID_STATETouchState;

intKey;

EDIT_HandlehEdit;

floataBuffer[10];

GUI_SetFont(&GUI_Font8x16);

for(i=0;i<4;i++)

{

if(GUI_TOUCH_GetState(&TouchState))//捕获鼠标状态

if((TouchState.x>90)&&(TouchState.x<180)&&(TouchState.y>15+45*i)&&(TouchState.y<45+45*i))

{

hEdit=EDIT_Create(90,15+45*i,90,30,'',sizeof(aBuffer),0);//在相应位置创建编辑框

EDIT_SetTextColor(hEdit,0,GUI_RED);//设置编辑框文本为红色

do

{

Key=GUI_WaitKey();//捕获键盘的输入

}

while((Key!

=GUI_ID_ESCAPE)&&(Key!

=GU

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1