最简单的是根据要显示的内容直接对显示变量进行位操作,就不用考虑数组了 |
yzwzfyz 发表于 2022-9-26 11:15 谢大师指点,B站上有高手做了一个数码管跑马灯视频,正反流水、斜跑、追光等等很多复杂效果,很是酷炫。我刚学51,C语言基础不扎实,属于现学现卖的程度,现在是一看数组就头晕的状态 ![]() https://www.bilibili.com/video/BV1fJ411b7cU/?spm_id_from=333.337.search-card.all.click |
很简单的事: 台面上无论有多少个LED灯,只要你能将特定的一些LED灯,轮流亮、灭就达成了跑马了。 举一反三:滚字、闪动、闪光标、斜走字都一样。 下面教你一个通用的方式: 本例你有4个数码管,计8*4个LED灯。 1、用一个数组来表达每一个LED的明暗,本例:一个数组=4个字节,计32位,每位的0/1对应一个LED灯的暗/明。 2、将每一种显示状态用一个这个数组用表达:例如:全亮={FFH,FFH,FFH,FFH};全暗={00H,00H,00H,00H},如此你有100个状态,就建立100数组。 本例转一圈,共状态,建8个数组就行了。 3、写个程序,每间隔一段时间依序取出一组数据,送至IO口去显示LED……,循环重复。 以上思路简单、清晰、还易实现。显示机动灵活,修改数组就玩转了各种显示方式了。 如果是点阵LED,做个红心,弄个灯塔,摆个方阵,上移、下跳、斜跑……随意,全在数组中编辑(EXCEL表中排排,导入到数组中),程序都不用改动。 |
wulin 发表于 2022-9-25 06:37 多谢大师指导,感觉您代码里有好多技巧,C语言控制单片机已经用的得心应手了,我还得继续学习提高啊! |
ningsy 发表于 2022-9-24 23:44 给你补充正反转显示,纠正s的数据类型。 ![]() |
15,14,13,11,7,57,49,41,25,56 |
感谢各位前辈指导,尤其感谢8楼wulin大师,您这个代码容我好好消化下,脑子已经绕晕了![]() |
像显示数字那样,搞个字形,按数字那样显示。 |
看原理图,找到每段对应代码,做个数组,按顺序读出数字中数字输出到端口。 |
你的想法没错,就是万能的状态机嘛,一个个写倒是没必要,又不是Verilog,完全可以用数组存储状态,然后循环调用 你的P0不复位确定不会影响下一个状态? |
![]() ![]() |
把现在代码里的显示数据取个反 |
遇到一个新问题:把代码带入主程序,也许是delay时间太长,主程序都不干活了,电机不转了![]() ![]() |
先显示 [ ] ,再逐段熄灭。 |
先想办法让指定的段亮起来,然后按顺序执行,就实现了数码管笔划跑马灯。 |
不规则的、万能的码表! |