简单万年历设计实验报告

2011-11-25 19:24阅读:
实验目的:
1.掌握7段数码管的动态显示;
2.掌握4*4键盘键值的获取;
3.掌握μC/OS系统的任务调度;
实验内容:
利用实验箱上的6个数码管实现万年历,要求:
1. 正常工作时,显示一秒钟的年月日,显示一秒钟的小时、分钟、秒,二者交替显示。年月日格式: YYMMDD;小时、分钟、秒:HHMMSS。
2. 对于年、月、日、小时、分钟、秒中的任意一个时间可以进行设置,设置的功能键和输入方法自行定义,但是对于设置值要进行容错处理。
预备知识:
1. 了解数码管的动态显示
2. 了解μC/OS的任务调度
实验设备:
1. 硬件:JX44B0教学实验箱、PC机;
2. 软件:PC操作系统,ADT IDE集成开发环境
程序流程:
1. 创建3个任务TaskCON,TaskLED,TaskSEG,TaskCON优先级最高,TaskTIME其次,TaskDAY最低。
2. 启动任务调度;首先执行TaskCON,TaskCON中启动时钟节拍定时器,开始多任务调度。
3. TaskCON执行时先判断有无F键按下,有则执行时间设置子程序,否则执行时间自动递进子程序,子程序执行结束后执行OSTimeDly(100),让任务TaskCON暂停1秒,执行任务TaskLED;
4. TaskLED执行程序,若1秒已到,则TaskCON抢占TaskLED的CPU资源,CPU开始执行任务TaskCON,等TaskCON执行结束了再回到TaskLED的断点处继续执行。再过一秒,若TaskLED任在执行,则继续之前的步骤。若在下一秒到来之前,TaskLED已经开始执行它的OSTimeDly(100),则此时CPU再执行优先级更低的TaskSEG
5. TaskSEG的执行程序是无限循环,如果此时有优先级高的任务已经就绪,CPU则被抢占,否则一直执行TaskSEG。
实验代码:
附录
总结:对μC/OS的多任务调度有了初步的认识,尤其是OS
TimeDly()函数的意义。另外对
数码管的动态显示,即如何在同一时间让数码管显示不同的数。利用的是人眼的视觉残留,使用的多重循环技术。值得一提的是,在循环时,数码管依次显示的时候,要注意数码管之间要留有一点时间,即delay一下,否则数码管的显示不够清楚。另外获取键值也不能采用查询方式,一方面时间太长,另一方面对采样的时间有限制,即只有在某一时间内按键才能被采样到。
另外在实验时,还要注重对操作过程的设计。在默认情况下,日期和Time循环显示,Time显示时间稍长于日期,这样做可以看到Time中‘秒’的自动增加,视觉体验较好。按‘F’键进入时间设置模式,此时数码管显示“d1 H2”的字样,表示按1修改日期,按2修改Time,然后再按‘F’就进入其中设置,此时会显示当前的日期或Time,通过按“1~6”选择其中的某一位,选择后数码管只会显示所选择的那一个数,最后再按下新值,时间设置就完成了。
不足:1.没有设计一次修改多个值
2.没有设计退出键,目前的程序是在设置完一个值后自动退出,不够方便