找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3220|回复: 5
收起左侧

51单片机控制8个发光管由上至下间隔1s流动 程序思路求助

[复制链接]
ID:814576 发表于 2020-8-21 19:14 来自手机 | 显示全部楼层 |阅读模式
想自己制作  求指导 :8个发光管由。上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。
求教各位大佬:
我只能做到间隔一秒流动。但是亮500ms,灭500ms这个操作,中的。灭灯。编不出来了。可以问问怎么编么
IMG_20200821_190948.jpg
回复

使用道具 举报

ID:235200 发表于 2020-8-21 22:38 | 显示全部楼层
延时程序设计为500ms,
temp=_crol_(temp,1)
P1=temp;    //亮
beep=0;     //响
delay();      //延时
P1=0xff;    //灭
beep=1;   //不响
delay();    //延时
回复

使用道具 举报

ID:752225 发表于 2020-8-22 00:29 | 显示全部楼层
#include "reg52.h"
#include "intrins.h"
sbit BEEP = P2^3;
sbit Led0 = P1^0;   //着实费引脚 (8个数码管共阴)
sbit Led1 = P1^1;
sbit Led2 = P1^2;
sbit Led3 = P1^3;
sbit Led4 = P1^4;
sbit Led5 = P1^5;
sbit Led6 = P1^6;
sbit Led7 = P1^7;
unsigned char  n;
//严格意义上尽量别用延时
void Delay100ms()                //@11.0592MHz  100毫秒延时
{
        unsigned char i, j;

        i = 180;
        j = 73;
        do
        {
                while (--j);
        } while (--i);
}

void delay_ms(unsigned char n)   //延时是100ms的整数倍
{
      while(n>=0)
          {
                 Delay100ms();
                 n--;
          }
}
void Beep()            //蜂鸣器响函数,
{
      unsigned int i,j;
          for(i=0;i<700;i++)
          {
                 BEEP = ~BEEP;
                         for(j=0;j<300;j++);
                         
                         BEEP = ~BEEP;
                         for(j=0;j<10;j++);
          }
          
}


void main()
{

   unsigned int  i;
   /* 第一种效果
    while(1)
        {
            Led0 = Led2 = Led4 = Led6 = 1;//灯亮  0,2,4,6灯亮
                Led1 = Led3 = Led5 = Led7 = 0;//灯灭
            Beep();
                delay_ms(5);//500ms
                Led0 = Led2 = Led4 = Led6 = 0;// 灯灭
                Led1 = Led3 = Led5 = Led7 = 1;//灯亮       
                delay_ms(5);//500ms
     }
         */
       
         
         
           while(1)
           {
             for(i=0;i<7;i++)
                 {
                    P1 = _crol_(P1,1);   //右移
                        Beep();
                        delay_ms(5);
                 }
                 for(i=0;i<7;i++)
                 {
                    P1 = _cror_(P1,1);
                        Beep();
                        delay_ms(5);
                 }
             
           }
               
               
   
}
回复

使用道具 举报

ID:578842 发表于 2020-8-22 08:45 | 显示全部楼层
#include<reg52.h>
typedef     unsigned int   uint;//无符号整型
void Delay500ms();                //@11.0592MHz
void main(void)
{
while(1)
        {
            uint a;
                          for(a = 0; a < 8;a++)
                {
                        P1 = ~(0X01 << a);
//这一行加上蜂鸣器开启
                        Delay500ms();//500ms延时 11.0592MHZ
                }

              for(a = 0; a < 6;a++)
                {
                        P1 = ~(0X40 >> a);
//这一行加上蜂鸣器关闭
                        Delay500ms();//500ms延时 11.0592MHZ
                }
       }
        

}

void Delay500ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        _nop_();
        
        i = 5;
        j = 5;
        k = 150;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

//这个延时时间500毫秒多,具体使用自己微调吧

回复

使用道具 举报

ID:809311 发表于 2020-8-22 15:14 | 显示全部楼层
干嘛搞个蜂鸣器的代码,不是LED灯吗?
回复

使用道具 举报

ID:106821 发表于 2020-9-16 10:57 | 显示全部楼层
写个延时函数,再调用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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