| T0Init();放到while(1)里????其他没看,就这个已经是致命问题了。 |
Laptop 发表于 2017-11-29 10:15 还没有解决 |
| 还有就是最后那个定时器的中断,用了寄存器using 1会有问题。。。不晓得为啥 |
wulin 发表于 2017-11-26 10:26 是的,如果没有按键按下就还在数码管,但本意也是如此 KEY2按下才会去做要做的,相当于确认键。 现在问题就是 定时器启动的位置在数码管后面在1s测量会有问题 其他是没有问题的 |
Laptop 发表于 2017-11-25 21:25 你的问题根源根本不在定时器而是在smg()和smg2(),你在这两个子程序里使用死循环while(1),到此除了中断程序外其它程序都无法执行。 |
| !!!求大神 |
Laptop 发表于 2017-11-19 16:25 对的是这样 不过 我定时的时间是50ms 利用中断来增加定时时间。然后 关于设定 我也是这样想的 设定一次就够了 后面需要的时候再打开 但是因为这个定时器的打开在数码管前和后有很大区别 在后面1s的时候有问题 然后我就调着调着就把启动放在初始化里了 但是这其实影响不大 主要问题是 启动在数码管后面才是正确的但是有问题。。。放在前面就可以。。。很是郁闷 |
Laptop 发表于 2017-11-19 16:25 你还没有掌握定时器的使用方法。普通51单片机如果外接12M晶振,定时器最大定时周期65.5ms,想得到更长的定时时间通常使用定时器中断计数。不是特别需要不要在程序中频繁更改定时器设定,而是根据需要打开或关闭定时器或定时器中断。所以定时器初始化函数放在主循环前面,如果有必要改变定时器定时周期只要在其函数中打开定时器TR0前重装TH0、TL0初值即可。 |
wulin 发表于 2017-11-19 07:13 定时器提前开的话还没选择几秒测一次就已经测完了 |
|
void main() { T0Init(); while(1) { smg(); ds1302(); smg2(); } } |