找回密码
 立即注册

QQ登录

只需一步,快速开始

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

让两个LED灯一直亮灭亮灭

  [复制链接]
跳转到指定楼层
楼主
ID:242890 发表于 2017-12-1 21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果让两个LED灯按不同的频率亮灭,例如:while(1)
{
LED1隔一秒亮一次,LED2隔两秒亮一次;

}  
这样应该怎样解决,求C语言示例代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:74784 发表于 2017-12-1 21:57 | 只看该作者
这个不难吧?
回复

使用道具 举报

板凳
ID:244326 发表于 2017-12-1 22:32 | 只看该作者
先给一个高电平,第二条取反
回复

使用道具 举报

地板
ID:42943 发表于 2017-12-1 23:31 | 只看该作者
选择P1口其中两个个管脚作为输出控制
写一个1秒延时函数

根据设计电路 两个管脚输出相应电平 点亮对应发光二极管

以下为循环体内容

{
调用延时
管脚1 取反 改变灯状态
调用延时
管脚1取反 改变灯状态
管脚2取反 改变灯状态
}
回复

使用道具 举报

5#
ID:249808 发表于 2017-12-2 10:05 | 只看该作者
while(1)
{
LED1=1;
delay1S;
LED1=0;
LED2=1;
delay2S;
LED2=0;

}  

去试一下看!
回复

使用道具 举报

6#
ID:255508 发表于 2017-12-2 11:25 | 只看该作者
int i=0;
whiie(1)

           i++;
           delay_ms(500);//延时500ms
          if(i==1)            //到1s
               {
                   led0=~led0;    //状态取反  
              }
          if(i==3)           //到2s
           {
                 led1=~led1;
               i=0;                 //重新赋值
            }

评分

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

查看全部评分

回复

使用道具 举报

7#
ID:255915 发表于 2017-12-2 11:57 来自手机 | 只看该作者
你可以调用一个延时函数
回复

使用道具 举报

8#
ID:60379 发表于 2017-12-2 12:00 | 只看该作者

12-用定时中断长延时实现P0口多个LED亮灭.rar (13.68 KB, 下载次数: 7)

/****************《51单片机轻松入门-基于STC15W4K系列》配套例程 *************
★★★★★★★★★★★★★★★★★★★★★★★★
《51单片机轻松入门-基于STC15W4K系列》 配套例程
// 用定时中断长延时实现P0口多个LED亮灭.rar
  ★★★★★★★★★★★★★★★★★★★★★★★★*/


#include "STC15W4K.H"         // 包含 "STC15W4K.H"寄存器定义头文件
sbit LED0=P0^0;
sbit LED1=P0^1;       
void main()
{
        TMOD=0x01;     // 定时器0_16位计数
        TH0=0x70;      // 经计算定时20ms初值是0x7000
        TL0=0x00;
        TR0=1;         // 定时器开始运行
        ET0=1;         // 开定时器0中断开关
        EA=1;                   // 开总中断开关
    while(1);
}  
void Timer0() interrupt 1
{       
        static         Count1=0;    // 静态变量计数器,静态变量只在首次运行时赋值1次*/
        static  Count2=0;    // 静态变量计数器
        Count1++;                     // 每次中断计数器加1
        Count2++;                     // 每次中断计数器加1
        if(Count1>=25)             // 如果计数器超过25
        {       
                LED0=!LED0;             // 取返P0.0
                Count1=0;             // 计数器清零  
        }
        if(Count2>=50)             // 如果计数器超过50
        {       
                LED1=!LED1;             // 取返P0.1
                Count2=0;             // 计数器清零  
        }
        TH0=0x70;                     // 重装定时初值
        TL0=0x00;
}


评分

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

查看全部评分

回复

使用道具 举报

9#
ID:256413 发表于 2017-12-2 12:15 | 只看该作者
你可以调用一个延时函数
回复

使用道具 举报

10#
ID:256394 发表于 2017-12-2 12:33 | 只看该作者
比如说循环1秒内让它占空比20% 不亮占空比为80%
回复

