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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5719|回復: 7
打印 上一主題 下一主題
收起左側

調光LED燈STC15F104單片機源碼

  [復制鏈接]
跳轉到指定樓層
樓主
調光LED燈軟件STC15F104 ,用的是STC宏晶8腳單片機 ,將一個舊的LED燈加了調光功能. 和大家學習探討.

電路原理圖如下:


單片機源程序如下:
  1. /*--------------------------------------------------------
  2. * Name File: KEY,C
  3. * Versions number: 1.0
  4. * Date     : 2016.01.01
  5. * Remarks  : STC15F104E MCU
  6. - 文件名   :KEY.C
  7. - 版本     :1.0
  8. - 日期     :2016.01.01
  9. - 備注     :STC15F104E MCU
  10. --------------------------------------------------------*/
  11. #include"config.h"     //
  12. unsigned char T1RH,T1RL;  //
  13. unsigned char code         KeyCodeMap[6]={ //按鍵值數組0-2是S1-S3短按
  14. 0x01,0x02,0x03,0x10,0x20,0x30         //按鍵值數組3-5是S1-S3長按
  15. };
  16. unsigned char KeySta[3]={//
  17. 1,1,1
  18. };
  19. unsigned int idata KeyDownTime[3]={0,0,0};  //按鍵按下持續時間
  20. void configtime1(unsigned int ms); //定時器1配置
  21. bit led1flag =1;   //LED1狀態標志位
  22. bit led2flag =1;   //LED2狀態標志位
  23. bit led3flag =1;   //LED3狀態標志位
  24. //bit led4flag =0;
  25. bit KeyLFlag = 0; //長按標志位
  26. void KeyScan();     //按鍵的掃描
  27. void KeyDriver();   //按鍵驅動
  28. void LEDOUT();          //
  29. void KeyAction(unsigned char KeyCode);   //按鍵執行
  30. //--------------------------------
  31. void KeyAction(unsigned char KeyCode)
  32. {
  33.           if(KeyCode==0x01)led1flag = ~led1flag;
  34.     if(KeyCode==0x02)led2flag = ~led2flag;
  35.     if(KeyCode==0x03)led3flag = ~led3flag;
  36.         if(KeyCode==0x10)led1flag = ~led1flag;
  37.     if(KeyCode==0x20)led2flag = ~led2flag;
  38.     if(KeyCode==0x30)led3flag = ~led3flag;
  39. }
  40. void LEDOUT()
  41. {
  42.      LED_R=led3flag; //
  43.      LED_G=led1flag; //
  44.      LED_B=led2flag; //
  45. }
  46. //----------------------------
  47. void KeyDriver()
  48. {
  49.    unsigned char i;    //
  50.    static unsigned char idata backup[3]={1,1,1};  //
  51.    static unsigned int idata TimeThr[3]={600,600,600};  //
  52.    for(i=0;i<3;i++)         //循環檢測3個按鍵
  53.    {
  54.    //---------------------------------
  55.       if(KeyDownTime[i] > 0)   //檢測執行快速輸入
  56.           {                            
  57.              if(KeyDownTime[i] >= TimeThr[i])
  58.                  {
  59.                     if(KeyLFlag != 1)
  60.                         {
  61.                        KeyAction(KeyCodeMap[i+3]);  //
  62. //                    TimeThr[i+3] += 200;  //
  63.                KeyLFlag = 1;
  64.             }
  65.                  }
  66.           }
  67.       if(backup[i] != KeySta[i])
  68.           {
  69.              if(backup[i] != 1)
  70.                  {
  71.                     if(KeyLFlag)
  72.                         {
  73.                            KeyLFlag = 0;
  74.                         }
  75.                         else
  76.                         {
  77.                       KeyAction(KeyCodeMap[i]);  //
  78.                         }
  79.                  }
  80.              backup[i] = KeySta[i];  //  
  81.           }
  82.    }
  83. }
  84. //---------定時器1的配置------------
  85. void configtime1(unsigned int ms)
  86. {
  87.    unsigned long tmp;
  88.    tmp = 11059200/12;  //
  89.    tmp =(tmp*ms)/1000;  //
  90.    tmp = 65536 - tmp;   //
  91.    tmp = tmp + 18;      //
  92.    T1RH = (unsigned char)(tmp>>8);  //
  93.    T1RL = (unsigned char)tmp;  //
  94.    TMOD &= 0x0f; //
  95.    TMOD |= 0x10; //
  96.    TH1 = T1RH;  //
  97.    TL1 = T1RL;   //
  98.    ET1 = 1;     //
  99.    TR1 = 1;     //
  100.    EA = 1;   //
  101. }
  102. //---------按鍵的掃描函數----------
  103. void KeyScan()
  104. {
  105.    bit RLED=0;  //
  106.    bit GLED=0;  //
  107.    bit BLED=0;  //
  108.    unsigned char i;  //
  109.    static unsigned char KeyBuf[]={
  110.    0xff,0xff,0xff
  111.    };
  112.    RLED=LED_R; //
  113.    GLED=LED_G; //
  114.    BLED=LED_B; //
  115.    S1 = 1; //
  116.    S2 = 1; //
  117.    S3 = 1; //
  118.    _nop_(); //
  119.    _nop_(); //
  120.    _nop_(); //     
  121.    KeyBuf[0] = (KeyBuf[0]<<1)|S1;  //
  122.    KeyBuf[1] = (KeyBuf[1]<<1)|S2;  //
  123.    KeyBuf[2] = (KeyBuf[2]<<1)|S3;  //
  124.    for(i=0;i<3;i++)
  125.    {
  126.       if(KeyBuf[i]== 0x00)
  127.           {
  128.              KeySta[i] = 0;                  //按鍵為零
  129.                  KeyDownTime[i] += 1;  //按鍵持續按下
  130.           }
  131.           else if(KeyBuf[i]== 0xff)
  132.           {
  133.              KeySta[i] = 1;                 //按鍵彈起狀態
  134.                  KeyDownTime[i]=0;  // 按鍵清零
  135.           }
  136.    }
  137.    _nop_(); //
  138.    _nop_(); //
  139.    LED_R=RLED; //
  140.    LED_G=GLED; //
  141.    LED_B=BLED; //
  142. //   _nop_(); //
  143. ……………………

  144. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
調光LED燈軟件STC15F104.zip (78.79 KB, 下載次數: 91)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:359281 發表于 2018-8-22 12:01 | 只看該作者
調光LED燈軟件STC15F104 ,用的是STC宏晶8腳單片機 ,將一個舊的LED燈加了調光功能. 和大家學習探討.  電路原理圖如下:     單片機源程序如下 --------------------------------------------------------  Name File KEY,C  Versions number 1.0  Date      2016.01.01  Remarks   STC15F104E MCU - 文件名   :KEY.C  - 版本     :1.0 - 日期     :2016.01.01 - 備注     :STC15F104E MCU -------------------------------------------------------- #includeconfig.h      unsigned char T1RH,T1RL;   unsigned char code         KeyCodeMap[6]={ 按鍵值數組0-2是S1-S3短按 0x01,0x02,0x03,0x10,0x20,0x30         按鍵值數組3-5是S1-S3長按 }; unsigned char KeySta[3]={ 1,1,1 }; unsigned int idata KeyDownTime[3]={0,0,0};  按鍵按下持續時間 void configtime1(unsigned int ms); 定時器1配置 bit led1flag =1;   LED1狀態標志位 bit led2flag =1;   LED2狀態標志位 bit led3flag =1;   LED3狀態標志位 bit led4flag =0; bit KeyLFlag = 0; 長按標志位 void KeyScan();     按鍵的掃描 void KeyDriver();   按鍵驅動 void LEDOUT();           void KeyAction(unsigned char KeyCode);   按鍵執行 -------------------------------- void KeyAction(unsigned char KeyCode) {           if(KeyCode==0x01)led1flag = ~led1flag;     if(KeyCode==0x02)led2flag = ~led2flag;     if(KeyCode==0x03)led3flag = ~led3flag;         if(KeyCode==0x10)led1flag = ~led1flag;     if(KeyCode==0x20)led2flag = ~led2flag;     if(KeyCode==0x30)led3flag = ~led3flag; } void LEDOUT() {      LED_R=led3flag;       LED_G=led1flag;       LED_B=led2flag;  } ---------------------------- void KeyDriver() {    unsigned char i;        static unsigned char idata backup[3]={1,1,1};      static unsigned int idata TimeThr[3]={600,600,600};      for(i=0;i3;i++)         循環檢測3個按鍵    {    ---------------------------------       if(KeyDownTime[i]  0)   檢測執行快速輸入           {                                          if(KeyDownTime[i] = TimeThr[i])                  {                     if(KeyLFlag != 1)                         {                        KeyAction(KeyCodeMap[i+3]);                       TimeThr[i+3] += 200;                  KeyLFlag = 1;             }                  }           }       if(backup[i] != KeySta[i])           {              if(backup[i] != 1)                  {                     if(KeyLFlag)                         {                            KeyLFlag = 0;                         }                         else                         {                       KeyAction(KeyCodeMap[i]);                           }                  }              backup[i] = KeySta[i];               }    } } ---------定時器1的配置------------ void configtime1(unsigned int ms) {    unsigned long tmp;    tmp = 1105920012;      tmp =(tmpms)1000;      tmp = 65536 - tmp;       tmp = tmp + 18;          T1RH = (unsigned char)(tmp8);      T1RL = (unsigned char)tmp;      TMOD &= 0x0f;     TMOD = 0x10;     TH1 = T1RH;      TL1 = T1RL;       ET1 = 1;         TR1 = 1;         EA = 1;    } ---------按鍵的掃描函數---------- void KeyScan() {    bit RLED=0;      bit GLED=0;      bit BLED=0;      unsigned char i;      static unsigned char KeyBuf[]={    0xff,0xff,0xff    };     RLED=LED_R;     GLED=LED_G;     BLED=LED_B;      S1 = 1;     S2 = 1;     S3 = 1;      _nop_();     _nop_();     _nop_();          KeyBuf[0] = (KeyBuf[0]1)S1;      KeyBuf[1] = (KeyBuf[1]1)S2;      KeyBuf[2] = (KeyBuf[2]1)S3;      for(i=0;i3;i++)    {       if(KeyBuf[i]== 0x00)           {              KeySta[i] = 0;                  按鍵為零                  KeyDownTime[i] += 1;  按鍵持續按下           }           else if(KeyBuf[i]== 0xff)           {              KeySta[i] = 1;                 按鍵彈起狀態                  KeyDownTime[i]=0;   按鍵清零           }    }    _nop_();     _nop_();      LED_R=RLED;     LED_G=GLED;     LED_B=BLED;     _nop_();  ……………………  …………限于本文篇幅 余下代碼請從51黑下載附件………… 復制代碼  所有資料51hei提供下載   調光LED燈軟件STC15F104.zip (78.79 KB, 下載次數 2)
回復

使用道具 舉報

板凳
ID:359281 發表于 2018-8-22 12:04 | 只看該作者
你好,有匯編的程序嗎?
回復

使用道具 舉報

地板
ID:35873 發表于 2018-8-23 03:25 | 只看該作者
不錯  有空也搞個玩玩
回復

使用道具 舉報

5#
ID:59830 發表于 2018-12-23 00:24 | 只看該作者
沒有匯編
回復

使用道具 舉報

6#
ID:63317 發表于 2019-8-5 09:11 | 只看該作者
謝謝復習資料
回復

使用道具 舉報

7#
ID:591640 發表于 2019-8-5 11:51 來自觸屏版 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

8#
ID:140183 發表于 2020-1-31 21:02 | 只看該作者
很好。太謝謝啦!
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美亚洲国产一区二区三区 | 亚洲精品一区中文字幕乱码 | 鲁一鲁资源影视 | 精品一区国产 | 亚洲区在线 | 久草在线视频中文 | 中文字幕精品视频在线观看 | 欧美精品一区二区三区一线天视频 | 成人国产a| 成人亚洲网| 色欧美片视频在线观看 | 黑人精品欧美一区二区蜜桃 | 国产激情免费视频 | 久久精品日产第一区二区三区 | 免费看91 | 蜜臀久久99精品久久久久久宅男 | 在线观看亚洲精品 | 综合精品久久久 | 日韩成人高清在线 | 国产精品无码久久久久 | 国产成人免费在线 | 日韩精品1区2区3区 成人黄页在线观看 | 草久网 | www久久久 | 国产激情综合五月久久 | 国产精品日日做人人爱 | 国产免费观看一级国产 | 久久国产综合 | 自拍偷拍第一页 | 在线观看你懂的网站 | 亚洲高清一区二区三区 | 欧美性tv| 黄色一级片aaa | 久久久久久久久99 | 亚洲精品91 | 国产精品欧美一区二区三区不卡 | 伊人伊人网| 午夜天堂精品久久久久 | 日韩不卡视频在线观看 | 国产一区二区三区网站 | 尤物在线精品视频 |