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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于單片機呼吸燈的新想法設計

[復制鏈接]
跳轉到指定樓層
樓主
        看過一些用單片機做的呼吸燈,很多都是利于延時做的。如果用延時做,會有大量的延時處理。這是非常落后的程序,再想擴展別的功能就可能得不到正確的響應。我想到一個方法來做,并且已實現同時多路LED 的呼吸燈;
原理圖見附件。
利用一個定時器產生20US的中斷。每500個中斷時間就是10ms,利用500個中斷控制這10ms的高低電平(占空比),如250個中斷高,250個中斷低,就是50%的占空比。10MS的周期剛好是100HZ,LED 100HZ刷新足夠了。利用另一個定時器來控制占空比的時間,這樣就產生的呼吸效果。而且可以同時控制多路。
單片機源碼:
  1. #ifndef _CONFIG_H
  2. #define _CONFIG_H
  3. #include "STC15W40XXX.H"
  4. #include <intrins.h>
  5. //定義主時鐘
  6. #define FOSC 24000000UL           //20MHZ
  7. #define T1000Hz (FOSC / 12 / 1000)
  8. #define CCP_S0 0x10 //P_SW1.4
  9. #define CCP_S1 0x20 //P_SW1.5

  10. /* 數據類型定義 */
  11. typedef  signed    char    uchar;    // 8位有符號整型數
  12. typedef  signed    int     uint;   //16位有符號整型數
  13. typedef  signed    long    ulong;   //32位有符號整型數
  14. //定時器T0用作脈沖發生器,定時20us
  15. void Timer0Init(void)  //20微秒@24.000MHz
  16. {
  17. AUXR &= 0x7F;  //定時器時鐘12T模式
  18. TMOD &= 0xF0;  //設置定時器模式
  19. TL0 = 0xD8;  //設置定時初值
  20. TH0 = 0xFF;  //設置定時初值
  21. TF0 = 0;  //清除TF0標志
  22. TR0 = 1;  //定時器0開始計時
  23. ET0=1;
  24. }
  25. #endif

  26. #include "main.h"
  27. sbit LEDAll = P3^5;
  28. sbit LEDA = P3^2;
  29. sbit LEDB = P3^3;
  30. sbit LEDC = P5^5;
  31. sbit LEDD = P5^4;
  32. sbit KEY_On=P3^4;
  33. bit Power_on=0;
  34. uchar KeySta = 1;     //全部按鍵的當前狀態
  35. uchar backup = 1;     //按鍵值備份,保存前一次的值

  36. uint cnt;
  37. uint value;
  38. uint PWM_Cont=0;

  39. //--------------------
  40. void UartInit();           [url=]//9600bps@33.1776MHz[/url]
  41. void Timer0Init();           //Timer0 set
  42. void PCATimerInit();        //Timer0 set
  43. void Key_scan();       //按鍵掃描函數
  44. void Key_Function();             //按鍵功能函數

  45. void Delay500ms()  [url=]//@33.1776MHz[/url]
  46. {
  47. unsigned char i, j, k;
  48. _nop_();
  49. _nop_();
  50. i = 64;
  51. j = 9;
  52. k = 179;
  53. do
  54. {
  55.   do
  56.   {
  57.    while (--k);
  58.   } while (--j);
  59. } while (--i);
  60. }

  61. /**********************************************/
  62. void main()
  63. {
  64. PCATimerInit();   //PCA定時器初始化
  65. Timer0Init();    //定時器0初始化
  66. UartInit();     //串口初始化
  67. EA = 1;           //打開總中斷
  68. Delay500ms();
  69. SBUF=0XFF;
  70. LEDAll=0;
  71. LEDA=0;
  72. LEDB=0;
  73. LEDC=0;
  74. LEDD=0;
  75. P1=0X00;


  76. while(1)
  77. {
  78.     if(Power_on )
  79. {
  80. //  LEDAll=0;
  81. }
  82. else
  83. {
  84.   //LEDAll=1;
  85. }


  86. }
  87. }
  88. /********************** Timer0 20us中斷函數 ************************/
  89. //定義20us的中斷,因為10ms的周期信號100hz控制LED頻頻, 在10MS內分成500分占空比。每20US一次。

  90. void timer0 (void) interrupt 1
  91. {  
  92.    static uint P_20us=0;
  93.    EA=0;
  94.    P_20us++;
  95. if(P_20us>=500)
  96. {
  97.   LEDAll=1;
  98.   P_20us=0;
  99.       
  100. }
  101. else
  102. {
  103.   if(P_20us==PWM_Cont)
  104.   LEDAll=0;
  105. }
  106.   EA=1;
  107. }
  108. //PCA定時器中斷 1ms的中斷時間
  109. void PCA_isr() interrupt 7 using 1
  110. {

  111.   static bit i=0;
  112.   static uchar j=0;
  113.    
  114.   j++;
  115.     CCF0 = 0;                       //清中斷標志
  116.     CCAP0L = value;
  117.     CCAP0H = value >> 8;            //更新比較值
  118.     value += T1000Hz;
  119. Key_scan();
  120. Key_Function();
  121.    if(j>=5)
  122.    {
  123.      j=0;
  124. if(i==0)
  125. {
  126.   PWM_Cont++;
  127.   if(PWM_Cont==500)
  128.   {
  129.    i=1;
  130.   }  
  131. }
  132. else
  133. {
  134.   PWM_Cont--;
  135.   if(PWM_Cont==20)
  136.   {
  137.    i=0;
  138.   }
  139. }
  140. }

  141. }
