標(biāo)題: 給你的51單片機(jī)作品加個(gè)呼吸燈(程序) [打印本頁(yè)]

作者: xiashan    時(shí)間: 2015-4-5 18:27
標(biāo)題: 給你的51單片機(jī)作品加個(gè)呼吸燈(程序)
本帖最后由 xiashan 于 2015-4-5 18:30 編輯

看著筆記本待機(jī)的時(shí)候,電源燈變成忽明忽暗,手就不自在了。

研究了一番,寫(xiě)出了代碼,加到自己做的“玩具”上。

可能會(huì)覺(jué)得這個(gè)東西沒(méi)有什么實(shí)在意義,只不過(guò)看起來(lái)沒(méi)閃爍那么單調(diào)而已。

如果覺(jué)得有用,也可以加到自己的作品上,據(jù)說(shuō)某mp3用呼吸頻率來(lái)表示系統(tǒng)電量得多少,咱覺(jué)得還是蠻創(chuàng)意的。

如果你的系統(tǒng)有空余的定時(shí)器,或者已經(jīng)使用了定時(shí)器,那不妨試試,唯一就是要占用兩個(gè)字節(jié)的ram,和幾十微秒的時(shí)間。

unsigned char t1=0,t2=0,c1=1;
bit c=1;


void timer_1() interrupt 3 using 3   //呼吸燈程序
{
    TL1 = 0x3C;    //200us   
    TH1 = 0xFF;
    t1++; t2++;

    if(t1 <= cl) led = 0;   //這三行通過(guò)t1與cl比較,控制led亮滅,也就是PWM調(diào)光。
    if(t1 > cl) led = 1;    //
    if(t1 == 40) t1 = 0;    //   
  
    if(t2 == 250)           //250次中斷以后,進(jìn)入以下語(yǔ)句,更改cl值,改變亮度。改變比較的值(250)
        {                   //可以調(diào)整閃爍速度。
            t2=0;
            if(c)  
                {
                    cl++;
                    if(cl == 41) c=0;    //由亮變暗標(biāo)識(shí)
                }

            if(!c)
                {
                    cl--;
                    if(cl == 3) c=1;    //由暗變亮標(biāo)識(shí)
                }
        }
}  



下面以我的開(kāi)發(fā)板為例作個(gè)具體的程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit led=P1^0; //位定義;定義led燈是接到P1^0;
unsigned char t1=0,t2=0,c1=1;
bit c=1;
sbit wela=P2^6;

uchar code table[]={0x06,0x5b,0x4f};
uchar temp,num;
delay(uchar);
display(uchar);

void main()
{
TMOD=0x01;
TH0=0x3C;
TL0=0xFF;
EA=1;
ET0=1;
TR0=1;

while(1)
{
  P3=0x7f;
  temp=P3;
  temp=temp&0x7f;
  if(temp!=0x7f)
   {
   delay(50);
   if(temp!=0x7f)
    {
    switch(temp)
    {
     case 0x6f: num=0;
      break;
     case 0x5f: num=1;
      break;
     case 0x3f: num=2;
      break;
    }
    }
   }
     display(num);
}
}

delay(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
  for(b=200;b>0;b--);
}
display(uchar num1)
{
P0=table[num1];
wela=0;
}

void timer_0() interrupt 1 //呼吸燈程序
{
    TL1 = 0x3C;    //200us   
    TH1 = 0xFF;
    t1++; t2++;

    if(t1 <= c1) led = 0;   //這三行通過(guò)t1與cl比較,控制led亮滅,也就是PWM調(diào)光。
    if(t1 > c1) led = 1;    //
    if(t1 == 40) t1 = 0;    //   
  
    if(t2 == 100)           //250次中斷以后,進(jìn)入以下語(yǔ)句,更改cl值,改變亮度。改變比較的值(250)
        {                   //可以調(diào)整閃爍速度。
            t2=0;
            if(c)  
                {
                    c1++;
                    if(c1 == 41) c=0;    //由亮變暗標(biāo)識(shí)
                }

            if(!c)
                {
                    c1++;
                    if(c1 == 41) c=1;    //由暗變亮標(biāo)識(shí)
                }
        }
}  





作者: penghualin    時(shí)間: 2015-4-5 19:58
大神啊,贊一個(gè)
作者: 愛(ài)德華    時(shí)間: 2015-4-5 22:47
挺復(fù)雜的!
作者: bhjyqjs    時(shí)間: 2015-6-2 09:15
頂一個(gè)
作者: 小伙子。    時(shí)間: 2015-6-2 11:06
看起來(lái)好厲害的樣子
作者: 牧田    時(shí)間: 2015-6-2 11:39
看起來(lái)好厲害的樣子
作者: sszv    時(shí)間: 2017-10-21 16:51
為什么我燒錄了之后是蜂鳴器在響
作者: sszv    時(shí)間: 2017-10-21 16:52
為什么我燒錄了之后是蜂鳴器在響?




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