本科毕设论文--二维高精度液晶显示电子指南针_第1页
本科毕设论文--二维高精度液晶显示电子指南针_第2页
本科毕设论文--二维高精度液晶显示电子指南针_第3页
本科毕设论文--二维高精度液晶显示电子指南针_第4页
本科毕设论文--二维高精度液晶显示电子指南针_第5页
已阅读5页,还剩48页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图6.2.2所示:图STYLEREF2\s7.1.SEQ图\*ARABIC\s23工控板使用μC/OS-II操作系统后的软件结构应用程序流程有了μC/OS-II实时操作系统作为系统应用程序的平台,整个应用程序的开发在各个方面都能有所提高。由于μC/OS-II实时操作系统是基于占先式的任务调度,所以要使整个系统中任务的执行满足实时性的要求,那么在任务优先级的安排上就有了一定的原则:中断关联性。与中断服务相关联的任务应该安排尽可能高的优先级。以便及时处理异步事件,提高系统系统的实时性;紧迫性。越紧迫的任务优先级越高,通常任务与ISR向关联;关键性。越关键的任务优先级应该越高,以保证任务被CPU执行的机会;频繁性。对于周期性执行的任务,执行越频繁,则周期越短,允许耽误的时间也就越短。故此类的任务应该安排在优先级越高的地方;快捷性。耗时越短的任务,优先级应该越高;传递性。信息传递上游的任务高于下游任务的优先级。根据整个系统信号的处理流程可以将系统的任务划分为四个大的任务。主要任务的关联如REF_Ref195418133\h图7.2.1所示:图STYLEREF2\s7.2.SEQ图\*ARABIC\s21系统主要任务关联根据任务优先级安排的原则和系统任务的关联,本次设计任务中任务优先级的安排:最高优先级的主机对从机的节点轮询任务。该任务主要负责对节点进行轮询,其间涉及到节点轮询超时的限制,该任务满足紧迫性、关键性和频繁性几个原则。次优先级的主机对节点数据的读取和存储任务。该任务满足紧迫性和关键性原则。人机界面管理任务。该任务比较的频繁,但是其耗时比较多。所以优先级略低。从REF_Ref195418133\h图6.2.3可以看出系统的软件主要是围绕四个大的任务完成:CAN-bus节点轮询;这一任务主要完成CAN-bus主站和从站通信的维系。节点数据读取;这一任务主要完成对从站节点上传的瓦斯浓度等数据的读取并将得到的数据进行转换,以便能够直观的显示出当前浓度所对应的电压值,同时也可以进行进一步的转换。和前一个任务不同的是,该任务的执行会受到第一个任务和人机界面的控制。如果一个节点丢失或者加入,本任务会自动识别。当人机界面需要显示某个节点的数据时,则将选则的节点的数据读取后送给终端显示。任务流程如REF_Ref195427987\h图7.2.2所示:图STYLEREF2\s7.2.SEQ图\*ARABIC\s22节点数据接收任务流程数据处理和存储;该任务还将接收到的数据封装成简易数据库规定的格式,然后按照数据库规定的时间格式进行分类存储,以便查询。本任务受到数据接收任务的约束,在没有数据接受的时候该任务处于等待状态。该任务的流程如REF_Ref195429328\h图7.2.3所示:图STYLEREF2\s7.2.SEQ图\*ARABIC\s23数据存储任务流程人机界面的管理。系统的人机界面主要由系统的一个任务来管理。整个任务又可以分为两个小的部分,显示刷新部分和键盘管理部分,详细情况如REF_Ref195587749\h图7.2.4所示:图STYLEREF2\s7.2.SEQ图\*ARABIC\s24人机界面管理任务显示管理部分,分为静态区域和动态区域。所谓的静态区域指的是在系统正常运行中不需要经常刷新的部分,例如整个主界面的背景图。只有在进行功能切换的时候才有可能改变主背景图。反之,动态区域指的是在系统正常运行的时候需要不断更新的区域,例如系统当前的时间,某个节点具体通道的数据等等。动态区域刷新耗费CPU时间比较多,所有整个界面中,动态区域占的面积比较的少。键盘管理部分,分为功能键和数值键。功能键是进入系统某项功能的识别。这类按键有一个特点就是,只要检测到有功能键按下,系统就进入相应的系统功能。而不需要多次的读入该类键的键值。反之,数值键一般用来输入系统所需要的各种参数,每次输入都有可能不只一个数据,这就需要在系统运行中多次的扫描数值按键的输入。较之,功能键,数值键耗费更多的CPU时间。本次设计的功能键完成的功能比较多如REF_Ref195430819\h图7.2.5所示:图STYLEREF2\s7.2.SEQ图\*ARABIC\s25系统功能键功能系统实时时间设置功能的实现流程:图STYLEREF2\s7.2.SEQ图\*ARABIC\s26系统实时时间设置流程整个人机界面管理任务流程中只有键盘扫描和必要的动态背景扫描处于轮询状态。其他的功能服务函数都独立了出来,需要时才调用,这样可以减轻人机界面任务的负担。系统采集间隔、浓度报警上限和用户观测节点设置实现流程:图STYLEREF2\s7.2.SEQ图\*ARABIC\s27系统采样间隔等参数设置流程系统采样间隔、浓度报警阀值和用户观测节点的设置丰富了系统便捷应用。结束语经过三个多月的努力,我终于设计出了一个简易的数字存储示波器。从年前的思索,到过年后回到3+1实验班的正式调研,查阅了很多相关的资料。由于数字存储示波器方面的资料现在还很少,因此从查资料到实际动手做花费了很长的时间。但这段时间却让我学习到了对某一领域如何从不了解到掌握其重要的方法、原理。本论文主要介绍了本设计中的系统设计、信号调理部分和数据采集部分,基本上是硬件的设计。尽管设计本数字存储示波器时也研究了很多算法,写了大量的程序,但限于时间和篇幅,所以对其介绍较少。之所以选择更多地介绍硬件而不是软件,是因为我觉得我在整个设计的过程中,硬件的收获是最大的。在整个研究开发过程中,我始终保持着认真、仔细的态度,将理论转化为实践,不断提高自己的硬件系统设计的软件设计的能力,看到自己的劳动有了成果,我感到很高兴。然而,我所完成的仅仅是实验室阶段很小的一部分,数字存储示波器的各项技术指标的提高、诸多功能的完善还需要进一步的研究和开发。此外在完成基本功能的基础上,还需要努力提高软件的效率、硬件系统的稳定性、降低功耗等,可以说,剩下的工作量是相当大的。参考文献范新宇.100MHz数字存储示波表样机的研究与试制:[硕士学位论文].四川:电子科技大学,2005.周立功,张华.深入浅出ARM7——LPC213x/214x(上册)[M].北京:北京航空航天大学出版社,2005.周立功公司.ARM嵌入式系统基础教程(第二版)[M].北京:北京航空航天大学出版社,2007.周立功公司.ARM嵌入式系统实验教程(三)[M].北京:北京航空航天大学出版社,2005.周立功公司.ARM嵌入式系统实验教程(三)扩展实验[M].北京:北京航空航天大学出版社,2005.JeanJ.Labrosse[美].嵌入式实时操作系统uC/OS-II(第二版)[M].邵贝贝等译.北京:北京航空航天大学出版社,2003.周航慈,吴光文.基于嵌入式实时操作系统的程序设计技术[M].北京:北京航空航天大学出版社,2006.任哲.嵌入式实时操作系统uC/OS-II原理及应用[M].北京:北京航空航天大学出版社,2006.MAXIM.MAX4187Datasheet[PDF].www.maxim-ic.com,2005.黄志伟编著.全国大学生电子设计竞赛系统设计[M].北京:北京航空航天大学出版社,2006.MAXIM.MAX4167Datasheet[PDF].www.maxim-ic.com,2001.常玉燕,吕光译.日本电子电路精选[M].北京:电子工业出版社,1990.佐藤一朗[日].集成运算运算放大器电路设计实用手册[M].韩健青,译.北京:北京航空航天大学出版社,1989.MOTOROLA.MC12429Datasheet[PDF].www.21icsearch.com,2001.ANALOGDEVICES.AD9288Datasheet[PDF].www.analog.com,2004.TexasInstruments.SN74V293Datasheet[PDF].www.ti.com,2003.BonnieBaker[美].嵌入式系统中的模拟设计[M],李喻奎译.北京:北京航空航天大学出版社,2006.附录源程序系统初始化代码段:/****************************系统初始化代码*******************************************/TargetInit();/*系统初始化,版本号验证*/PinInit();/*管脚初始化*/OSStatInit();/*统计任务初始化*/File_init();/*文件系统初始化*/do{OSAddFileDriver(GetLFFSCommand(),Get256MDriverInfo());/*安装256M(2Kbyte扇区)电*//*子盘文件系统驱动*/}while(RETURN_OK!=OSChangeDrive("A:"));FOB_ACTIVE=1;Err=I2cInit(I2C0,I2c_para,NULL);/*初始化I2C如果不成功死机*/if(Err==OPERATE_FAIL){ I2CHandle=-1; while(1); }else{ I2CHandle=1;/*设置I2C设备操作句柄为可操作*/ } I2cRead(I2C0,CAT1025,&StartAddr,ONE_BYTE_SADDR,Task0Buf,4);/*获取CAT1025中的采样间隔*/while(1){Err=I2cGetFlag(I2C0);if(Err==I2C_READ_END||Err==I2C_IDLE){break;}OSTimeDly(1);}GetFrq=Task0Buf[0];/*系统启动初始化采样间隔*/WRLVL=(Task0Buf[1]<<8)|Task0Buf[2];/*恢复浓度值*/JunNum=Task0Buf[3];/*掉电恢复节点编号*/UartInit(UART0,uart_para0,NULL);/*初始化UART0*/SetISRFuction(UART0_IRQ_CHN,7,(void*)UART0_ISR);UART_FD=1;CANInit(CAN1,pucCanArg,NULL);/*CAN控制器1初始化*/SetDefIRQAddr((void*)CAN_ISR);系统节点轮询任务:while(1){/*节点数据轮询任务*/ iCAN_Master_Pool(piCANMaster);/*轮询节点*/OSTimeDly(OS_TICKS_PER_SEC/50);}系统节点扫描任务:charStatTab[64];/*节点状态表*/voidTASK3(void*pdata){unsignedcharErr=0;uint8err;uint8JunCnt=0;uint8data[16]={0};int32PerTimes=0;uint8line,row;pdata=pdata;JunCnt=0;PerTimes=0;while(1){OSSemPend(StChgTblSem,0,&err);/*等待本次节点数据读取完成*/ RdJunHandle=-1;/*锁住外部程序读取节点*/for(JunCnt=0;JunCnt<64;JunCnt++){ Err=iCAN_Master_GetAI(piCANMaster,JunCnt,data,16); if(Err==0){/*该节点不存在*/ StatTab[JunCnt]=0;/*相应的状态字节设为0*/ }else{ StatTab[JunCnt]=1; } row=(JunCnt/10)+11;/*计算该点在表格中的位置*/ line=(JunCnt%10)+5; if(CurScreen==1){/*判定是主界面则刷新*/ if(StatTab[JunCnt]==1){ Printf((line<<2),row,1,33,44,"O"); }else{ Printf((line<<2),row,1,33,44,"X"); } } } RdJunHandle=1;OSTimeDly(OS_TICKS_PER_SEC*5);/*每隔5s刷新一次节点状态表*/}}数据存储任务:charTotalBuf[1540];/*64节点数据缓存区*/uint32pTotalBuf=0;/*节点数据缓存区指针*/uint8ReadTimes=0;voidTASK4(void*pdata){HANDLEFHandle;uint8Counter;uint8LoCnt=0;uint8data[16]={0};/*用于接收CAN上传采样数据的缓存*/uint32temp;uint32CancelTimes;uint8DataOk=0;uint8i=0;charPerBuf[77];charDIR[]="A:\\DayLog";charFilePath[]="A:\\DayLog\\2008_03_24.log";charHourH[1];charHourL[1];charMinuteH[1];charMinuteL[1];charJNumH[1];charJNumL[1]; pdata=pdata;CancelTimes=0;while(1){ if(RdJunHandle>0){/*判定可以读取节点数据*/ for(LoCnt=0;LoCnt<64;LoCnt++){ memset(data,0,16);/*清除接收数组避免数据串扰*/ if(StatTab[LoCnt]==1){/*判定该节点需要读取数据*/ iCAN_Master_GetAI(piCANMaster,LoCnt,data,16); for(Counter=0;Counter<8;Counter++){ temp=(data[Counter<<1]<<8|data[Counter<<1+1]); CANbuf[Counter]=((temp-0x8000)*10000)>>15; if(CANbuf[Counter]>10000){/*读出的值异常则置为0*/ CANbuf[Counter]=0; } if(LoCnt==JunNum){/*当前节点和需要显示的节点相同*/ for(temp=0;temp<8;temp++) CANDisBuf[temp]=CANbuf[temp];/*把CAN数据存入显示缓存中*/ } }/********************************************************************************************************/ if(CancelTimes>13){/*扔掉起始几个可能错误的数据*/ HourH[0]=(CurTime.Hour/10)+'0'; HourL[0]=(CurTime.Hour%10)+'0'; MinuteH[0]=(CurTime.Minute/10)+'0'; MinuteL[0]=(CurTime.Minute%10)+'0'; JNumH[0]=(LoCnt/10)+'0'; JNumL[0]=(LoCnt%10)+'0'; sprintf(PerBuf, "%c%c:%c%c:%2d%5dmv%5dmv%5dmv%5dmv%5dmv%5dmv%5dmv%5dmv%c%c\r\n", HourH[0],HourL[0],MinuteH[0],MinuteL[0],CurTime.Second, CANbuf[0],CANbuf[1],CANbuf[2],CANbuf[3], CANbuf[4],CANbuf[5],CANbuf[6],CANbuf[7], JNumH[0],JNumL[0]); pTotalBuf=DataOk*77;/*每次偏移77字节*/ for(i=0;i<77;i++){ TotalBuf[pTotalBuf+i]=PerBuf[i];/*把当前读取的数据放入缓冲区*/ } DataOk++; } } }//endoffor(LoCnt=0;...)/********************************************************************************************************/ if(DataOk!=0){ if(CancelTimes>13){ ReadTimes++; }/*当缓存区内有有效数据时*/ if(ReadTimes==10){/*读取10次后一次存储*/ /*连续N次的读入的数据入库*/ while(FindDLHandle>0){/*如果处于查找状态则等一下*/ OSTimeDly(OS_TICKS_PER_SEC/10); }/*如果当前查找文件则等待*/ sprintf(FilePath,"A:\\DayLog\\%4d_%d_%d.log",/*生成带日期的文件名*/ CurTime.Year, CurTime.Month, CurTime.Day); FHandle=OSFileOpen(FilePath,"RW");/*打开或创建文件*/ if(Not_Open_FILE!=FHandle){/*文件打开成功*/ OSFileSeek(FHandle,0,SEEK_END);/*将指针移到文件末*/ OSFileWrite((uint8*)TotalBuf,/*写数据入文件*/ DataOk*77,/*缓冲区总有效字节数*/ FHandle); OSFileClose(FHandle); OS_ENTER_CRITICAL(); OSAllCacheWriteBack(); OS_EXIT_CRITICAL(); pTotalBuf=0; DataOk=0; ReadTimes=0; } } } OSSemPost(FindFileEn);/*发送目录树可查找信号量*/ OSSemPost(StChgTblSem);/*发送可以更改节点状态表信号*/ CancelTimes++; if(CancelTimes>14){/*丢弃错误的数据*/ if(WRLVL<CANbuf[0]){ OSSemPost(DANGERSem); }else{ } OSTimeDly(OS_TICKS_PER_SEC*GetFrq);/*系统正常工作后采样间隔*/}else{ if(CancelTimes==14){ OSMakeDir(DIR);/*避免出现0.0.0.log*/ OSChangeDir(DIR); Printf(8,22,1,32,44,""); OSTimeDly(OS_TICKS_PER_SEC); }else{ Printf(8,22,1,32,44,"正在遍历节点和收集节点数据,请稍等..."); OSTimeDly(OS_TICKS_PER_SEC); } } }}//endofwhile}相关图片终端截图:主界面+帮助界面+日志观察界面iCAN4017模块图:致谢在本论文完成之际,我首先要向我的指导老师刘维清和王祖麟教授表达我最诚挚的谢意。尤其是王祖麟教授,在我大四一年的学习生活中其次我要向广州周立功单片机发展有限公司的董事长兼总经理周立功先生致以由衷的感谢。正是由于他立志于教育改革,他投资成立了我们这个3+1创新实验班,正是在这个实验班里,使我的知识水平有了质的提高,也正是在这个班里,我们有了一个很好的做毕业设计的环境。同时周立功公司也给了我们一些我们需要的设计器材和元器件,这样才使得我们的毕业设计能够比较好的完成。我还要感谢我们示波器小组的另外成员刘彦龙和周海鑫同学。我们在一起进行许多学术上的探讨,他们给予了我极大的帮助,我们一起攻克了许多技术难关,与他们愉快的合作将会成为我最美好的回忆。最后,我还要特别要向我的家人表示由衷的感谢,正是他们的无私奉献和鼎力支持,我才能顺利的完成我的学业。向百忙之中抽出宝贵时间来评阅这篇论文的各位专家教授致以衷心的感谢!

学位论文原创性声明学位论文作者(本人签名):年月日学位论文出版授权书论文密级:□公开 □保密(___年__月至__年__月)(作者签名:_______导师签名:______________年_____月_____日_______年_____月_____日

独创声明本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。尽我所知,除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论