uint temp; ...... date[0]=temp;//取temp低8位,高位溢出舍去 date[1]=temp>>8;//右移取temp高8位,低位溢出舍去 |
按键的电阻都改为上拉,低有效。 |
数据类型定义的不对,uchar只有八位,你却想整个十六位 |
uchar temp;只有8位 date[1]=(uchar)((temp<<8)&0x00ff);左移8位清零 改作uint temp; |
不是应该i<16吗,应该循环16次才对吧 |
uchar i,j,h; uint temp; uchar date[2]; HC165_PL = 0; HC165_PL = 1; if(HC165_OUT==1) temp |= 0x01; for(i=0;i<15;i++) { temp = temp << 1; HC165_CLK = 0; _nop_(); _nop_(); HC165_CLK = 1; if(HC165_OUT==1) temp |= 0x01; } date[0]=(uchar)(temp&0x00ff); date[1]=(uchar)((temp>>8)&0x00ff); //高8位 |
本帖最后由 开心就好hhhh 于 2021-7-19 16:43 编辑 之前的老兄说得对,你应该用uint来定义,你将一个八位的数据左移16次肯定不对的呀 |
(请手工把点替换成.) www点elecfans点com/yuanqijian/yinjiaotu/20180202628701_a.html 这里解释的很详细了,我不知道你为啥把pl拉低又立马拉高是什么意思? |
uchar temp;只有8位啊~ date[1]=(uchar)((temp<<8)&0x00ff);左移8位就清零了 應改作uint temp; |
沧兴电子 发表于 2021-5-10 18:29 8位8位移,移两次就可以了,我也是用你上面的程序调不出来,有大佬解释一下吗。 |
附上高清电路图 |