找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5079|回复: 11
收起左侧

51单片机如何让一个灯闪烁 其余7个灯流水 求帮助

[复制链接]
ID:499984 发表于 2019-3-28 16:11 | 显示全部楼层 |阅读模式
如题
回复

使用道具 举报

ID:412827 发表于 2019-3-28 19:41 | 显示全部楼层
直接操作一个P1口,然后进行移位,再次操作P2.1不停的取反就行
回复

使用道具 举报

ID:423511 发表于 2019-3-28 20:31 | 显示全部楼层
给你来个简单例子
#include <reg52.h>
       
#define led P2            //P2连接led,共阳极连接

void delay(int z)      //1ms延时
{
        int x,y;
        for(x=z;x>0;x--)
         for(y=110;y>0;y--);
}

void main()              
{
        while(1)
        {
                led=0x7f;
          delay(100);
                led=0xbf;
          delay(100);
                led=0x5f;
          delay(100);
                led=0xef;
          delay(100);
                led=0x77;
          delay(100);
                led=0xfb;
          delay(100);
                led=0x7d;
          delay(100);
                led=0xfe;
          delay(100);
        }
}
回复

使用道具 举报

ID:416287 发表于 2019-3-28 20:54 | 显示全部楼层
你可以用一个io口控制闪烁一个io口控制另外七个灯流动闪烁 比如先是第一个灯亮 0西   或者你的io口比较多  可以用
回复

使用道具 举报

ID:416287 发表于 2019-3-28 20:56 | 显示全部楼层
你可以用一个io口控制闪烁一个io口控制另外七个灯流动闪烁 比如先是第一个灯亮 0x01然后每好多秒 移位一次 0x01>>1 这样  这是最简单的 或者你的io口比较多  可以用多个io口分别控制
回复

使用道具 举报

ID:213173 发表于 2019-3-28 21:37 | 显示全部楼层
你先写一个灯流水程序发上来看看你入门了没有。否则基础太差,给你程序你也看不懂。
回复

使用道具 举报

ID:499770 发表于 2019-3-29 09:04 | 显示全部楼层
用一个字节a的固定一位间接取反,另外7位间接移位后存回a,再把a字节传到端口
回复

使用道具 举报

ID:317383 发表于 2019-3-29 09:24 | 显示全部楼层
最简答的方法采用查表的方法,将7种所有情况放在表中,进行调用
回复

使用道具 举报

ID:500397 发表于 2019-3-29 09:52 | 显示全部楼层
用控制引脚的方式来,分别定义位端口。一个让他实现闪烁功能亮灭,其余实现流水。流水可以用一个函数来写。写完在调用。
回复

使用道具 举报

ID:302534 发表于 2019-3-29 10:00 | 显示全部楼层
两个子程序,一个单独控制一个LED灯,一个控制其余七个,
回复

使用道具 举报

ID:425029 发表于 2019-3-29 11:26 | 显示全部楼层
#include<reg52.h>  
#define uchar unsigned char
#define uint unsigned int

/* 函数申明 -----------------------------------------------*/
void delay(uint z);

/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
********************************************************************************
*/
void main()
{
        uchar  num,dat1,dat2;
        delay(500);
        P0=0;
        while(1)
        {
                dat1=0xfe;
               
                for(num=0;num<7;num++)
                {
                        P1=dat1;          //初始化赋值
                        dat1=dat1<<1; //右移一位
                        P1^0=~P1^1;  //让P1^0口始终闪烁
                        delay(500);   //延时       
                }
               
        }
}

/*
********************************************************************************
** 函数名称 : delay(uint z)
** 函数功能 : 延时函数
********************************************************************************
*/
void delay(uint z)
{
    uchar j;
    for(z;z>0;z--)
        for(j=200;j>0;j--);
}
回复

使用道具 举报

ID:500775 发表于 2019-3-29 19:42 | 显示全部楼层
  1. #include<reg52.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit led1 = P1^0;
  5. sbit led2 = P1^1;
  6. sbit led3 = P1^2;
  7. sbit led4 = P1^3;
  8. sbit led5 = P1^4;
  9. sbit led6 = P1^5;
  10. sbit led7 = P1^6;
  11. sbit led8 = P1^7;

  12. sbit L = P2^5;                //流水灯锁存器
  13. uchar i = 0, num_T0;
  14. void delay()
  15. {
  16.         uint i, j;
  17.         for(i=1000; i>0; i--)
  18.                 for(j=110; j>0; j--)
  19.                         ;
  20. }

  21. void main()
  22. {
  23.         L = 1;                        //打开流水灯
  24.         //设置定时器0中断
  25.         TMOD = 0x01;
  26.         TH0 = (65536 - 45872) / 256;
  27.         TL0 = (65536 - 45872) % 256;
  28.         EA = 1;
  29.         ET0 = 1;
  30.         TR0 = 1;
  31.         while(1)
  32.         {
  33.                 switch(i)
  34.                 {
  35.                         case 0:        led1 = 0; delay(); led1=1; break;
  36.                         case 1:        led2 = 0; delay(); led2=1; break;
  37.                         case 2:        led3 = 0; delay(); led3=1; break;
  38.                         case 3:        led4 = 0; delay(); led4=1; break;
  39.                         case 4:        led5 = 0; delay(); led5=1; break;
  40.                         case 5:        led6 = 0; delay(); led6=1; break;
  41.                         case 6:        led7 = 0; delay(); led7=1; break;
  42.                 }
  43.                 i = (i+1) % 7;
  44.         }
  45. }

  46. void Time0() interrupt 1
  47. {
  48.         TH0 = (65536 - 45872) / 256;
  49.         TL0 = (65536 - 45872) % 256;
  50.         num_T0++;
  51.         if(num_T0 == 8)
  52.         {
  53.                 num_T0 = 0;
  54.                 led8 = ~led8;
  55.         }
  56. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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