传感器原理课程设计报告.docx
- 文档编号:5734737
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:27
- 大小:187.94KB
传感器原理课程设计报告.docx
《传感器原理课程设计报告.docx》由会员分享,可在线阅读,更多相关《传感器原理课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。
传感器原理课程设计报告
郑州轻工业学院
课程设计报告书
课题名称
多点温度监测仪
姓名
***
学号
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 传感器 原理 课程设计 报告