用51单片机设计的数字时钟为什么有时候按键没有反映

2024-11-16 07:30:18
推荐回答(4个)
回答1:

估计是程序中的中断没有处理好。
我猜是你在使用中断时,对端口进行了直接操作而造成的。

建议:
1、把显示缓冲区放在RAM中,在主程序中LED直接调用显示RAM的内容。这样,只有主程序操作端口;
2、定时中断时,只要修改RAM内容即可,达到修改显示时间的目的;
3、按键操作时,根据按键,对RAM进行修改,同样能起到修改显示时间的目的。

由于看不到程序或流程,只能这样猜测了。
不知这样的回答,满意否?

回答2:

1、检查你单片机的寄存器是否冲突,或者重用的情况,或者自己定义数据类型错误,或者某变量加完后没清零,或者程序运行中某变量超出所定义的类型范围。或者有可能有其他的数据溢出情况等,好好检查,调试的时候可以屏蔽掉一部分如:中断,或者某个模块只能一个一个慢慢的试了,耐心点。
2、也有可能是你按键程序做的有问题。
**附带一段简短的检测端口是否为低电平程序
bit SetUp=1;
bit SetDown=1;
sbit KeyUp =P1^0;//加数 按键接口
sbit KeyDown=P1^1;//减数 按键接口
unsigned char LocalData=0;//时钟的某位
main()
{
while(1)
{
if((KeyUp==0)&&(SetUp==1)) //按键加
{
LocalData++; //数据加1
}
SetUp=KeyUp;

if((KeyDown==0)&&(SetDown==1))//按键减
{
LocalData--; //数据减1
}
SetDown=KeyDown;
//add you code here!
}
}

回答3:

检查你的软件。如果有条件的话在线调试一下,没法调试的话就加点跟踪语句,例如检测到按键后点个灯或者某一位数码管之类。这都是基本的调试技巧。

回答4:

看一下端口定义正确没有,