完成硬件的连接后,用仿真器打断点,看键盘按下后,能否进入中断地址,通常是低电平有效作为键盘按下后的标志,平时信号线是高电平,某些机型需要外接上拉10K电阻到VCC
键盘能进入中断入口后,写中断服务程序,用一个寄存器作为状态标志,比如寄存器R3,上电时钟工作后,将R3置零,表示正常工作状态,
主程序中用switch语句或类似的思想,判断R3的值,以便程序进入不同的状态.
中断处理程序中,比如用外中断0作为模式键,外中断1作为调整键.在INT0的中断入口写程序,让状态标志R3加一后结束中断处理程序
主函数中每当判断状态标志R3的值为1时,离开正常工作状态,进入小时调整状态,
中断处理程序INT1的代码,先判断主机处于什么状态,若是正常工作状态,就忽略按键,直接结束中断处理程序.若是R3标志处于1,即小时调整状态,就将小时的值取出,加一,再写回去.
同理可假设R3的值为2,是分钟调整状态,主程序仍然停止计时,中断处理程序INT1仍然将分钟加一
其他的你自己可以想出来了
你这个思路不对,中断是每到一定时间进一次中断程序的吧,你想光靠中断实现那么长时间,是不行的。。
还有,既然是中断了,你不用等他的到来,时间到了,它自然就近了中断程序了。
先要好好研究研究中断是怎么个流程,中断后怎么处理,等等。。。。
sbit key_st=P3^6void main (void)
{
u8 flagqt=0x5a
u16 tcnt=0
while(tcnt<3000)
{
tcnt++
delay(1)
if(key_st!=0)tcnt=0
}
i = 0
aa = 0
//fang1 = 1
IO_Init()
tomd ()
tcnt=0
while(1)
{
key_i ()
EC ()
}
if(key_st==0)
{
tcnt++
delay(1)
if(tcnt>=3000) ((void(code *)(void))0x0000)()
}
else tcnt=0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)