标题: 单片机驱动74hc595程序问题,想不明白 [打印本页]

作者: a66301208a    时间: 2018-11-22 21:18
标题: 单片机驱动74hc595程序问题,想不明白
如图所示:i=0X14;  就是00010100, 然后用了ser=i>>7; 右移后i应该等于00000000才对,然后i<<1; for循环移位寄存器应该接收的也是00000000才对, 最后595输出的是00000000才对。一个灯都不亮。为啥图片上的程序反而成功运行了!成功点亮第4排和第6排的灯!想不明白!

IMG_20181122_210442.jpg (68.36 KB, 下载次数: 49)

IMG_20181122_210442.jpg

IMG_20181122_210426.jpg (58.54 KB, 下载次数: 37)

IMG_20181122_210426.jpg

作者: 沧浪    时间: 2018-11-22 22:58
i>>7是在编译器里面是先拷贝了一个I ,然后把这个拷贝的I右移的7位,最后把这个变动的值给了ser,而原来的i并没有变化,那么在I<<1位后则变成0010 1000,那么则是第4位和第6位亮喽

作者: phang    时间: 2018-11-23 09:27
你是不是忘了“ i = ser;”???
因为没有“ i = ser ;” 现在程序是 i=0x14; i<<=1; ( i = 0x28 , 即0010 1000,是不是4、6排亮??)
作者: a66301208a    时间: 2018-11-23 11:02
沧浪 发表于 2018-11-22 22:58
i>>7是在编译器里面是先拷贝了一个I ,然后把这个拷贝的I右移的7位,最后把这个变动的值给了ser,而原来的i ...

有一点点明白了,不过为什么要用set=i>>7,直接用ser=i不可以吗?直接用set=i不正好74h595的ser不就直接接收00010100的左边第一个0吗?第二次循环00101000的第二位,这样依次循环。
作者: a66301208a    时间: 2018-11-23 11:04
phang 发表于 2018-11-23 09:27
你是不是忘了“ i = ser;”???
因为没有“ i = ser ;” 现在程序是 i=0x14; i

ser是接收字节00010100的最高位,还是只能接收一个位?
作者: 沧浪    时间: 2018-11-23 12:35
a66301208a 发表于 2018-11-23 11:04
ser是接收字节00010100的最高位,还是只能接收一个位?

ser应该是一个io口吧,他只能能接收一个比特位

作者: 沧浪    时间: 2018-11-23 12:37
a66301208a 发表于 2018-11-23 11:02
有一点点明白了,不过为什么要用set=i>>7,直接用ser=i不可以吗?直接用set=i不正好74h595的ser不就直接接 ...

直接用ser=I,这是把I的最低位给了ser,但是,他应该是从I的最高位开始发送的,所以就不能直接赋值了
作者: a66301208a    时间: 2018-11-23 16:00
沧浪 发表于 2018-11-23 12:35
ser应该是一个io口吧,他只能能接收一个比特位

set=i>>7是不是相当于00010100 右边的7位0010100给移走了,只剩最左边的0位,然后把最左边的0赋值给了ser?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1