嵌入式课题论文.docx

上传人:b****5 文档编号:7817775 上传时间:2023-01-26 格式:DOCX 页数:29 大小:112.97KB
下载 相关 举报
嵌入式课题论文.docx_第1页
第1页 / 共29页
嵌入式课题论文.docx_第2页
第2页 / 共29页
嵌入式课题论文.docx_第3页
第3页 / 共29页
嵌入式课题论文.docx_第4页
第4页 / 共29页
嵌入式课题论文.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

嵌入式课题论文.docx

《嵌入式课题论文.docx》由会员分享,可在线阅读,更多相关《嵌入式课题论文.docx(29页珍藏版)》请在冰豆网上搜索。

嵌入式课题论文.docx

嵌入式课题论文

嵌入式课程设计

姓名:

_袁伟

组员:

黄鹏李昂周亚西凌诗文

学号:

20097074

学院:

涉外学院

专业班级:

09电信二班

课程标题:

化学反应过程控制系统程序设计

任课老师:

谢铁强

设计时间:

2012.6.21

一、设计描述

某化学反应过程的装置如下图,它由4个容器组成(4#池很大),容器之间用泵连接,以此进行化学反应。

1#--3#容器都有检测容器空和满的传感器,2#容器还有加热器和温度传感器,3#容器还有搅拌器。

化学反应流程如下:

按启动按钮后,1#、2#容器分别用泵P1、P2抽入碱和聚合物,抽满后各自的传感器发出信号,P1、P2关闭。

2#容器在P2启动后10s开始启动加热器,当2#容器中的聚合物加热到60℃时,温度传感器发出信号,关闭加热器。

当加热器关闭后,P3和P4启动,分别将1#、2#容器中的溶液送到3#反应器中,同时启动搅拌器,当3#满或1#、2#空,则P3、P4停止,P3、P4停止后搅拌器继续搅拌60s后,P5启动将混合液抽到产品池4#容器,直到3#空。

当按下停止按钮后,应该完成一个完整的生产流程,即把1#、2#容器中的反应物用完,把3#容器所有混合液抽空到4#池,最终1#、2#、3#池处于空状态,然后才停止所有工作。

2、设计要求

在LPC2292开发板上编程实现上述控制流程。

S1为启动按钮,S2为停止按钮。

1#--3#池的空和满传感器都是数字量输入,分别通过键盘S3--S8输入;2#池温度为模拟量输入,接AIN0,需要进行AD转换。

P1--P4、加热器、搅拌器的控制都使用开关量控制,用D1--D6指示,指示灯亮表示“开”。

要求在液晶屏上第一行显示2#池温度。

界面设计要求简单清晰明了。

3、扩展功能

●增加智能检测功能,能够判断系统以下基本故障,并在液晶屏上第二行显示故障类型信息。

1)当P1开时间超过2分钟,1#满传感器没有指示则指示故障1;

2)当P3开时间超过2分钟,1#空传感器没有指示则指示故障2;

3)当加热器开时间超过3分钟,温度没有达到60度则显示故障3;

4)当P5开时间超过3分钟,3#空传感器没有指示则指示故障4.

●增加并行功能以提高工作效率,即当P3、P4关闭后,即启动P1、P2。

4、设计流程

1、仔细分析整个工作流程——细化成状态——找出状态切换条件——将状态逐步联系起来——绘制状态网络图,如图一

2、根据状态网络图和开发板硬件原理图合理的设置状态指示和开关切换状态

3、根据上面的状态网络图和硬件设置,绘制程序流程图

4、仔细分析流程图编写程序

5、进行程序调试,修改

6、验证程序,确认设计要求

7、设计总结

5、设计方案分析说明

设计方案总体框架图

总说明:

8路LED做状态指示,8路按键引发状态切换,12864液晶显示各种故障提示以及实时显示温度,AD模拟温度,

子说明:

LED详细状态说明及按键详细说明见下表

LED1

LED2

LED3

LED4

LED5

LED6

LED7

LED8

P1开

P2开

P3开

P4开

P5开

加热

搅拌

------

KEY1

KEY2

KEY3

KEY4

KEY5

KEY6

KEY7

KEY8

开始

停止

1#满

1#空

2#满

2#空

3#满

3#空

注:

1、P1~P5开都是在其对应的LED亮的情况下,类推,当对应的LED暗的时候就意味着是关的状态;

2、LED1~LED8对应开发板的D1~D8;

