基于51定时器的时钟设计

[复制链接]
651927693 发表于 2012-7-26 08:28 | 显示全部楼层
就楼上的定时器不准的问题,可以通过反汇编的方式或者仿真来求得从中断到TH和TL重新被赋值所需的时间,相应地,修改定时器初值即可
 楼主| 雷影少年 发表于 2012-7-26 08:38 | 显示全部楼层
谢谢LS,不过你那只能解决部分问题,版主说的是每次执行按键扫描程序时定时器依旧在计数二产生的误差,只要在执行按键扫描后给定时器重新再付初值就可以避免。
不过因为定时器初值不精确产生的误差会被累积,而这个程序中执行按键扫描产生的误差最大不过50ms,并且每次执行按键扫描程序是都会产生新的误差,且不会被累积
yuanyepeng 发表于 2012-7-26 15:40 | 显示全部楼层
值得探讨,.............
wukunshan 发表于 2012-7-26 22:06 | 显示全部楼层
本帖最后由 wukunshan 于 2012-7-26 22:35 编辑

你的这个矩阵键盘扫描还挺牛X的,用到递归调用。没错,在这个程序里,除了F键,其他键都是正常的。当F键按下松手后,函数递归调用,是一个死循环!所以,F键按下当然得不到你想要的结果了。
解决方法,在最后的大括号上面加一个语句,防止递归无休止调用:
             .
             .   
             .
             key_num =0;
             }
             else  return 0;//函数返回
         }
 楼主| 雷影少年 发表于 2012-7-26 22:32 | 显示全部楼层
O(∩_∩)O谢谢ls
是递归调用的问题,因为若F不松开函数就一直进行递归调用,没调用一次key_num自加1,所以就出现了类似抖动的现象。
哈哈~想通了~
解决问题去
 楼主| 雷影少年 发表于 2012-7-27 09:09 | 显示全部楼层
你的这个矩阵键盘扫描还挺牛X的,用到递归调用。没错,在这个程序里,除了F键,其他键都是正常的。当F键按下松手后,函数递归调用,是一个死循环!所以,F键按下当然得不到你想要的结果了。
解决方法,在最后的大括 ...
wukunshan 发表于 2012-7-26 22:06

没看到你重新编辑的帖子,我把递归调用去掉了,对递归的理解不够啊~
还要继续学C呀~
sedatefire 发表于 2012-8-15 17:12 | 显示全部楼层
递归?
在51里面玩递归
那是闲得蛋疼了
sedatefire 发表于 2012-8-15 17:13 | 显示全部楼层
reentrant
神的领域:funk:
sedatefire 发表于 2012-8-15 17:14 | 显示全部楼层
要高速51
ram够大
懂得函数传参规则
才敢涉水...
51版本的ucos就一堆reentrant
 楼主| 雷影少年 发表于 2012-8-15 19:11 | 显示全部楼层
吃了亏才知道,递归果然不能乱用啊~
xiangyi0801 发表于 2012-8-16 15:16 | 显示全部楼层
路过,学习了
哒哒哒的马达 发表于 2013-1-13 09:57 | 显示全部楼层
长知识了膜拜@wukunshan。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部