华东交通大学课程设计报告
目 录
一、课设目的及内容..........................................................................1
二、设计的原理..................................................................................2
三、环境搭建及开发步骤..................................................................3
四、主要程序代码设计......................................................................7
五、运行测试结果..............................................................................9
六、心得体会及自己所做的亮点工作的特别说明.......................10
七、参考文献....................................................................................11
华东交通大学课程设计报告
一、课设目的及内容
1、实验目的
1).理解多任务调度机制
2).了解 A/D 转换原理
3).编程实现对模拟信号的采集
2、实验内容
1).使用多任务,每个任务监视一路 AD 转换,每一路 AD 转换的结果
在触摸屏上用一个波
2).表来表示,直观地显示每路 AD 的结果。可以通过文本框给每路 AD
设置警戒值,超出警戒
3).之后超出的部分会以闪动的方式显示。
4).求出四路通道的平均值,并绘制在显示屏上(平均值应该象其他通
道的值一样,可以根据实时采集值的变化而变化)。
5).报警,在超出阈值时报警一次,如果此后此通道的值不变则不再报
警,若此通道的值被调小为小于阈值而后又被调为大于阈值,则再次报警
一次。
6).设置时间和日期初值,并实时显示在 LCD 上(同各通道的值同屏显
示)。并能够在整点的时候发声提示。
第 1 页
华东交通大学课程设计报告
二、设计的原理
1、用 CreateTextCtrl 函数创建文本框,SetTextCtrlText 函数设置
文本框中的内容。
2、用 CreateListCtrl 函数创建列表框,ReLoadListCtrl 函数装载一
组字符串。
3、使用 OSTaskCreate 来创建系统任务。在 uCOS-II 系统中,任务的
优先级是不能相同的。比如:Main_Task 任务的优先级是 12,Key_Scan_Task
任务的优先级是 56。目前使用的 uCOS-II 的版本只支持 64 个任务,包括
8 个系统任务,用户可以使用的任务是 56 个。创建任务的时候,需要选择
合适的任务优先级(比如:14)。
4、通过 SetTextCtrlEdit 函数设置文本框是否处于编辑状态,使用
TextCtrlDeleteChar 和 AppendChar2TextCtrl 函数在文本框中删除和追加
字符。
5 、 键 盘 消 息 是 OSM_KEY , 列 表 框 选 择 改 变 消 息 是
OSM_LISTCTRL_SELCHANGE
6、使用 Rtc_IsTimeChange 函数,判断系统的时钟对应的某一位是否
改变。用 Rtc_Format 格式化系统的时钟格式得到 Unicode 字符串,可以
方便的显示到文本框控件里。
7、可以使用一个指针函数数组装载系统的各个功能(绘制图形、设置
时间、USB 下载)函数,便于管理。如下面的程序所示:
void*MainFunction[]={(void*)OnDrawBmp,(void*)OnSetTime,(void
*)OnUsb_Download};
其中,OnDrawBmp,OnSetTime,OnUsb_Download 函数就是对应的绘制图
形、设置时间、USB 下载功能函数。可以使用如下程序所示的方法调用指
定序列的函数:
((void(*)(void))(MainFunction[pMainListCtrl->CurrentSel]))()
其中,pMainListCtrl 表示指向系统主功能文本框的指针。
第 2 页
华东交通大学课程设计报告
三、环境搭建及开发步骤
1、在 ARM SDT 2.51 或 ADS1.2 中,打开实验一中创建好的模板,新
建一个项目 work1。把操作系统的所需要的头文件(*.h)和库文件(SDT 为
*.alf,ADS 为*.a)加入工程中。
2、打开 Main.c 文件。
3、重点分析 Main 函数中的代码,了解系统的启动过程。Main 函数的
代码如下:
int Main(int argc, char **argv)
{
ARMTargetInit(); //开发板初始化
OSInit(); //操作系统初始化
uHALr_ResetMMU();//复位 MMU
LCD_Init(); //初始化 LCD 模块
LCD_printf("LCD initialization is OK\n");//向液晶屏输出数据
LCD_printf("320 x 240 Text Mode\n");
initOSGUI();//初始化图形界面
LoadFont();//调 Unicode 字库
LoadConfigSys();//使用 config.sys 文件配置系统设置
LCD_printf("Create task on uCOS-II...\n");
OSTaskCreate(Main_Task,
(void
*)0,
(OS_STK
*)&Main_Stack[STACKSIZE*8-1],
Main_Task_Prio);// 创建系统任务
OSAddTask_Init();//创建系统附加任务
LCD_printf("Starting uCOS-II...\n");
LCD_printf("Entering graph mode...\n");
LCD_ChangeMode(DspGraMode);//变 LCD 显示模式为文本模式
InitRtc();//初始化系统时钟
Nand_Rw_Sem=OSSemCreate(1); //创建 Nand-Flash 读写控制权旗语,
初值为 1 满足互斥条
第 3 页
华东交通大学课程设计报告
件//
OSStart();//操作系统任务调度开始
//不会执行到这里
return 0;
}
通常多操作系统中的任务是一个无限循环,同样,Main_Task 也要陷
入一个无限循环。因为 uCOS-II 是占先式多任务操作系统,如果没有比
Main_Task 任务更高优先级的任务进入就绪状态,Main_Task 任务是不会
放弃 CPU 的控制权的。通过调用 OSTimeDly(INT16U ticks)函数,可以使
操作系统进行一次任务调度,并且执行下一个优先级最高的就绪状态的任
务。参数 Ticks 表示任务延时的节拍数,一旦规定的时间期满,该任务马
上又会从新进入就绪状态。
5、为在液晶屏幕和终端(串行口)上输出字符串(比如:Hello world!)
编写程序。可以分别使用 LCD_printf()和 Uart_Printf()函数。
提示:因为操作系统默认的液晶显示摸式是图形状态,必须通过
LCD_ChangeMode 函数设置液晶显示为文本摸式。建议在显示自己的文本的
时候先调用 LCD_Cls()函数清除屏幕。
6、编译并调试程序。
7、运行 Windows 系统下的超级终端(HyperTerminal)应用程序,如
图 2-1 所示新建一
个终端通信,取名为 arm。单击“确定”按钮。
第 4 页
华东交通大学课程设计报告
图 2-1 创建超级终端
8、选择终端的连接的串口(如串行口 1),如图 2-2 所示,设置通信
的格式和协议。
9、设置完成超级终端以后,打开开发板,按住开发板上的任意一键,
图 2-2 设置串行口
使开发板进入 BIOS
设置状态。如图 2-3 所示。
第 5 页
华东交通大学课程设计报告
图 2-3 系统的 BIOS 设置程序
10、按 PC 键盘的 U 键(要使超级终端处于活动状态),这时超级终端
上会显示如图 2-4
所示的信息。
11、这时,在“我的电脑”中可以发现多了一个“可移动磁盘”,这就
图 2-4 进入 U 盘状态
是开发板的海量
存储器 16M 非线性 Flash。开发板就像一个 U 盘,可以通过“我的电
脑”进行操作。把生成
的 system.bin 文件通过 USB 下载到嵌入式开发板中,复位系统,运
行并检查输出结果。
提示:system.bin 文件是系统通过 BIOS 引导以后,装入内存中运行
的默认文件名。
第 6 页