能详细讲解一下程序的功能和怎么实现的吗?从延时函数开始不懂了。在做课设,真的急
推荐回答
写程序之前一定要先从系统的级别构建一下程序的结构。你的程序中,有数码管扫描显示、按键扫描、RTC三部分。在构建程序结构的时候,考虑到几个部分的特点,一般情况如下:1、如果时间显示到秒,应在100ms左右读一次RTC。2、为了保证显示不删,应在20ms以内完成一次显示刷新,假设你用了20个数码管显示日期和时间。3、按键是随机的,需要检测,一般按键按下的时间不小于50ms,可以考虑在10ms检测一次按键。程序可以定义一个1ms的定时器,设置几个变量对定时器进行计数。每个1ms定时到时,自加对定时器的计数,并更新数码管显示,20ms更新完20个数码管。每到10ms检测一次按键,记录状态,与上次状态进行比较,如果连续两次或三次检测到按键按下,设置按键动作的标记,并确定如何更改显示,改变显存。如果不在设置状态,每100ms读一次RTC的值,将值更新到显存。如果数码管需要调整亮度,可以将1ms定时器改为100us,分给每个数码管的1ms内,改变其点亮的时间,就可以调出十种亮度。用这种架构做这个程序,处理器负担很轻,对所有的外设的响应一样迅速。你会感到51单片机还是能干很多活的。
连仲月2019-12-22 00:37:03
提示您:回答为网友贡献,仅供参考。
其他回答
-
人眼的视觉暂留时间大概在二十四分之一秒左右所以一般电视电影至少是24帧以上,才会看起来是连续的动作,延时的时间设置小于40ms即可。延时太短会加重cpu的负担,所以具体数值要自己权衡。写延时函数有两个方法:1.如果有用到实时操作系统,可以用OS的API,比如:sleep202.没有用RTOS时,一般用循环语句来实现延时。具体循环次数需要通过系统的主频来计算。代码例子循环次数100x500=50000次,延时时间=单次循环的时间x50000:inti=0,j=0;fori=0;i<100;i++{forj=0;j<500;j++{;}。
龚孝雄2019-12-22 00:19:23
-
实话是,没有固定的参数,原因是,首先51的主频是不一定的,然后一般延时看的是对应的汇编语言代码,也就是对应的一条汇编指令执行的时间而定的。因此,从C语言里面不容易实现精确的延时处理。一般的处理方式是,使用keil或者其他软件的调试,在延时函数的前后加上断点,查看前后执行的时间,然后逐渐的修改for循环里面的数值,使之比较接近想要的延时时间。由于使用延时的不精确性,建议使用定时器实现类似的功能即可。
齐方杰2019-12-22 00:07:07