3、KEY1~KEY8对应开发板的K1~K8;

6、设计软件程序图

主状机状态转换图

7、体会

此次课程设计在历时两个星期之久,通过两个星期多的学习实践,让我们经历了从理论到实践的过程,了解了实际产品开发的标准流程,经历了团队合作的重要过程。

使我们对arm构架有了基本的了解,熟悉了arm9中的外部中断,定时器中断,RTC,IO口的配置和使用。

本次课设提高我对嵌入式学习的浓厚的兴趣,增加了学好嵌入式的信心,增强了面对学习中克服困难的勇气。

同时也总结了一些经验和教训,比如:

项目开发经验不足,有时会出现实际的开发脱离先前的设计,遇到难的问题解决起来较慢。

需求分析不全面等。

因此在以后的学习实践过程中,要认真思考,勇于面对各种困难,全面系统分析一切遇到的问题。

同时它也让我学会了如何通过自己的努力去认知一个新事物,更重要的是端正自己的学习态度,只有真正下功夫去学习,才能有收获,正所谓“一份耕耘,一份收获。

”没有付出,何谈回报呢?

再者,通过本次课程设计,我也学会了如何去分析问题,继而去排除解决问题,这就是一个自我学习的过程。

当我们通过课程设计去学习理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆。

 

参考文献

周立功主编,ARM嵌入式系统基础教程,北京航空航天大学出版社,2008.9

嵌入式系统基础与应用,北京科海电子出版社,2009.1

 

附录程序清单

注:

相关头文件在项目压缩文件中均已包含

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

*文件名:

main.c

*功能:

LED显示控制。

通过GPIO直接控制4个LED产生流水灯效果

*说明:

将跳线器JP12全部短接,这个警告可忽略,C2892E:

signedconstantoverflow

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

#include"config.h"

#include"def.h"

#include"LPC2294.h"

#include"board.h"

#include"LCD_YM12864I.h"

#defineucharunsignedchar

#defineuintunsignedint

#defineLED1_ON(IO0CLR=IO0CLR|(1<<2))

#defineLED1_OFF(IO0SET=IO0SET|(1<<2))

#defineLED2_ON(IO0CLR=IO0CLR|(1<<4))

#defineLED2_OFF(IO0SET=IO0SET|(1<<4))

#defineLED3_ON(IO0CLR=IO0CLR|(1<<5))

#defineLED3_OFF(IO0SET=IO0SET|(1<<5))

#defineLED4_ON(IO0CLR=IO0CLR|(1<<6))

#defineLED4_OFF(IO0SET=IO0SET|(1<<6))

#defineLED5_ON(IO0CLR=IO0CLR|(1<<28))

#defineLED5_OFF(IO0SET=IO0SET|(1<<28))

#defineLED6_ON(IO0CLR=IO0CLR|(1<<29))//加热器

#defineLED6_OFF(IO0SET=IO0SET|(1<<29))

#defineLED7_ON(IO0CLR=IO0CLR|(1<<30))

#defineLED7_OFF(IO0SET=IO0SET|(1<<30))//搅拌器

#defineLED8_ON(IO0CLR=IO0CLR|(1<<31))

#defineLED8_OFF(IO0SET=IO0SET|(1<<31))

U8num[]={0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00};

U8chi[]={0x10,0x60,0x02,0xCC,0x80,0x80,0xFC,0x40,0x20,0xFF,0x10,0x08,0xF8,0x00,0x00,0x00,

0x04,0x04,0x7E,0x01,0x00,0x00,0x3F,0x40,0x40,0x4F,0x40,0x44,0x47,0x40,0x78,0x00};

U8wen[]={0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,

0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00};

U8du[]={0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,

0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00};

U8gu[]={0x10,0x10,0x10,0xFF,0x10,0x10,0x50,0x20,0xD8,0x17,0x10,0x10,0xF0,0x10,0x10,0x00,0x00,0x7F,0x21,0x21,0x21,0x7F,0x80,0x40,0x21,0x16,0x08,0x16,0x21,0x40,0x80,0x00};/*故*/

U8zhang[]={0x00,0xFE,0x02,0x22,0xDA,0x06,0x10,0xD2,0x56,0x5A,0x53,0x5A,0x56,0xD2,0x10,0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x10,0x17,0x15,0x15,0xFD,0x15,0x15,0x17,0x10,0x00};/*障*/

