标题: 请教为啥单片机+74hc595显示不正常? [打印本页]

作者: 13872888583    时间: 2024-4-1 20:38
标题: 请教为啥单片机+74hc595显示不正常?
晚上好,各位老师,请教一下我的程序是否有问题,单片机STC8H8K64U,两个74HC595推动四位数码管,刚开始采用延时程序,hour=1234.可以正常显示1234.后来采用定时中断显示,hour改为1111.显示444.请教一下,这样写程序是否正常,如果错误,该怎么改?谢谢

IMG_20240401_203010.jpg (829.43 KB, 下载次数: 72)

IMG_20240401_203010.jpg

51hei.png (22.23 KB, 下载次数: 83)

51hei.png

作者: lkc8210    时间: 2024-4-1 22:20
先把211行的k++移到213行之后
确保LED8[k]里k的值不会超过4
作者: 13872888583    时间: 2024-4-1 22:35
lkc8210 发表于 2024-4-1 22:20
先把211行的k++移到213行之后
确保LED8[k]里k的值不会超过4

高手,正常了,现在4个1111了。以前不明白,为啥自加加要放到后面。现在知道了
作者: xiaobendan001    时间: 2024-4-2 08:41
放前边也没问题吧,主要是后面的if(k>=4)改成3才对啊,因为=4就是led[4]就越界了。
作者: 13872888583    时间: 2024-4-2 10:13
xiaobendan001 发表于 2024-4-2 08:41
放前边也没问题吧,主要是后面的if(k>=4)改成3才对啊,因为=4就是led[4]就越界了。

不能是3,3就少一位了。
作者: xiaobendan001    时间: 2024-4-2 10:43
13872888583 发表于 2024-4-2 10:13
不能是3,3就少一位了。

3的话就要放前边,4就放后边,总之就是不能让数组越界。不越界还有一个办法,把数组定义大一些。
作者: 君工创    时间: 2024-4-2 15:11
if(K>3){K=0;)这样也可以吧。
作者: Hephaestus    时间: 2024-4-2 17:03
214、215行应该挪到217~219的括号内部,现在显示4个一样的数字看不出来,如果是1234就有大问题了。
作者: 13872888583    时间: 2024-4-2 18:58
君工创 发表于 2024-4-2 15:11
if(K>3){K=0;)这样也可以吧。

不可以,采用二楼那位师傅的就刚刚好
作者: 13872888583    时间: 2024-4-2 19:02
xiaobendan001 发表于 2024-4-2 10:43
3的话就要放前边,4就放后边,总之就是不能让数组越界。不越界还有一个办法,把数组定义大一些。

自加加放到前面,目前hour=1234,试过k=3,4,5.其中3少一位显示,4显示错误,还是少一位,5显示和4一样,最后一位乱码。
作者: 13872888583    时间: 2024-4-2 19:03
Hephaestus 发表于 2024-4-2 17:03
214、215行应该挪到217~219的括号内部,现在显示4个一样的数字看不出来,如果是1234就有大问题了。

没事,采用二楼那位师傅刚刚好,目前就是1234.
作者: xiaobendan001    时间: 2024-4-2 19:18
13872888583 发表于 2024-4-2 19:02
自加加放到前面,目前hour=1234,试过k=3,4,5.其中3少一位显示,4显示错误,还是少一位,5显示和4一样, ...

是,放前边的同时,判定那部分也要放前边,否则K=0的时候就无法参与显示了
或者你把数组改成LED8[5],然后把1234放到LED8[1]~LEN8[4],就一样能显示1234了。
作者: 13872888583    时间: 2024-4-3 08:16
xiaobendan001 发表于 2024-4-2 19:18
是,放前边的同时,判定那部分也要放前边,否则K=0的时候就无法参与显示了
或者你把数组改成LED8[5],然 ...

好的,谢谢,师傅。




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