標(biāo)題: 51單片機實現(xiàn)第一個led燈和第四個led燈一起閃爍程序的問題 求解答 [打印本頁]

作者: 哈哈我哈哈    時間: 2018-10-13 16:27
標(biāo)題: 51單片機實現(xiàn)第一個led燈和第四個led燈一起閃爍程序的問題 求解答
我想通過51單片機實現(xiàn)第一個led燈和第四個led燈一起閃爍,下面是我寫的代碼。但是單片機上顯示的是先亮led1后亮led2依次循環(huán),這是為啥呢?
這是代碼:
  #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);
  }
  }
要怎樣才能得到我想要的?求解答,謝謝各位了!

作者: SkyLine風(fēng)    時間: 2018-10-13 16:56
你試試我的這個函數(shù)while(1)
{
        led2=0;led1=0;
        delay(50000);
        led1=1;led2=1;
        delay(50000);
}
作者: SkyLine風(fēng)    時間: 2018-10-13 16:57
你把while里面改成我的這段函數(shù)看看能不能行while(1)
{
        led2=0;led1=0;
        delay(50000);
        led1=1;led2=1;
        delay(50000);
}
作者: SkyLine風(fēng)    時間: 2018-10-13 16:58
你把while里面改成這段代碼看看while(1)
{
        led2=0;led1=0;
        delay(50000);
        led1=1;led2=1;
        delay(50000);
}
作者: angmall    時間: 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. }

復(fù)制代碼

作者: boomBaby    時間: 2018-10-13 17:24
這個程序的描述不是依次閃爍嗎??

作者: boomBaby    時間: 2018-10-13 17:28
emmmm這個程序不是就是依次閃爍嗎?
作者: dabing89    時間: 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. * 文件名:主循環(huán)入口
  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. }
復(fù)制代碼

作者: 哈哈我哈哈    時間: 2018-10-14 14:28
boomBaby 發(fā)表于 2018-10-13 17:28
emmmm這個程序不是就是依次閃爍嗎?

請問你咋就看出來他是依次閃爍的呢?的確是的
作者: 哈哈我哈哈    時間: 2018-10-14 14:40
SkyLine風(fēng) 發(fā)表于 2018-10-13 16:56
你試試我的這個函數(shù)while(1)
{
        led2=0;led1=0;

你這種情況第一個燈閃爍但第四個燈亮但不閃
作者: 哈哈我哈哈    時間: 2018-10-14 14:43
SkyLine風(fēng) 發(fā)表于 2018-10-13 16:58
你把while里面改成這段代碼看看while(1)
{
        led2=0;led1=0;

啊啊,可以的可以的,是我寫錯了代碼,哎
作者: 學(xué)員007    時間: 2018-10-14 14:56
while(1)
作者: 學(xué)員007    時間: 2018-10-14 14:58
led1=0;led2=0;delay(50000); led1=1;led2=1;delay(50000);
作者: yzwzfyz    時間: 2018-10-14 20:49
不管是哪個燈,它總是對應(yīng)在一個CPU的端口上的!
只要讓這個端口閃是完成閃爍了!
方案:
1、用定時器做一個定時中斷,每次中斷將一個閃爍標(biāo)記F求反。例0.5秒中斷一次,中斷時讓F=!F.
2、輸出驅(qū)動LED的段時,如:驅(qū)動A段,讓A=A*F再輸出,A就閃爍了。
是不是很簡單。
作者: MichaelXI    時間: 2018-10-14 23:12
delay用多了。都刪掉。
作者: Baymax3    時間: 2018-10-20 18:52
用總線的方式點亮,直接給P2口0x09,就行了然后用delay進行延時
作者: yygywffg    時間: 2018-10-20 22:50
{     led1=0; ; led2=0; delay(50000); led1=1;; led2=1; delay(50000);   }   }
作者: yygywffg    時間: 2018-10-20 22:52
完成沒編過程嗎,

led1=0;
led2=0;
delay(50000);
led1=1;
led2=1;
delay(50000);
作者: psuxaog    時間: 2018-10-21 11:58
dabing89 發(fā)表于 2018-10-13 17:47

哥們,你這個程序可能會編譯不過呀,delay沒有在main前面聲明




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1