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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5575|回復: 7
收起左側

調光LED燈STC15F104單片機源碼

  [復制鏈接]
ID:59830 發表于 2018-8-22 00:09 | 顯示全部樓層 |閱讀模式
調光LED燈軟件STC15F104 ,用的是STC宏晶8腳單片機 ,將一個舊的LED燈加了調光功能. 和大家學習探討.

電路原理圖如下:
0.png

單片機源程序如下:
  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)




回復

使用道具 舉報

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 | 顯示全部樓層
不錯  有空也搞個玩玩
回復

使用道具 舉報

ID:59830 發表于 2018-12-23 00:24 | 顯示全部樓層
沒有匯編
回復

使用道具 舉報

ID:63317 發表于 2019-8-5 09:11 | 顯示全部樓層
謝謝復習資料
回復

使用道具 舉報

ID:591640 發表于 2019-8-5 11:51 來自手機 | 顯示全部樓層
謝謝樓主分享
回復

使用道具 舉報

ID:140183 發表于 2020-1-31 21:02 | 顯示全部樓層
很好。太謝謝啦!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天视频成人 | 亚洲一区中文字幕 | 欧美亚洲综合久久 | 国产四区 | 亚洲精品一区二区网址 | 香蕉二区 | 成人激情视频在线播放 | 欧美激情精品久久久久久变态 | 亚洲精品一区二区三区 | www国产成人免费观看视频,深夜成人网 | 亚洲综合天堂网 | 丝袜 亚洲 另类 欧美 综合 | 国产精品a一区二区三区网址 | 午夜成人免费视频 | 欧美激情五月 | 久久久久一区二区 | 国产精品美女久久久久aⅴ国产馆 | 中文字幕97 | 日本不卡一区二区三区 | 美日韩中文字幕 | 亚洲精品91| 日韩免费av网站 | 亚洲欧美在线免费观看 | 国产一级视频在线观看 | 国产成人影院 | 久草免费福利 | 亚洲一二三区在线观看 | 国产91丝袜在线18 | 在线视频国产一区 | 亚洲精品4| 欧美天堂在线观看 | 日韩av.com| 羞羞视频网站 | 一级毛片视频 | 国产成人福利在线观看 | 亚洲女人天堂网 | 狠狠干在线 | 成人av免费在线观看 | 国产精品污www一区二区三区 | 男人的天堂久久 | 人人看人人搞 |