亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 關(guān)于單片機(jī)呼吸燈的新想法設(shè)計(jì) [打印本頁(yè)]

作者: 鄧文雄ABC    時(shí)間: 2018-9-10 16:59
標(biāo)題: 關(guān)于單片機(jī)呼吸燈的新想法設(shè)計(jì)
        看過(guò)一些用單片機(jī)做的呼吸燈,很多都是利于延時(shí)做的。如果用延時(shí)做,會(huì)有大量的延時(shí)處理。這是非常落后的程序,再想擴(kuò)展別的功能就可能得不到正確的響應(yīng)。我想到一個(gè)方法來(lái)做,并且已實(shí)現(xiàn)同時(shí)多路LED 的呼吸燈;
原理圖見(jiàn)附件。
利用一個(gè)定時(shí)器產(chǎn)生20US的中斷。每500個(gè)中斷時(shí)間就是10ms,利用500個(gè)中斷控制這10ms的高低電平(占空比),如250個(gè)中斷高,250個(gè)中斷低,就是50%的占空比。10MS的周期剛好是100HZ,LED 100HZ刷新足夠了。利用另一個(gè)定時(shí)器來(lái)控制占空比的時(shí)間,這樣就產(chǎn)生的呼吸效果。而且可以同時(shí)控制多路。
單片機(jī)源碼:
  1. #ifndef _CONFIG_H
  2. #define _CONFIG_H
  3. #include "STC15W40XXX.H"
  4. #include <intrins.h>
  5. //定義主時(shí)鐘
  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. /* 數(shù)據(jù)類(lèi)型定義 */
  11. typedef  signed    char    uchar;    // 8位有符號(hào)整型數(shù)
  12. typedef  signed    int     uint;   //16位有符號(hào)整型數(shù)
  13. typedef  signed    long    ulong;   //32位有符號(hào)整型數(shù)
  14. //定時(shí)器T0用作脈沖發(fā)生器,定時(shí)20us
  15. void Timer0Init(void)  //20微秒@24.000MHz
  16. {
  17. AUXR &= 0x7F;  //定時(shí)器時(shí)鐘12T模式
  18. TMOD &= 0xF0;  //設(shè)置定時(shí)器模式
  19. TL0 = 0xD8;  //設(shè)置定時(shí)初值
  20. TH0 = 0xFF;  //設(shè)置定時(shí)初值
  21. TF0 = 0;  //清除TF0標(biāo)志
  22. TR0 = 1;  //定時(shí)器0開(kāi)始計(jì)時(shí)
  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;     //全部按鍵的當(dāng)前狀態(tài)
  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();       //按鍵掃描函數(shù)
  44. void Key_Function();             //按鍵功能函數(shù)

  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定時(shí)器初始化
  65. Timer0Init();    //定時(shí)器0初始化
  66. UartInit();     //串口初始化
  67. EA = 1;           //打開(kāi)總中斷
  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中斷函數(shù) ************************/
  89. //定義20us的中斷,因?yàn)?0ms的周期信號(hào)100hz控制LED頻頻, 在10MS內(nèi)分成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定時(shí)器中斷 1ms的中斷時(shí)間
  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;                       //清中斷標(biāo)志
  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. }
復(fù)制代碼

電路原理圖如下:


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


作者: 鄧文雄ABC    時(shí)間: 2018-9-10 17:00
按鍵部份已刪除

作者: z905188015    時(shí)間: 2018-9-11 14:38
學(xué)習(xí)學(xué)習(xí),不錯(cuò)不錯(cuò)
作者: z905188015    時(shí)間: 2018-9-11 14:38
學(xué)習(xí)學(xué)習(xí),看看看看,見(jiàn)過(guò)大佬
作者: leeder_a    時(shí)間: 2018-9-11 20:02
延時(shí)做的太占資源,芯片就干不了其它事了;用中斷來(lái)做,所占的資源很少,芯片可處理其它事情。
作者: bhjyqjs    時(shí)間: 2018-9-12 08:37
專(zhuān)業(yè)呼吸燈可以,要是在其他應(yīng)用中,20uS中斷一次,單片機(jī)什么也干不了
作者: 鄧文雄ABC    時(shí)間: 2019-1-25 10:15
單片機(jī)的頻率可以盡量設(shè)置最高的,比較24M或 以上,20US還是可以的,中斷里面不要做過(guò)多的事就可以





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