我正在写一篇基于AT89C52单片机的数字时钟设计。下面是我的论文后面的程序图。 15
是与DS1302,2个四位一体的7段数码管组成的一个数字时钟。下面是我附的图片。哪位大虾能不能提笔。针对我的图片扩充下对流程设计的说明。要文字的叙述主程序设计图读DS13...
是与DS1302,2个四位一体的7段数码管组成的一个数字时钟。下面是我附的图片。哪位大虾能不能提笔。针对我的图片扩充下对流程设计的说明。要文字的叙述
主程序设计图
读DS1302中断及闹铃检测流程图
功能选择中断操作的程序流程图 展开
主程序设计图
读DS1302中断及闹铃检测流程图
功能选择中断操作的程序流程图 展开
2个回答
展开全部
思路有点问题,以上所列的这些功能不需要使用中断来处理。
中断不是不能用,但如果没有必要,能不能还是不要用,中断属于非线性的处理方式,不可控的因素太多,比如,中断嵌套,重入。如果处理不好,会极大的降低系统的可靠性。
你所列的这些功能,并不需要精确的延时。举个例子,你秒讯闪烁时,应该是亮0.5秒,灭0.5秒,要如果你亮0.45秒,灭0.55秒,再亮0.52秒,灭0.47秒,有什么关系吗?正常使用时根本不会感觉到任何差别。
比较合理的做法是 以判断定时闹钟为例,在主程序中控制主循环的总时间,比如,确保每500ms主程序循环一次。这个循环的时间不需要很准确,500ms循环一次,或者400ms循环一次,甚至再短一些也没关系,只要控制最大不超过500ms就可以。每0.5秒检查一下闹钟,然后给出提示,用户不会感到有什么不舒服的。
具体是多少时间需要综合考虑,比如你要处理定时闹钟,每1秒钟处理一次即可,如果要处理按键,这个时间可以提高到100ms,这样按键时不会有明显的迟顿。综合考虑会一般取最短的一个延时,控制主循环的延时就可以。
以我的经验,你的系统只需要开一个比较短的定时中断进行显示扫描,并在定时中断处理过程中顺便维护一个计时器用于主程序同步就足够。像这样,
static unsigned iCounter;
_isr_t0 ( void )
{
// 每5ms中断一次
iCounter+=5;
// 显示扫描
}
main( void )
{
while( 1 )
{
如果iCounter 增加了500ms,则: 读1302, 检查闹钟
}
}
中断不是不能用,但如果没有必要,能不能还是不要用,中断属于非线性的处理方式,不可控的因素太多,比如,中断嵌套,重入。如果处理不好,会极大的降低系统的可靠性。
你所列的这些功能,并不需要精确的延时。举个例子,你秒讯闪烁时,应该是亮0.5秒,灭0.5秒,要如果你亮0.45秒,灭0.55秒,再亮0.52秒,灭0.47秒,有什么关系吗?正常使用时根本不会感觉到任何差别。
比较合理的做法是 以判断定时闹钟为例,在主程序中控制主循环的总时间,比如,确保每500ms主程序循环一次。这个循环的时间不需要很准确,500ms循环一次,或者400ms循环一次,甚至再短一些也没关系,只要控制最大不超过500ms就可以。每0.5秒检查一下闹钟,然后给出提示,用户不会感到有什么不舒服的。
具体是多少时间需要综合考虑,比如你要处理定时闹钟,每1秒钟处理一次即可,如果要处理按键,这个时间可以提高到100ms,这样按键时不会有明显的迟顿。综合考虑会一般取最短的一个延时,控制主循环的延时就可以。
以我的经验,你的系统只需要开一个比较短的定时中断进行显示扫描,并在定时中断处理过程中顺便维护一个计时器用于主程序同步就足够。像这样,
static unsigned iCounter;
_isr_t0 ( void )
{
// 每5ms中断一次
iCounter+=5;
// 显示扫描
}
main( void )
{
while( 1 )
{
如果iCounter 增加了500ms,则: 读1302, 检查闹钟
}
}
追问
跪求文字解说。每个图100字左右就好 其他的不需要。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询