mega8与74HC165通讯有关问题
mega8与74HC165通讯问题图如上,程序如下C/C++ codevoid port_init(void){ PORTB 0x00 DDRB 0xAC}void
mega8与74HC165通讯问题
图如上,程序如下
C/C++ codevoid port_init(void){ PORTB = 0x00; DDRB = 0xAC;}void spi_init(void){ SPCR = 0x60; //setup SPI SPSR = 0x00; //setup SPI}unsigned char read165(void) //读74HC165函数{ PORTC &= ~0x01;//PC0输出一个负脉冲 PORTC |= 0x01; //刷新74HC165的数据 SPDR=DATA_74HC165; //载入74HC595最后一次的数据,目的是读取74HC165 [color=#FF0000]while(!(SPSR & (1<<spif))); 等待发送接收结束[/color]
现在程序停在红字的位置了,硬件是没问题的
[解决办法]这个给你几个建议
(1). 量一下PC0的信号有了么, 如果没有可能是PC0口配置有问题
(2). 量一下SCK输出了么, 如果没有输出,可能是SPI没启动,比如说SPI的时钟给了么
(3). 量一下MISO上有数据么,如果没数据, 可能是165上有问题
(4). 建议你循环里加一个计数超时,并返回读165的正确错误状态, 这样的程序更安全一些
[解决办法]你的SPCR设置的有问题吧, 设成从机了,看一下datasheet吧,那里面有例子
[解决办法]按键去抖的简单方法:
1)按键一般都是定时读取,例如每隔20毫秒~50毫秒以上读取一次;
2)如果连续多次读到按键按下(例如2~5次以上),才认为是一次按键按下。
[解决办法]同意楼上意见,一般按键的抖动20~200ms,普通的按键一般最多延时50ms就够了,某些机械按键延时可能就得多一点了。普通按键一次按下的过程最短可能也要超过300ms。按键释放时同样也有抖动问题。
如果想做的简单点,可以延时50ms(普通按键)采集一次,如果连续两次检测到同一按键按下,就认为有按键,这样操作绝大多数不会采集错,不过如果对按键按下的正确率要求100%,可能就得将采集时间设短点,多采集几次了。