久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51單片機(jī)的七彩LED燈漸變調(diào)光調(diào)色程序

作者:文于鷹   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月06日   【字體:


 //------------------------------------------------------------------------------------
// Main.c
//------------------------------------------------------------------------------------
// Copyright (C) 2013 Shenyang JYXD.
//  WEN BO RUI
// Tool chain: KEIL Full  'c'
//
//#pragma CD OE DB SB       // Compilation directives
#include<reg2051.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
uint  Period;                 //Period刷新周期
uint  PWM;
uint  Pulse;         //脈沖個(gè)數(shù)
uchar Speed;         //速度變量
uchar count;
uint excount;
bit Gra;          //漸變/跳變總控制位
bit Gra7;          //七彩漸亮漸滅控制位
bit Gra3;          //紅綠藍(lán)漸亮漸滅控制位
bit BP;           //亮到暗,暗到亮轉(zhuǎn)換位
bit LEDdelay ;                                //LED定時(shí)到標(biāo)志位
sbit key1 = P3^1;           //花樣組合鍵1 
sbit key2 = P3^0;             //花樣組合鍵2
sbit key3 = P3^5;             //速度組合鍵1
sbit key4 = P3^4;        //速度組合鍵2
uchar led1[12]={0x10,0x030,0x20,0x60,0x40,0x50,0x70,0x50,0x40,0x60,0x20,0x30};//紅、黃、綠、青、藍(lán)、粉、白、粉、藍(lán)、青、綠、黃
uchar led2[24]={0x10,0x00,0x30,0x00,0x20,0x00,0x60,0x00,0x40,0x00,0x50,0x00,
    0x70,0x00,0x50,0x00,0x40,0x00,0x60,0x00,0x20,0x00,0x30,0x00};
