基于AVR的铅酸蓄电池管理系统设计

[09-14 01:17:17]   来源:http://www.88dzw.com  电子制作   阅读:8660

文章摘要:(3) 触摸屏控制程序 这一部分程序的思想是:若有触摸动作,取触点坐标值,判断其是否属于 LCD上显示的控制按钮的坐标范围,若是则做出相应的控制调整,若否则无动作。返回触点坐标的子函数为 TchScr_GetScrXY(int *x,int *y)。在本设计中,定义了 3个控制按键,它们用于传递控制信息。 (4) 绘图的API函数 在uC/OS-II系统环境下,绘图必须通过使用绘图设备上下文(DC)来实现。绘图设备上下文(DC)中包括与绘图相关的信息,如:绘图坐标、画笔颜色、画笔宽度等等。在实际使用时,使用CreateDC()创建绘图设备上下文,使用DestoryDC(pdc)删除绘图

基于AVR的铅酸蓄电池管理系统设计,标签:电子小制作,http://www.88dzw.com
(3) 触摸屏控制程序
    这一部分程序的思想是:若有触摸动作,取触点坐标值,判断其是否属于 LCD上显示的控制按钮的坐标范围,若是则做出相应的控制调整,若否则无动作。返回触点坐标的子函数为 TchScr_GetScrXY(int *x,int *y)。在本设计中,定义了 3个控制按键,它们用于传递控制信息。
(4) 绘图的API函数

在uC/OS-II系统环境下,绘图必须通过使用绘图设备上下文(DC)来实现。绘图设备上下文(DC)中包括与绘图相关的信息,如:绘图坐标、画笔颜色、画笔宽度等等。在实际使用时,使用CreateDC()创建绘图设备上下文,使用DestoryDC(pdc)删除绘图设备上下文,这两条语句在程序中应该成对出现。通过使用 LineTo( )、TextOut()、Circle( )、MoveTo( )等函数,可以将采样值实时的显示到 LCD上。
在 LCD绘图时以下两点值得注意:
(a)在 LCD绘图时要反复使用 LineTo( ) 和MoveTo( )两个函数,但在使用该函数之前,一定要注意到 LCD的分辨率。只有知道了 LCD分辨率,才能知道 LCD的坐标值的范围,从而得到正确的设定结果。本设计使用的 LCD分辨率是640*480。也就是说,初始坐标系的 x值范围为(0≤x≤640),y值范围(0≤y≤480)。
(b)由于LCD宽度有限,当横坐标 x>LCDWidth时,波形就超出显示范围了。解决方法是在 LCD上显示自左至右画出的波形,当画到 LCD的最右端时,清一次屏幕后,重新从 LCD的左端向右画线,同时横坐标的值也相应的改变。
(5) PC机上数据显示程序

   为了更好的记录和分析数据,我们在 PC机上用 VC编写了程序,这样可以很好保存和处理数据,为性能分析和系统故障恢复提供了有利条件。
6.结论
uC/OS-II实时操作系统是开放源码且得到实际验证的软件平台,而ARM处理器具有强大的32位RISC性能。基于uC/OS-II及ARM,能大量减轻研发任务,提高研发速度,为在短时间内设计出控制性能优秀的数据采集系统创造了条件。本文数据采集系统已成功应用于工业场合温度和水位的实时测控,达到了很好的效果。
本文作者创新点:摒弃了传统单片机数据采集,采用移植性好的嵌入式 uC/OS-II系统,具有后续开发简单,系统稳定性好,可靠性高等特点。本设计可以很容易得移植到其他数据采集系统当中去。

www.88dzw.com4. 系统软件设计
软件设计主要是 uC/OS-II移植和任务的编写。uC/OS-II是一个免费的、可裁减、源码开放、结构小巧、抢占式的实时多任务嵌入式内核,主要面向中小型嵌入式系统,具有执行效率高、占用空间小、可移植性强、实时性能优良和可扩展性强等特点[2]。
为了方便移植,绝大部分 uC/OS-II的代码是用 ANSI C语言编写的;但是仍需要用 C语言和汇编语言写一些与处理器硬件相关的代码,这是因为uC/OS-II在读/写处理器寄存器时,只能通过汇编语言来实现。与处理器相关的代码包括 OS_CPU.H、OS_CPU_A.ASM和OS_CPU_C.C三个文件,所以移植的主要任务就是修改这三个文件。
(1) 在修改 OS_CPU.H中与处理器和编译器相关的代码时要注意几点 [3]:
(a)不同的处理器有不同的字长,uC/OS-II为了确保其可移植性,不使用 C的int,short,long等数据类型,因为这些数据类型是与编译器相关的,是不可移植的。
(b)修改 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏。uC/OS-II需要先禁止中断再访问代码的临界区,并且在访问完毕后重新允许中断。OS_ENTER_CRITICAL()的功能是关中断,在 S3C2410上通过 OS_CPU_A.ASM中的 INTS_OFF()函数来实现。OS_EXIT_CRITICAL()用于开中断,通过 OS_CPU_A.ASM中的INTS_ON()函数来实现。

(c)OS_STK_GROWTH用来定义堆栈生长方式, 置 0表示堆栈从下往上增长,置 1表示
堆栈从上向下增长。而在本设计中使用的是堆栈从上向下增长 S3C2410处理器,所以置1。(d)OS_TASK_SW()是一个任务切换宏,用于从低优先级任务切换到高优先级任务。它将任务切换函数OSCtxSw()封装起来。
(2) 修改OS_CPU_C.C中与操作系统相关的OSTaskStkInit()函数
OSTaskStkInit()用于任务堆栈初始化,OSTaskCreate()和 OSTaskcreateExt()通过调用OSTaskStkInit()来初始化任务的堆栈结构。图 3显示了OSTaskStkInit()在建立任务时,任务堆栈初始化的形式。

上一页  [1] [2] [3]  下一页


Tag:电子制作电子小制作维修教程知识 - 电子制作

《基于AVR的铅酸蓄电池管理系统设计》相关文章