找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1448|回复: 15
收起左侧

求解51单片机相关的流水灯与LCD1602…实在做不出来

[复制链接]
ID:1050937 发表于 2022-11-14 22:35 来自手机 | 显示全部楼层 |阅读模式
因为是手工板,有四个按键和led灯都在P1口,流水用移位函数不行呐,其他想不出能满足下列要求的了,而且怎么才能将流水灯和呼吸灯转换周期结合到LCD1602上来显示啊?
1.png
回复

使用道具 举报

ID:1050937 发表于 2022-11-14 22:47 来自手机 | 显示全部楼层
求大佬帮帮忙,给孩子点建议
回复

使用道具 举报

ID:123289 发表于 2022-11-15 09:13 | 显示全部楼层
换个思想吧,没有方向、流水这一说!!!
1、将各个灯的明暗状态,看作是的个数组的组元素(A1,A2,A3,A4……)。A的每一位0/1对应一个灯的明暗。
2、每间隔一个时间TG,切换一个组元素,送出显示。
这样,改变TG的大小,就改变了速度。
改变,A1,A2,A3,A4值(或排序),就改变的LED灯的显示状态。
如果,A1,A2,A3,A4……的组合,形成左移的效果,看上去就左移了;形成右移的效果,看上去就右移了;看上去形成跳动的效果,看上去就跳动了……
你想怎么玩就怎么玩!
程序构思巧妙,易写,逻辑清晰。
你要玩的花色,就是在如何将LED的各种显示组合,编制了A1,A2,A3……
如果,你设计了N个方案(单灯左移,单灯右移,双灯左移,双灯右移,暂停、全闪、……),就做成N的数组。每按一次键就换一个数组取值,显示。
回复

使用道具 举报