U8yi[]={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*一*/

U8er[]={0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00};/*二*/

U8san[]={0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00};/*三*/

U8si[]={0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00};/*四*/

U8dot[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00};/*.*/

U8maohao[]={0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};/*:

*/

U8sheshi[]={0xC6,0x36,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00};/*C--*/

U8num0[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};

U8num1[]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};

U8num2[]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};

U8num3[]={0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};

U8num4[]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};

U8num5[]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};

U8num6[]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};

U8num7[]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};

U8num8[]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};

U8num9[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};

U8Data[10][16]={{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}};

ucharGet_Keystoke(void);

voidDelay(uintms);

voidPortInit(void);

voidTime0Init(void);

staticunsignedshortRead_Adc(unsignedcharch);

staticvoidADC_Init(U32Adc_Clk);

voidLcd_Display_English_Left_128X64(U8row,U8col,U8*S);//以0为起始

voidLcd_Display_English_Right_128X64(U8row,U8col,U8*S);

voidDisplay_AD_Data(doubledata);

voidLcd_Display_Hz_Post(U8*S,U8x,U8y);//以1为起始

voidLcd_Display_Zf_Post(U8*S,U8x,U8y);

voidLcd_Clear_AD_Data(void);

voidDisplay(void);

voidDisplay_GuZhang(U8*S);

voidDisplay_GuZhang1(void);

voidDisplay_GuZhang2(void);

voidDisplay_GuZhang3(void);

voidDisplay_GuZhang4(void);

ucharstate=0;

ucharstate1=1;

uintreadadc=0;

ucharreadkey=0;

ucharstop_flag=0;

doublewendu=0;

ucharflag=0;//小状态机运行标志

ucharp1_state=0;//每个池的状态 1代表满,0代表空2代表不空也不满

ucharp2_state=0;

ucharp3_state=0;

uchart0=0;

uchart1=0;

uchart1_num=0;

uchart2_num=0;

uchart3_num=0;

uchart4_num=0;

Uchartemp=0;//保持小状态机的状态值

intmain(void)

{/*PINSEL2使用启动代码的默认配置,切勿任意配置PINSEL2,否则总线会受到干扰*/

PortInit();

LED1_OFF;

LED2_OFF;

LED3_OFF;

LED4_OFF;

LED5_OFF;

LED6_OFF;

LED7_OFF;

LED8_OFF;

ADC_Init(1000000);

Time0Init();

Lcd_YM12864_Init();

Lcd_Clear();

Display();

while

(1)

{

readadc=Read_Adc(0x01);

wendu=((readadc*100.0)/1024);

if(state==2||state1==2)

{

Display_AD_Data(wendu);

}

if((readkey=Get_Keystoke())==2)

stop_flag=1;

if(flag)//小状态机

{

switch(state1)

{

case1:

if(p1_state!

=1)//1#池没有满 则P1打开

{

LED1_ON;p1_state=2;//P1开了,1#池当然不是是空的

}

if(p2_state!

=1)//2#池没有满 则P2打开

{

LED2_ON;p2_state=2;//P2开了,2#池当然不是空的

}

if((t1_num>20)&&(p1_state!

=1))//时间到了,还没有收到满信号 则显示故障1;

{

Display_GuZhang1(yi);

}

if((readkey=Get_Keystoke())==3)//1#池满  关闭P1

{

P1_state=1;LED1_OFF;

}

if((readkey=Get_Keystoke())==5)//2#池满  关闭P2

{

p2_state=1;LED2_OFF;

}

if(t0>10)

{

state1=2;t3_num=0;

LED6_ON;

};

break;

case2:

//Display_AD_Data(wendu);//LED6_ON//加热开

if(p1_state!

=1)//1#池没有满 则P1打开

{

LED1_ON;p1_state=2;//P1开了,1#池当然不是是空的

}

if(p2_state!

=1)//2#池没有满 则P2打开

{

LED2_ON;p2_state=2;//P2开了,2#池当然不是是空的

}

if((t1_num>20)&&(p1_state!

=1))//时间到了,还没有收到满信号 则显示故障1;

{

Display_GuZhang1();//故障1

}

if((t3_num>20)&&(wendu<60));

{

Display_GuZhang1();//故障3

}

if((readkey=Get_Keystoke())==3)//1#池满  关闭P1

{

p1_state=1;LED1_OFF;

}

if((readkey=Get_Keystoke())==5)//2#池满  关闭P2

{

p2_state=1;LED2_OFF;

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

当前位置:首页 > 初中教育 > 英语

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

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