之前觉得可以实现,想了几天经历了想法,编程,飞线,重新设计PCB,SMT,调试,断断续续整了1个多月有了这个帖子。
先直接原理图和代码
为了省打样费并且很多电路也就调试1次,所以10多个电路放一块10X20cm的板子上直接PCB+SMT。回来自己补器件和切割了。
上面的PL,CP,Q7按照NXP的74HC165命名,每家都不一样。 1:一般都是上电时读1次拨码开关就可以了。所以读取时把中断关闭,防止处理完中断回来放电时间或充电时间长造成出错。 2:程序流程;改下Xbit为8或16就是对应都8bit或16bit /**改为读32bit*/ u32 OneIO(void) { u8 i; u32 dat; dat=0; //1:IO默认输出高电平 SET_IO_OUT; IO_High; Delay100us(); //2:长时间低电平,给PL一个低电平。 IO_Low; Delay10ms(); //3:IO输出1,短延时。这时PL为高电平,CP还是低电平,Q7输出数据 IO_High; Delay10us(); //4:IO设为输入,短延时后读IO(IO的数据被Q7控制) SET_IO_IN; Delay10us(); dat=Read_IO; //5:IO输出1,长延时,确保CP=1 SET_IO_OUT; IO_High; Delay10ms(); for(i=0;i<Xbit-1;i++) { //6:IO输出0,短延时 IO_Low; Delay10us(); //7:IO输出1,短延时 IO_High; Delay10us(); //8:IO设为输入,短延时下后读IO(IO的数据被Q7控制) SET_IO_IN; Delay10us(); dat=dat<<1; dat|=Read_IO; //9:IO输出1,长延时,确保CP=1 SET_IO_OUT; IO_High; Delay10ms(); } return dat; } 示波器波形:
|