找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5401|回復(fù): 6
收起左側(cè)

單片機閃爍LED程序問題

[復(fù)制鏈接]
ID:129526 發(fā)表于 2016-7-15 13:06 | 顯示全部樓層 |閱讀模式
單片機c8051f020,晶振22.1184MHz.定時器0模式1.LED端口是P3^3.定時1s閃爍。程序運行后LED常亮,不閃爍。
  1. #include<c8051f020.h>
  2. sbit LED=P3^3;

  3. void PORT_Init(void)
  4.   {
  5.      XBR2=0x40;
  6.      P3MDOUT=0xff;
  7.   }
  8. void main()
  9. {
  10.    
  11.     unsigned char cnt=0;
  12.     PORT_Init();

  13.         TMOD=0x01;//定時器0模式1
  14.         TH0=0x70;//定時器初值高8位
  15.         TL0=0x00;//定時器初值低8位
  16.         TR0=1;  //打開定時器

  17.         while(1)
  18.         {
  19.           if(TF0 == 1)
  20.           {
  21.             TF0=0;        //軟件清零
  22.                 TH0=0x70;  //重新賦值
  23.             TL0=0x00;  //重新賦值
  24.                 cnt++;
  25.                 if(cnt>=50)
  26.                 {
  27.                  cnt=0;         //清零
  28.                  LED=~LED;
  29.                 }
  30.           }
  31.         }
  32. }
復(fù)制代碼


相關(guān)帖子

回復(fù)

使用道具 舉報

ID:79544 發(fā)表于 2016-7-17 12:49 | 顯示全部樓層
你沒說什么問題啊。
回復(fù)

使用道具 舉報

ID:129526 發(fā)表于 2016-7-18 09:28 | 顯示全部樓層


單片機c8051f020,晶振22.1184MHz.定時器0模式1.LED端口是P3^3.定時1s閃爍。程序運行后LED常亮,不閃爍
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2016-7-18 14:36 | 顯示全部樓層
閃燈很簡單:
1,做一個閃動時鐘標(biāo)記位,設(shè)為S,用時間中斷,讓S每間隔一個時間(如0.25秒)反轉(zhuǎn)一次,即閃動.
2,做N個閃動需求標(biāo)記位(如:S1,S2,S3),每個位對應(yīng)需要閃動的位.
實現(xiàn):如顯示第三位F3
假設(shè):以前(未閃動)送出至端口的數(shù)據(jù)=F3
則閃動顯示時:送出至端口的數(shù)據(jù)=F3 & S3 & S + !S3 & F3 就實現(xiàn)閃動了
細(xì)解:當(dāng)S3=0時,禁止閃動,F(xiàn)3 & S3 & S + !S3 & F3=F3 與以前不閃一樣
          當(dāng)S3=1時,要求閃動,F(xiàn)3 & S3 & S + !S3 & F3=F3 & S 是否顯示取決于S,即每0.25秒閃動一次。
所以要不要閃動某位,只要將Sn置1清0即可,很方便。
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2016-7-18 14:39 | 顯示全部樓層
程序設(shè)計在于精巧的構(gòu)思,寫程序只是以規(guī)定的格式寫寫字符串而矣。
回復(fù)

使用道具 舉報

ID:140489 發(fā)表于 2016-9-28 12:14 | 顯示全部樓層
我給改了一下,在實驗板上測試通過,LED能閃爍。
#include<reg52.h>
sbit LED=P1^0;

/*void PORT_Init(void)
  {
     XBR2=0x40;
     P3MDOUT=0xff;
  }        */
void main()
{
   
    unsigned char cnt=0;
    //PORT_Init();

        TMOD=0x01;//定時器0模式1
        TH0=0x70;//定時器初值高8位
        TL0=0x00;//定時器初值低8位
        TR0=1;  //打開定時器

        while(1)
        {
          if(TF0 == 1)
          {
            TF0=0;        //軟件清零
            TH0=0x70;  //重新賦值
            TL0=0x00;  //重新賦值
                cnt++;
                if(cnt>=50)
                {
                 cnt=0;         //清零
                 LED=~LED;
                }
          }
        }
}
回復(fù)

使用道具 舉報

ID:74784 發(fā)表于 2016-9-28 19:37 | 顯示全部樓層
這個很簡單的:
1。設(shè)置一個1S的定時器
2。每當(dāng)1S到時間后把p3.3取反一次
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表