标题: 单片机+可控硅+两键 控制灯亮灭程序 [打印本页]

作者: banqiao    时间: 2023-5-17 17:56
标题: 单片机+可控硅+两键 控制灯亮灭程序
发一个单片机控制可控硅导通的程序。可控硅+两键控制灯亮灭
单片机源程序如下:
  1. /***************************************************************
  2. 功  能:按键k1按下灯泡由灭逐渐变亮,按键k2按下灯泡由亮逐渐变灭
  3. 单片机:STC90C58+
  4. 晶  振:12M
  5. 编  程:hgh
  6. ****************************************************************/

  7. #include<stc90c.h>
  8. #include<intrins.h>

  9. sbit k1=P3^4;
  10. sbit k2=P3^5;
  11. sbit BT=P2^0;

  12. unsigned int t;

  13. void Delay6us()                //@12.000MHz
  14. {
  15.         _nop_();
  16.         _nop_();
  17. }



  18. void INT_1() interrupt 2        //外部中断1,过零触发
  19. {
  20.         if(k1==0)
  21.         {
  22.                 t -= 10;                        //减少触发延时时间,灯逐渐亮
  23.                 if(t<=10)
  24.                         {
  25.                                 t=10;
  26.                         }
  27.         }
  28.         if(k2==0)
  29.         {
  30.                 t += 10;                        //增加触发延时时间,灯逐渐熄灭
  31.                 if(t>=8000)
  32.                 {
  33.                         t=8000;
  34.                 }
  35.         }
  36.         TH0=(65536-t)/256;
  37.         TL0=(65536-t)%256;
  38.         TR0=1;
  39. }

  40. void T0_time() interrupt 1        //T0定时器,定时触发可控硅的脉冲发出时间
  41. {                                                       
  42.         BT=0;
  43.         TR0=0;
  44.         Delay6us();
  45.         BT=1;
  46. }

  47. void init()
  48. {
  49.         EA=1;
  50.         IT1=1;
  51.         ET0=1;
  52.         EX1=1;
  53.         TMOD=0x01;
  54.         t=1000;                        //经测试,过零后8ms可控硅就不能触发导通了
  55. }                                        //所以t最大取8000即可

  56. void main()
  57. {
  58.         init();

  59.         while(1);
  60.        
  61. }
复制代码



作者: jovew    时间: 2023-5-18 08:40
仿真运行时,没有反应?灯不亮!
作者: 文家小阿哥    时间: 2023-5-18 13:25
轻身经历
void T0_time() interrupt 1        //T0定时器,定时触发可控硅的脉冲发出时间
{                                                      
        BT=0;
        TR0=0;
        Delay6us();
        BT=1;
}
中的Delay6us();很重要,太短了控制不了,太长了最低值过大
作者: banqiao    时间: 2023-5-19 10:06
我在实际电路使用可以控制,没问题。
作者: banqiao    时间: 2023-5-19 10:07
文家小阿哥 发表于 2023-5-18 13:25
轻身经历
void T0_time() interrupt 1        //T0定时器,定时触发可控硅的脉冲发出时间
{              ...

你说的很对,6us是我实验得出的。
作者: banqiao    时间: 2023-5-19 13:52
jovew 发表于 2023-5-18 08:40
仿真运行时,没有反应?灯不亮!

我在实际电路中使用很正常,可以正常控制可控硅。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1