復制代碼

電路原理圖如下:


下載:
直徑105MM的三色呼吸燈.pdf (104.15 KB, 下載次數: 16)

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:301968 發表于 2018-9-10 17:00 | 只看該作者
按鍵部份已刪除
回復

使用道具 舉報

板凳
ID:384937 發表于 2018-9-11 14:38 | 只看該作者
學習學習,不錯不錯
回復

使用道具 舉報

地板
ID:384937 發表于 2018-9-11 14:38 | 只看該作者
學習學習,看看看看,見過大佬
回復

使用道具 舉報

5#
ID:392628 發表于 2018-9-11 20:02 | 只看該作者
延時做的太占資源,芯片就干不了其它事了;用中斷來做,所占的資源很少,芯片可處理其它事情。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:66287 發表于 2018-9-12 08:37 | 只看該作者
專業呼吸燈可以,要是在其他應用中,20uS中斷一次,單片機什么也干不了
回復

使用道具 舉報

7#
ID:301968 發表于 2019-1-25 10:15 | 只看該作者
單片機的頻率可以盡量設置最高的,比較24M或 以上,20US還是可以的,中斷里面不要做過多的事就可以

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品二区 | 手机av在线| 在线免费观看黄色 | 亚洲欧美日韩网站 | 一级做a爰片性色毛片16美国 | 天天操天天操 | 欧美片网站免费 | 中文字幕在线国产 | 一区二区三区四区免费观看 | 国产激情在线 | 欧美日韩在线观看一区 | 在线不卡视频 | 精品一区国产 | 久久久久国产精品一区三寸 | 国产成人精品网站 | 国产四区| 国产精品黄视频 | 国产精品久久久久aaaa樱花 | 99热这里都是精品 | 欧美老妇交乱视频 | 欧美理论在线观看 | 亚洲一区在线播放 | 国产精品不卡视频 | 欧美日韩国产在线 | 亚洲精品一区二区二区 | 日韩欧美专区 | 天天爱天天操 | 激情毛片| 视频一二三区 | 欧美日韩国产一区二区三区 | 日韩视频一区二区三区 | 精品视频一区二区三区在线观看 | 国产精品亚洲第一 | 日韩中文字幕在线观看视频 | 欧美激情精品久久久久久 | 天天色官网| 国产精品久久av | 欧美日韩综合 | 国产精品久久久久久久久久 | 人人99| 日韩一区二区在线视频 |