找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于51单片机流水灯程序累加问题

[复制链接]
跳转到指定楼层
楼主
ID:1054576 发表于 2023-5-21 13:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机流水灯
有没有简化的办法让流水灯每循环1次进行累加点亮最后一个,最后全部点亮
试过<<n和>>n
试过_crol_和_cror_
后来都失败了
最后用最简单,最粗暴的方法算是完成了
就是程序太多 杂乱,8个灯都这么多程序,如果是16个以上就没完没了了,有没有什么方法简化一下


sbit  a0 = P1^0;
sbit  a1 = P1^1;
sbit  a2 = P1^2;
sbit  a3 = P1^3;
sbit  a4 = P1^4;
sbit  a5 = P1^5;
sbit  a6 = P1^6;
sbit  a7 = P1^7;
void liushuideng_LJ()
{      
    a0=0;
                yanshi(200);//延时
                a0=1;a1=0;
                yanshi(200);               
                a1=1;a2=0;
                yanshi(200);               
                a2=1;a3=0;
                yanshi(200);
                a3=1;a4=0;
                yanshi(200);
                a4=1;a5=0;
                yanshi(200);
                a5=1;a6=0;
                yanshi(200);
                a6=1;a7=0;
                yanshi(200);                       

          a0=0;
                yanshi(200);
                a0=1;a1=0;
                yanshi(200);               
                a1=1;a2=0;
                yanshi(200);               
                a2=1;a3=0;
                yanshi(200);
                a3=1;a4=0;
                yanshi(200);
                a4=1;a5=0;
                yanshi(200);
                a5=1;a6=0;
                yanshi(200);                       

          a0=0;
                yanshi(200);
                a0=1;a1=0;
                yanshi(200);               
                a1=1;a2=0;
                yanshi(200);               
                a2=1;a3=0;
                yanshi(200);
                a3=1;a4=0;
                yanshi(200);
                a4=1;a5=0;
                yanshi(200);

          a0=0;
                yanshi(200);
                a0=1;a1=0;
                yanshi(200);               
                a1=1;a2=0;
                yanshi(200);               
                a2=1;a3=0;
                yanshi(200);
                a3=1;a4=0;
                yanshi(200);

          a0=0;
                yanshi(200);
                a0=1;a1=0;
                yanshi(200);               
                a1=1;a2=0;
                yanshi(200);               
                a2=1;a3=0;
                yanshi(200);

          a0=0;
                yanshi(200);
                a0=1;a1=0;
                yanshi(200);               
                a1=1;a2=0;
                yanshi(200);               

          a0=0;
                yanshi(200);
                a0=1;a1=0;
                yanshi(200);               

          a0=0;
                yanshi(200);
    P1=0xff;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:73992 发表于 2023-5-21 17:26 来自手机 | 只看该作者
0000 0001b,左移后加1。1000 0000b,右移后加0x80。,
回复

使用道具 举报

板凳
ID:624769 发表于 2023-5-21 18:12 | 只看该作者
unsigned char code        Head[] = {0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
unsigned char code        Tail[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void        lsd()
{
        char        i,j;
        j = 7;
        while(j>=0)
        {
                i = 0;
                while(i <= j)
                {
                        P0        = Head[j] & Tail[i];
                        yanshi(200);//延时
                        i++;
                }
                j--;
        }
}
回复

使用道具 举报

地板
ID:1054576 发表于 2023-5-21 18:57 | 只看该作者
188610329 发表于 2023-5-21 18:12
unsigned char code        Head[] = {0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
unsigned char code        Tail[] =  ...

谢谢大佬,我刚才COPY过去试了一下 完全没问题,我再研究一下原理查一下资料,主要是对“&”这个符号不了解,因为我才学了一个多星期。再次感谢。
回复

使用道具 举报

5#
ID:1054576 发表于 2023-5-21 19:00 | 只看该作者
lyonkon 发表于 2023-5-21 17:26
0000 0001b,左移后加1。1000 0000b,右移后加0x80。,

很抱歉我学的不久,有点看不懂,不过还是谢谢您的提议,等我学多一点我再回顾一下。还有二楼已经帮我解决这个问题了。
回复

使用道具 举报

6#
ID:996773 发表于 2023-5-22 09:33 | 只看该作者
象数码管显示字符一样做个数据表不就行了,按数字查表显示,上百个都没有问题,这是基本功

都要会的
回复

使用道具 举报

7#
ID:161164 发表于 2023-5-22 09:44 | 只看该作者
  1. void main()
  2. {       
  3.         u8 i,j, temp1;
  4.     while (1)
  5.     {
  6.                 temp1 = 0;
  7.                 for(i=0;i<8;i++)
  8.                 {
  9.                         for(j=0;j<(8-i);j++)
  10.                         {
  11.                                 P0 = ~(0x01<<j | temp1);
  12.                                 delayms(100);
  13.                         }
  14.                         temp1 |= 0x80 >> i;
  15.                 }
  16.                        
  17.     }
  18. }
复制代码
回复

使用道具 举报

8#
ID:526543 发表于 2023-5-22 13:23 | 只看该作者
void liushuideng_LJ()
{
    unsigned char pattern = 0x01;  // 初始模式,只点亮第一个灯
    int i;

    for (i = 0; i < 8; i++) {
        P1 = pattern;  // 设置灯的状态
        yanshi(200);  // 延时
        pattern <<= 1;  // 将模式左移一位,使下一个灯点亮
    }

    P1 = 0xFF;  // 全部灯点亮
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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