记住: 串行通讯时,如果一个数据串入了,你必须在一个串行周期内将它取走,否由下一个数据来了,它就会被冲掉。 你的程序能不能做到这一点呢?会不会数据来了,你的程序还在某个地方DELAY呢? |
知道你用bai的是51核的单片机,但du不知道你用的是哪一种规格型号?K1接的哪根I/O?这根I/O会不会与外部中断有关?单片机是否开放了外部中断?会不会因外部中断的高优先级别导致这种现象的发生?会是增强型的51单片机吗?如果是,那么K1相关I/O又是如何配置的呢? |
核心思想:以按键松开作为执行标准。 PS:你那个消抖处理时间也太长了吧!!! |
你没做按键按下时长的处理,按下发送完一边如果你没及时松开按键而程序又进行第二次扫描就会再次发送数据了,你可以试一下不同按下按键到放开的时间,你一直按下就会一直发送了。 |
本帖最后由 wulin 于 2020-8-8 21:20 编辑 void button() { unsigned char k; if(!key1||!key2||!key3) { delay(20); if(!key1||!key2||!key3) { if(!key1) k=address_one; else if(!key2) k=address_two; else if(!key3) k=address_three; SBUF=k; while(!TI); TI=0; while(!key1||!key2||!key3); } } } |