找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 22074|回复: 17
打印 上一主题 下一主题
收起左侧

51单片机学习板的8个LED灯,想从中间往两边流水亮怎么用程序实现?请高手帮下

  [复制链接]
跳转到指定楼层
楼主
ID:321920 发表于 2018-5-13 12:30 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
用一个LED变量是可实现流水灯的,但用两个怎么实现?我用上面的方法,显示是只亮一个灯,请高手指点

单片机源程序:
  1. #include "reg52.h"                         
  2. #include<intrins.h>                 

  3. typedef unsigned int u16;           
  4. typedef unsigned char u8;

  5. #define led1 P2    
  6. #define led2 P2   

  7. void delay(u16 i)
  8. {
  9.         while(i--);        
  10. }


  11. void main()
  12. {
  13.         u8 i;
  14.         while(1)
  15.         {
  16.          led1=0xef;
  17.                 led2=0xf7;
  18.         delay(50000);  
  19.         
  20.                
  21.                 for(i=0;i<3;i++)         
  22.                 {
  23.                          led1=_crol_(led1,1);
  24.                         led2=_cror_(led2,1);
  25.                         delay(50000);  
  26.                 }
  27.                 for(i=0;i<3;i++)         
  28.                 {
  29.                          led1=_cror_(led1,1);
  30.                         led2=_crol_(led2,1);
  31.                         delay(50000);  
  32.                 }        
  33.                         
  34. }
  35. }
复制代码



评分

参与人数 1黑币 +8 收起 理由
cciejs12345 + 8 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:321920 发表于 2018-5-13 20:10 | 显示全部楼层
dzbj 发表于 2018-5-13 15:23
没编译 用记事本随便写的 不保证全对 你试试看吧 如果问题 自己想想怎么改 能改好也是进步啊 如果没问题 最 ...

感谢,学习了
回复

使用道具 举报

板凳
ID:321920 发表于 2018-5-13 20:15 | 显示全部楼层
奎尔塞拉 发表于 2018-5-13 15:29
我认为是你没有搞清楚最基本的8个灯一起闪烁,还有八个灯流水(就最原始的从左往右,一次亮一个的那种)
...

8个灯的流水我搞清楚了 ,我想设计一个从中间向两边流水,如果8个灯分别是1,2,3,4,5,6,7,8,  我的意思是  左边的4个按 4 3 2 1 同时右边的4个是 5678的顺序,也就是说,同时亮两个的流水效果
回复

使用道具 举报

地板
ID:321920 发表于 2018-5-13 20:15 | 显示全部楼层
8个灯的流水我搞清楚了 ,我想设计一个从中间向两边流水,如果8个灯分别是1,2,3,4,5,6,7,8,  我的意思是  左边的4个按 4 3 2 1 同时右边的4个是 5678的顺序,也就是说,同时亮两个的流水效果 ,
回复

使用道具 举报

5#
ID:321920 发表于 2018-5-13 20:59 | 显示全部楼层
dzbj 发表于 2018-5-13 15:23
没编译 用记事本随便写的 不保证全对 你试试看吧 如果问题 自己想想怎么改 能改好也是进步啊 如果没问题 最 ...

感谢调试成功,学习了这个思路
  1. #include "reg52.h"        
  2. typedef unsigned char uchar;

  3. typedef unsigned int uint;
  4. typedef unsigned int u16;         
  5. typedef unsigned char u8;

  6. void delay(u16 i)
  7. {
  8.         while(i--);        
  9. }


  10. uchar i=0;     

  11. uchar code a[]={0x18,0x24,0x42,0x81};      
  12. /*
  13. 0000 0000        0x00
  14. 0001 1000        0x18
  15. 0010 0100        0x24
  16. 0100 0010        0x42
  17. 1000 0001        0x81
  18. */


  19. void main()      
  20. {
  21.         while(1)   
  22.         {
  23.                 P2=a[i];              
  24.                 delay(50000);      
  25.                 i++;                 
  26.                 if(i==4)              
  27.                 {
  28.                   i=0;            
  29.                 }
  30.         }
  31. }
复制代码
[/code]
回复

使用道具 举报

6#
ID:321920 发表于 2018-5-14 05:23 来自手机 | 显示全部楼层
dzbj 发表于 2018-5-14 00:08
用我写的那种数组的方式 你想怎么亮都可以 数组的内容实际上就是P2端口的状态 你只要根据你需要的逻辑定 ...

是的,这个思路很直观,通用性也强,感谢
回复

使用道具 举报

7#
ID:321920 发表于 2018-5-18 09:12 | 显示全部楼层
#include "reg52.h"        
typedef unsigned char uchar;

typedef unsigned int uint;
typedef unsigned int u16;         
typedef unsigned char u8;

void delay(u16 i)
{
        while(i--);        
}


uchar i=0;     

uchar code a[]={0xe7,0xdb,0xbd,0x7e};      
/*
0000 0000        0x00
0001 1000        0x18
0010 0100        0x24
0100 0010        0x42
1000 0001        0x81
*/


void main()      
{
        while(1)   
        {
                P2=a[i];              
                delay(50000);      
                i++;                 
                if(i==4)              
                {
                  i=0;            
                }
        }
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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