標(biāo)題: 單片機(jī)控制光耦+可控硅調(diào)節(jié)亮度程序+過(guò)零檢測(cè)觸發(fā)電路圖 [打印本頁(yè)]

作者: 1256818476    時(shí)間: 2019-1-21 17:25
標(biāo)題: 單片機(jī)控制光耦+可控硅調(diào)節(jié)亮度程序+過(guò)零檢測(cè)觸發(fā)電路圖
用光耦實(shí)現(xiàn)過(guò)零檢測(cè)觸發(fā)可控硅電路原理圖如下:


單片機(jī)可控調(diào)節(jié)程序:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit SW1=P2^0;//用于調(diào)高燈的亮度
  6. sbit SW2=P2^1;//用于調(diào)低燈的亮度
  7. sbit CF=P2^2;//用于觸發(fā)可控硅
  8. sbit SW3=P2^3;//用于控制燈的亮滅
  9. void kdelay();
  10. void maichong();
  11. delay500us(uint z);
  12. void delay10us();
  13. void liangmie();
  14. uint x,y,z,k,i,j;
  15. void main()
  16. {
  17. IT0=1;//設(shè)定外部中斷 0 為下降沿觸發(fā)方式
  18. EX0=1;//開(kāi)外部中斷 0

  19. P2=0xff;
  20. z=10;
  21. j=0;
  22. while(1)
  23. {
  24. if(SW1==0)
  25. {
  26. kdelay(); //軟件 2ms 延時(shí)防抖
  27. if(SW1==0)
  28. {
  29. z--;
  30. if(z==0){z=19;}//燈達(dá)到最亮以后繼續(xù)按下 SW2,燈會(huì)變到最暗
  31. }
  32. while(!SW1);//等待按鍵彈起
  33. }
  34. if(SW2==0)
  35. {
  36. kdelay();
  37. if(SW2==0)
  38. {
  39. z++;
  40. if(z==20){z=0;}//燈達(dá)到最暗以后繼續(xù)按下 SW1,燈會(huì)變到最亮
  41. }
  42. while(!SW2);
  43. }
  44. liangmie();
  45. if(j==0)
  46. {
  47. EA=1; //開(kāi)總中斷
  48. }
  49. else
  50. {
  51. EA=0; //關(guān)總中斷
  52. }

  53. }
  54. }
  55. /************2ms 按鍵防抖動(dòng)延時(shí)函數(shù)**********/
  56. void kdelay()
  57. {
  58. for(i=0;i<200;i++)
  59. {
  60. delay10us(); //調(diào)用 200 次 10us 約為 2ms
  61. }
  62. }
  63. /*將半周期 0.01 秒平均分成 20 等分,每等分為 0.5 毫秒,即 500us*/
  64. /************0.5ms 倍數(shù)的子函數(shù)************/
  65. delay500us(uint z)
  66. {
  67. uchar x,y;

  68. for(x=0;x<z;x++)
  69. {
  70. for(y=0;y<50;y++)
  71. {
  72. delay10us();//調(diào)用 50 次 10us 約為 502us
  73. }
  74. }
  75. }
  76. /*************脈沖函數(shù)*****************/
  77. void maichong()
  78. {
  79. CF=0;
  80. for(k=0;k<10;k++)
  81. {
  82. delay10us();//調(diào)用 10 次 10us 約為 102us
  83. }
  84. CF=1;
  85. }
  86. /*************10us 延時(shí)函數(shù)**************/
  87. void delay10us()
  88. {
  89. _nop_(); _nop_();_nop_();
  90. _nop_(); _nop_();_nop_();
  91. }
  92. /************燈的亮滅控制函數(shù)***********/
  93. void liangmie()
  94. {
  95. if(SW3==0)
  96. {
  97. kdelay();
  98. if(SW3==0)
  99. {
  100. j++;
  101. if(j==2){j=0;}
  102. }
  103. while(!SW1);//等待按鍵彈起
  104. }
  105. }
  106. /**********外部中斷 0 函數(shù)**********/
  107. void Int0(void) interrupt 0
  108. {
  109. delay500us(z);//控制角的大小由 z 決定
  110. maichong();//發(fā)脈沖
  111. }
復(fù)制代碼




作者: 電控1999    時(shí)間: 2019-5-21 17:02
謝謝大神的分享 好資料,51黑有你更精彩!!!

作者: shideli    時(shí)間: 2020-2-10 15:51
謝謝分享
作者: zhangleixbyl    時(shí)間: 2021-3-15 04:17
成功了嗎?
作者: TSTCQH    時(shí)間: 2022-2-23 19:09
要是有原文件就更好了

作者: 阿飛7812    時(shí)間: 2023-2-10 09:08
樓主打個(gè)包發(fā)一下哦 謝謝




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