找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机实现第一个led灯和第四个led灯一起闪烁程序的问题 求解答

  [复制链接]
跳转到指定楼层
楼主
ID:371529 发表于 2018-10-13 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想通过51单片机实现第一个led灯和第四个led灯一起闪烁,下面是我写的代码。但是单片机上显示的是先亮led1后亮led2依次循环,这是为啥呢?
这是代码:
  #include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit led1=P2^0;sbit led2=P2^3;
void delay(u16 i)
{
   while(i--);
}
  void main()
  {
  while(1)
  {
    led1=0;
delay(50000);
led1=1;
delay(50000);
led2=0;
delay(50000);
led2=1;
delay(50000);
  }
  }
要怎样才能得到我想要的?求解答,谢谢各位了!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 2#
ID:123289 发表于 2018-10-14 20:49 | 只看该作者
不管是哪个灯,它总是对应在一个CPU的端口上的!
只要让这个端口闪是完成闪烁了!
方案:
1、用定时器做一个定时中断,每次中断将一个闪烁标记F求反。例0.5秒中断一次,中断时让F=!F.
2、输出驱动LED的段时,如:驱动A段,让A=A*F再输出,A就闪烁了。
是不是很简单。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:409110 发表于 2018-10-13 16:56 | 只看该作者
你试试我的这个函数while(1)
{
        led2=0;led1=0;
        delay(50000);
        led1=1;led2=1;
        delay(50000);
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:409110 发表于 2018-10-13 16:57 | 只看该作者
你把while里面改成我的这段函数看看能不能行while(1)
{
        led2=0;led1=0;
        delay(50000);
        led1=1;led2=1;
        delay(50000);
}

评分

参与人数 1黑币 +5 收起 理由
哈哈我哈哈 + 5 赞一个!

查看全部评分

回复

使用道具 举报

5#
ID:409110 发表于 2018-10-13 16:58 | 只看该作者
你把while里面改成这段代码看看while(1)
{
        led2=0;led1=0;
        delay(50000);
        led1=1;led2=1;
        delay(50000);
}
回复

使用道具 举报

6#
ID:155507 发表于 2018-10-13 16:59 | 只看该作者
给你改了一下试试。

  1. #include "reg52.h"
  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. sbit led1=P2^0;
  5. sbit led2=P2^3;

  6. void delay(u16 i)
  7. {
  8.         while(i--);
  9. }
  10. void main()
  11. {
  12.         while(1)
  13.         {
  14.                 led1=0;
  15.                 led2=0;
  16.                 delay(50000);
  17.                 led1=1;
  18.                 led2=1;
  19.                 delay(50000);
  20.                
  21.                 //delay(50000);
  22.                
  23.                 //delay(50000);
  24.         }
  25. }

复制代码

评分

参与人数 2黑币 +25 收起 理由
admin + 20 回帖助人的奖励!
哈哈我哈哈 + 5 赞一个!

查看全部评分

回复

使用道具 举报

7#
ID:409122 发表于 2018-10-13 17:24 | 只看该作者
这个程序的描述不是依次闪烁吗??

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:409122 发表于 2018-10-13 17:28 | 只看该作者
emmmm这个程序不是就是依次闪烁吗?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:74187 发表于 2018-10-13 17:47 | 只看该作者
  1. /********************************************************
  2. *描述:工程模板,点亮led
  3. ********************************************************/
  4. #include "reg52.h"


  5. /*******************************************************************************
  6. * 文件名:位定义
  7. * 描  述:
  8. * 功  能:
  9. * 作  者:大核桃
  10. * 版本号:1.0.1(2017.05.23)
  11. *******************************************************************************/

  12. typedef unsigned char u8;
  13. typedef unsigned int u16;


  14. sbit led1 = P2^0;
  15. sbit led2 = P2^3;

  16. /*******************************************************************************
  17. * 文件名:主循环入口
  18. * 描  述:
  19. * 功  能:
  20. * 作  者:大核桃
  21. * 版本号:1.0.1(2017.05.23)
  22. *******************************************************************************/
  23. void main(void)
  24. {

  25.         while(1)
  26.         {
  27.                 led1 = 0;
  28.                 led2 = 0;
  29.                 delay(50000); //1,2同时亮

  30.                 led1 = 1;
  31.                 led2 = 1;     //1,2同时灭
  32.                 delay(50000);
  33.         }
  34. }

  35. /*******************************************************************************
  36. * 文件名:void delay(u16 i
  37. * 描  述:
  38. * 功  能:
  39. * 作  者:大核桃
  40. * 版本号:1.0.1(2017.05.23)
  41. *******************************************************************************/
  42. void delay(u16 i)
  43. {
  44.    while(i--);
  45. }
复制代码

评分

参与人数 1黑币 +5 收起 理由
哈哈我哈哈 + 5 很给力!

查看全部评分

回复

使用道具 举报

10#
ID:371529 发表于 2018-10-14 14:28 | 只看该作者
boomBaby 发表于 2018-10-13 17:28
emmmm这个程序不是就是依次闪烁吗?

请问你咋就看出来他是依次闪烁的呢?的确是的
回复

使用道具 举报

11#
ID:371529 发表于 2018-10-14 14:40 | 只看该作者
SkyLine风 发表于 2018-10-13 16:56
你试试我的这个函数while(1)
{
        led2=0;led1=0;

你这种情况第一个灯闪烁但第四个灯亮但不闪
回复

使用道具 举报

12#
ID:371529 发表于 2018-10-14 14:43 | 只看该作者
SkyLine风 发表于 2018-10-13 16:58
你把while里面改成这段代码看看while(1)
{
        led2=0;led1=0;

啊啊,可以的可以的,是我写错了代码,哎
回复

使用道具 举报

13#
ID:409461 发表于 2018-10-14 14:56 | 只看该作者
while(1)
回复

使用道具 举报

14#
ID:409461 发表于 2018-10-14 14:58 | 只看该作者
led1=0;led2=0;delay(50000); led1=1;led2=1;delay(50000);

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

15#
ID:409675 发表于 2018-10-14 23:12 | 只看该作者
delay用多了。都删掉。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

16#
ID:372912 发表于 2018-10-20 18:52 | 只看该作者
用总线的方式点亮,直接给P2口0x09,就行了然后用delay进行延时
回复

使用道具 举报

17#
ID:147024 发表于 2018-10-20 22:50 | 只看该作者
{     led1=0; ; led2=0; delay(50000); led1=1;; led2=1; delay(50000);   }   }
回复

使用道具 举报

18#
ID:147024 发表于 2018-10-20 22:52 | 只看该作者
完成没编过程吗,

led1=0;
led2=0;
delay(50000);
led1=1;
led2=1;
delay(50000);
回复

使用道具 举报

19#
ID:405708 发表于 2018-10-21 11:58 | 只看该作者

哥们,你这个程序可能会编译不过呀,delay没有在main前面声明
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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