使用道具 举报

11#
ID:255476 发表于 2017-12-2 15:10 | 只看该作者
LED=0;delayms(1000);
回复

使用道具 举报

12#
ID:255476 发表于 2017-12-2 15:12 | 只看该作者
LED1=0;delayms(1000);LED2=0;delayms(2000);就是用延时函数具体括号内的数字需要你自己调试。
回复

使用道具 举报

13#
ID:168857 发表于 2017-12-2 16:47 | 只看该作者
用一个中断最好,比较准确
回复

使用道具 举报

14#
ID:209379 发表于 2017-12-2 23:08 | 只看该作者
led1=~led1;
回复

使用道具 举报

15#
ID:217829 发表于 2017-12-3 04:55 | 只看该作者
一个简单的延时函数就搞定啦,
回复

使用道具 举报

16#
ID:242890 发表于 2017-12-3 10:54 | 只看该作者
szb0321 发表于 2017-12-2 11:25
int i=0;
whiie(1)

如果用两个定时器去完成,应该怎样写
回复

使用道具 举报

17#
ID:255231 发表于 2017-12-3 12:20 | 只看该作者
i=200; while(i--) {if(i=100) LED1=1; if (i=1) LED2=1;}
回复

使用道具 举报

18#
ID:242890 发表于 2017-12-3 13:24 | 只看该作者
hebaobao 发表于 2017-12-2 16:47
用一个中断最好,比较准确

中断应该怎样写
回复

使用道具 举报

19#
ID:256774 发表于 2017-12-3 14:19 | 只看该作者
可以用延时,也可以用中断,中断比较精准
回复

使用道具 举报

20#
ID:256817 发表于 2017-12-3 15:47 | 只看该作者
加一个delay()函数
回复

使用道具 举报

21#
ID:254549 发表于 2017-12-3 21:58 | 只看该作者
这个延时函数不能处理吗?我想着应该2个不同的延时时间就可以处理的吧
回复

使用道具 举报

22#
ID:257002 发表于 2017-12-3 23:50 | 只看该作者
选择P1口其中两个个管脚作为输出控制 写一个1秒延时函数  根据设计电路 两个管脚输出相应电平 点亮对应发光二极管  以下为循环体内容  { 调用延时 管脚1 取反 改变灯状态 调用延时 管脚1取反 改变灯状态 管脚2取反 改变灯状态 }
回复

使用道具 举报

23#
ID:231046 发表于 2017-12-4 10:45 | 只看该作者
用一个1秒延时函数也可以实现,要2S就调用2 次就行了
回复

使用道具 举报

24#
ID:257047 发表于 2017-12-4 11:21 来自手机 | 只看该作者
可以用中断或查询
回复

使用道具 举报

25#
ID:257111 发表于 2017-12-4 11:33 | 只看该作者
学习一下
回复

使用道具 举报

26#
ID:257131 发表于 2017-12-4 12:38 | 只看该作者
marked
回复

使用道具 举报

27#
ID:257137 发表于 2017-12-4 12:59 | 只看该作者
编写两个循环语句控制电流信号
回复

使用道具 举报

28#
ID:257192 发表于 2017-12-4 14:45 | 只看该作者

led1=~led1;
回复

使用道具 举报

29#
ID:243193 发表于 2017-12-4 15:06 | 只看该作者
这个可以使用定时器来做,这是在裸机的情况下。最容易实现的就是在操作系统上调用
回复

使用道具 举报

30#
ID:186936 发表于 2017-12-4 16:06 | 只看该作者
调用定时器中断,if判断执行不同的功能
回复

使用道具 举报

31#
ID:257364 发表于 2017-12-4 20:10 | 只看该作者

while(1)
{
LED1高;
延时1S;
LED1低;
LED2高;
延时(1S);
LED2低;
}
回复

使用道具 举报

32#
ID:257395 发表于 2017-12-4 20:42 | 只看该作者
用定时器定时1s和2s
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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