uchar led3[3]={0x10,0x20,0x40};     //紅、綠、藍(lán)
uchar ledcount,ledcount1;
//***********************************************************
//以下定義函數(shù)
// 1毫秒延時(shí)函數(shù)delayms();花樣及速度掃描函數(shù)keyscan();
//***********************************************************
/*void delayms(unsigned int ms)
{
    unsigned char i ;
    while(ms--)
     {
        for(i = 0 ; i < 120 ; i++) ;
     }
}*/
void Pattern1();             //花樣1函數(shù)--------->跳變無(wú)滅燈過(guò)程
void Pattern2();             //花樣2函數(shù)--------->跳變有滅燈過(guò)程
void Pattern34();
void keyscan()
{
 if((key4==1)&&(key3==1))  {Speed   = 20;Period = 25;}   //預(yù)設(shè)4種速度200MS
 if((key4==0)&&(key3==1))  {Speed   = 50;Period = 50;}    //500MS
 if((key4==1)&&(key3==0))  {Speed   = 100;Period = 100;}    //1S
 if((key4==0)&&(key3==0))  {Speed   = 150;Period = 200;}    //1.5S
 if((key2==1)&&(key1==1))  {ledcount1 = 0;Pattern1();}   //預(yù)設(shè)4種花樣
    if((key2==0)&&(key1==1))  {ledcount1 = 0;Pattern2();}
 if((key2==1)&&(key1==0))  {ledcount = 0;Gra3 = 1;Pattern34();}
 if((key2==0)&&(key1==0))  {ledcount = 0;Gra7 = 1;Pattern34();}
}
void value()
{
 if(Speed == 20) PWM = Pulse*8;
 if(Speed == 50) PWM = Pulse*4;         //脈沖個(gè)數(shù)
 if(Speed == 100)PWM = Pulse*2;
 if(Speed == 150)PWM = Pulse;
}
void Reset(void)
{
 unsigned char code rst[ ]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};
 (*((void (*)(void))(rst)))();
}
void main()
{
 _nop_ ();
 _nop_ ();
 _nop_ ();
 P1 = 0;
 TMOD = 0x11;             //11.0592M晶振的10ms定時(shí)初值(100分之一秒)
 TH0  = 0x0db;
 TL0  = 0x0ff;
 TH1  = 0x0ff;             //0.05ms(20000分之一秒)
 TL1  = 0x0D1;
 EA = 1;                       //開(kāi)啟總中斷允許
 ET0 = 1;                     //允許T0定時(shí)器中斷
 ET1 = 1;                     //允許T1定時(shí)器中斷
 TR0 = 1;                    //開(kāi)啟T0定時(shí)器
 EX0=1;               //開(kāi)外部中斷0
  IT0=1;               //下降沿觸發(fā)
 while(1)
 {
 
  keyscan();
 }
}
//*************************************************************************
//Pattern1() 花樣函數(shù)1-------------跳變無(wú)滅燈過(guò)程
//*************************************************************************
void Pattern1()
{
 //keyscan();
 Gra = 0;              //跳變位=0
 if(LEDdelay)
  {
   LEDdelay = 0;
   P1 = led1[ledcount];
   ledcount++;
   if(ledcount>11)
    {
     ledcount = 0;
    }
  }
}
//***********************************************************************
//Pattern2() 花樣函數(shù)2-------------跳變有滅燈過(guò)程
//***********************************************************************
void Pattern2()
{
 //keyscan();
 Gra = 0;
 if(LEDdelay)
  {
   LEDdelay = 0;
   P1 = led2[ledcount];
   ledcount++;
   if(ledcount>23)
    {
     ledcount = 0;
    }
  }  
}
//***********************************************************************
//Pattern3() 花樣函數(shù)3-------------3彩漸變
//***********************************************************************
/*void Pattern3()
{
 keyscan();
 if(Speed == 20) Period = 25;
 if(Speed == 50) Period = 50;
 if(Speed == 100)Period = 100;  
 if(Speed == 150)Period = 200;
 Gra = 1;
 Gra3 = 1;
}*/
//***********************************************************************
//Pattern4() 花樣函數(shù)4-------------7彩漸變
//***********************************************************************
void Pattern34()
{
 Gra = 1;             //漸變位 = 1
}
/*********************************************************/
// 定時(shí)器0中斷服務(wù)程序
/*********************************************************/
void time0(void) interrupt 1
{
 TR1 =0;
 TF0 =0;
 TH0=0xdb;           //重新寫入初值
 TL0=0xff; 
    if(!Gra)           //執(zhí)行跳變程序
  {
   count ++;
   if(count > Speed)
    {
     LEDdelay = 1;
     count = 0;
    }
  }
 if(Gra)
  {
   TR1 = 1;         //開(kāi)啟TR1;
   if(!BP)             //      
    {
      if(Gra7)
      {
       P1 = led1[ledcount1];  //10ms到,亮相應(yīng)的LED
      }
     if(Gra3)
      {
       P1 = led3[ledcount1];  //10ms到,亮相應(yīng)的LED
      }
     Pulse++;
     value();
     if(Pulse >= Period)
      {
       Pulse = Period;
       BP = 1;      //一個(gè)周期完成轉(zhuǎn)換模式
      }
    }
   if(BP)
    {
     if(Gra7)
      {
       P1 = led1[ledcount1];  //10ms到,亮相應(yīng)的LED
      }
     if(Gra3)
      {
       P1 = led3[ledcount1];  //10ms到,亮相應(yīng)的LED
      }
     value();    
     Pulse--;       //脈沖個(gè)數(shù)
     if(Pulse == 0)
      {
       Pulse = 0;
       BP = 0;      //一個(gè)周期完成轉(zhuǎn)換模式
       ledcount1++;
       if(Gra7)
       {
        if(ledcount1 > 11)
         {
          ledcount1 = 0;
         }
         Gra7 = 0;
          }
       if(Gra3)
       {
        if(ledcount1 > 2)
         {
          ledcount1 = 0;
         }
         Gra3 = 0;
          }
      }
    }
  }
}
/*********************************************************/
// 定時(shí)器1中斷服務(wù)程序
/*********************************************************/
void timer1() interrupt 3
{
 PWM --;
 TH1  = 0xff;         //0.05ms(20000分之一秒)
 TL1  = 0xD1;
 if(PWM == 0)
  {
   P1 = 0;
   TR1 = 0;
  }
}
/*********************************************************/
// 外部中斷0中斷服務(wù)程序 下降沿觸發(fā)
/*********************************************************/
void extern0(void) interrupt 0
{
 IE0 = 0;    // 清標(biāo)志位
 excount++;
 if(excount>50)      // 50大約3秒
  {
   EA = 0;
   //P1_5 = 1;
   excount = 0;
   Reset();
  }
}

 

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 精品久久国产 | 凹凸日日摸日日碰夜夜 | 国产亚洲一区二区三区在线 | 国产高清在线精品一区二区三区 | 欧美精品在线一区 | 久草视频网站 | 国产丝袜一区二区三区免费视频 | 色综合久久88色综合天天 | 日韩国产一区二区三区 | 特黄小视频 | 色婷婷亚洲国产女人的天堂 | 欧美精品一区二区三区在线播放 | 欧美日韩综合 | 国产亚洲区 | 成人a免费 | 久久这里只有 | 99热精品在线 | 欧美中文一区 | 国产三级| 成人免费在线小视频 | 久久久久久黄 | 黄色网址免费看 | 国产一区二区三区久久久久久久久 | 国产日韩av一区二区 | 免费视频久久 | 九九热在线视频 | 日韩一及片 | 大久| 青青草免费在线视频 | 97伦理影院 | 国产不卡一 | 中文字幕一区在线观看视频 | 国产美女自拍视频 | 青青草av网站 | 日韩成人av在线 | 日韩中文字幕视频在线 | 羞羞网站免费观看 | av一区二区三区四区 | 人人看人人草 | 日日操视频 | 中文字幕亚洲欧美日韩在线不卡 |