找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3304|回复: 7
收起左侧

单片机驱动74hc595程序问题,想不明白

[复制链接]
ID:425921 发表于 2018-11-22 21:18 来自手机 | 显示全部楼层 |阅读模式
如图所示:i=0X14;  就是00010100, 然后用了ser=i>>7; 右移后i应该等于00000000才对,然后i<<1; for循环移位寄存器应该接收的也是00000000才对, 最后595输出的是00000000才对。一个灯都不亮。为啥图片上的程序反而成功运行了!成功点亮第4排和第6排的灯!想不明白!
IMG_20181122_210442.jpg
IMG_20181122_210426.jpg
回复

使用道具 举报

ID:111517 发表于 2018-11-22 22:58 | 显示全部楼层
i>>7是在编译器里面是先拷贝了一个I ,然后把这个拷贝的I右移的7位,最后把这个变动的值给了ser,而原来的i并没有变化,那么在I<<1位后则变成0010 1000,那么则是第4位和第6位亮喽
回复

使用道具 举报

ID:396960 发表于 2018-11-23 09:27 | 显示全部楼层
你是不是忘了“ i = ser;”???
因为没有“ i = ser ;” 现在程序是 i=0x14; i<<=1; ( i = 0x28 , 即0010 1000,是不是4、6排亮??)
回复

使用道具 举报

ID:425921 发表于 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的第二位,这样依次循环。
回复

使用道具 举报

ID:425921 发表于 2018-11-23 11:04 来自手机 | 显示全部楼层
phang 发表于 2018-11-23 09:27
你是不是忘了“ i = ser;”???
因为没有“ i = ser ;” 现在程序是 i=0x14; i

ser是接收字节00010100的最高位,还是只能接收一个位?
回复

使用道具 举报

ID:111517 发表于 2018-11-23 12:35 | 显示全部楼层
a66301208a 发表于 2018-11-23 11:04
ser是接收字节00010100的最高位,还是只能接收一个位?

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

使用道具 举报

ID:111517 发表于 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的最高位开始发送的,所以就不能直接赋值了
回复

使用道具 举报

ID:425921 发表于 2018-11-23 16:00 来自手机 | 显示全部楼层
沧浪 发表于 2018-11-23 12:35
ser应该是一个io口吧,他只能能接收一个比特位

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表