加载中…
正文 字体大小:

简单万年历设计实验报告

(2011-11-25 19:24:28)
标签:

杂谈

分类: 实验报告

实验目的:

     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的多任务调度有了初步的认识,尤其是OSTimeDly()函数的意义。另外对

数码管的动态显示,即如何在同一时间让数码管显示不同的数。利用的是人眼的视觉残留,使用的多重循环技术。值得一提的是,在循环时,数码管依次显示的时候,要注意数码管之间要留有一点时间,即delay一下,否则数码管的显示不够清楚。另外获取键值也不能采用查询方式,一方面时间太长,另一方面对采样的时间有限制,即只有在某一时间内按键才能被采样到。

   另外在实验时,还要注重对操作过程的设计。在默认情况下,日期和Time循环显示,Time显示时间稍长于日期,这样做可以看到Time中‘秒’的自动增加,视觉体验较好。按‘F’键进入时间设置模式,此时数码管显示“d1 H2”的字样,表示按1修改日期,按2修改Time,然后再按‘F’就进入其中设置,此时会显示当前的日期或Time,通过按“1~6”选择其中的某一位,选择后数码管只会显示所选择的那一个数,最后再按下新值,时间设置就完成了。

 

不足:1.没有设计一次修改多个值

2.没有设计退出键,目前的程序是在设置完一个值后自动退出,不够方便

 

0

阅读 评论 收藏 转载 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有