ID:1050937 发表于 2022-11-15 09:22 来自手机 | 显示全部楼层
yzwzfyz 发表于 2022-11-15 09:13
换个思想吧,没有方向、流水这一说!!!
1、将各个灯的明暗状态,看作是的个数组的组元素(A1,A2,A3,A4… ...

大哥,你确定这不是粘贴复制,在我求助的另一个也是这样………
回复

使用道具 举报

ID:161164 发表于 2022-11-15 11:11 | 显示全部楼层
移位函数不行就用穷举啊~
  1. switch(i)
  2. {
  3.         case 0:
  4.                 LED1 = 0;
  5.                 LED2 = 1;
  6.                 LED3 = 1;
  7.                 LED4 = 1;
  8.         break;
  9.         case 1:
  10.                 LED1 = 1;
  11.                 LED2 = 0;
  12.                 LED3 = 1;
  13.                 LED4 = 1;
  14.         break;
  15.         case 3:
  16.                 ...
  17.         break;
  18. }
复制代码


可以独立呼吸灯吗?
可以独立LCD1602显示吗?
回复

使用道具 举报

ID:521890 发表于 2022-11-15 14:29 | 显示全部楼层
不记得,那个大佬的视频说过,不要移端口,设置变量,移变量再赋值给端口。
回复

使用道具 举报

ID:509408 发表于 2022-11-15 17:28 | 显示全部楼层
1、首先在定时器里模拟pwm调光。比如定时器定时100us 声明一个灰度自增变量LED_VB_A,累加到100就置0.  如  if(++LED_VB_A>100)    LED_VB_A = 0;,此时调光频率也100HZ够用了
2.  创建保存led亮度的数组LED_V[4],其数值范围0~100 ,0最暗,100最亮,把它们放到定时器中不断与自增变量比较。大于LED_VB_A 对应IO口置1 小于就置0 这样就实现了pwm调光效果。如 if(LED_V[0]>LED_VB_A)     P3.0 = 1;
else                                  P3.0 = 0;  //这里是举例了

//渐亮渐灭代码演示
while(LED_V[0]<100)  {LED_V[0]++; Delay_ms(10);}  //渐亮
while(LED_V[0]>0)     {LED_V[0]--; Delay_ms(10);}    //j渐灭
此代码只是举例。在模块化编程中还是不要使用while  delay这种方法等。

3、关于流水灯和呼吸的切换也很好弄。做好各效果切换标志(即流水灯、呼吸灯的效果切换flag),再创一个记录数组LED_V状态的数组StatusLED[4] 。0代表熄灭,1代表点亮,呼吸灯效果就一开始依
StatusLED中值作出动作。如 StatusLED【0】 = 0 就代表LED_V【0】=0此时应该把它渐亮起来。StatusLED[0 = 1就代表LED_V[0]=100(最大亮度) 此时应该将其渐灭下去,依次类推。
4、切回流水灯时就反过来。和状态数组StatusLED【】比较对应赋值(因其数组中的值没有变动过),依靠效果标志切回到对应流水函数中。

最后你如果会模块化编程 上诉思路应该也很容理解了
回复

使用道具 举报

ID:123289 发表于 2022-11-16 11:05 | 显示全部楼层
是复制粘贴,但绝对是自己写的。
遇到同类的问题,就复制粘贴一下,不必重写的。
当初写的时候,也是花时间的。
回复

使用道具 举报

ID:1050937 发表于 2022-11-16 15:18 来自手机 | 显示全部楼层
yzwzfyz 发表于 2022-11-16 11:05
是复制粘贴,但绝对是自己写的。
遇到同类的问题,就复制粘贴一下,不必重写的。
当初写的时候,也是花时 ...

噢噢,这样啊,感谢感谢,但是还是不会
回复

使用道具 举报

ID:308903 发表于 2022-11-17 08:23 | 显示全部楼层
去看看一个叫吴坚鸿大佬的开源帖子
回复

使用道具 举报

ID:332444 发表于 2022-11-17 12:03 | 显示全部楼层
功能一旦复杂,时间安排就有可能发生冲突,时间安排不恰当的话,运行起来感觉就怪的,因此,慎重考虑时间安排问题就显得很重要,也要花费较大精力进行设计考量。
回复

使用道具 举报

ID:1050937 发表于 2022-11-18 22:57 来自手机 | 显示全部楼层
lkc8210 发表于 2022-11-15 11:11
移位函数不行就用穷举啊~



穷举之后呢,怎么结合起来呢?
回复

使用道具 举报

ID:1050937 发表于 2022-11-18 22:59 来自手机 | 显示全部楼层
tzs233 发表于 2022-11-15 17:28
1、首先在定时器里模拟pwm调光。比如定时器定时100us 声明一个灰度自增变量LED_VB_A,累加到100就置0.  如  ...

我不懂每个按键如何才能想实现反向,加减速,转换流水灯这样?哦还有lcd再显示工作时间与周期,这是我不明白的,救救孩子吧,能不能具体点
回复

使用道具 举报

ID:1050937 发表于 2022-11-18 23:01 来自手机 | 显示全部楼层
各位大佬,能不能具体点,我51基础差有些你们说的不是很明白,我就是想知道怎么给每个独立按键赋予实现每个功能,怎么才能一连串结合起来
回复

使用道具 举报

ID:161164 发表于 2022-11-20 10:58 | 显示全部楼层
本帖最后由 lkc8210 于 2022-11-21 09:31 编辑
风晓 发表于 2022-11-18 23:01
各位大佬,能不能具体点,我51基础差有些你们说的不是很明白,我就是想知道怎么给每个独立按键赋予实现每个 ...

基础差就不单单一两句教得了
去B站看单片机教程吧~
听说江科大自化协说得不错
回复

使用道具 举报

ID:308903 发表于 2022-11-21 08:22 | 显示全部楼层

再回来看,一看就知道楼主没听我意见,去看他的开源贴
你把下面几节给研究透了,就不会迷茫

捕获.PNG
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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