找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5351|回复: 11
收起左侧

单片机和可控硅控制灯的亮度为什么Proteus仿真不成功?

  [复制链接]
ID:470155 发表于 2019-2-22 14:25 | 显示全部楼层 |阅读模式
单片机驱动可控硅调光的仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
微信截图_20190222142342.png

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit SW1=P2^0;//用于调高灯的亮度
  6. sbit SW2=P2^1;//用于调低灯的亮度
  7. sbit CF=P1^0;//用于触发可控硅
  8. sbit SW3=P2^2;//用于控制灯的亮灭
  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;//设定外部中断 0 为下降沿触发方式
  18. EX0=1;//开外部中断 0

  19. P2=0xff;
  20. z=10;
  21. j=0;
  22. while(1)
  23. {
  24. if(SW1==0)
  25. {
  26. kdelay(); //软件 2ms 延时防抖
  27. if(SW1==0)
  28. {
  29. z--;
  30. if(z==0){z=19;}//灯达到最亮以后继续按下 SW2,灯会变到最暗
  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;}//灯达到最暗以后继续按下 SW1,灯会变到最亮
  41. }
  42. while(!SW2);
  43. }
  44. liangmie();
  45. if(j==0)
  46. {
  47. EA=1; //开总中断
  48. }
  49. else
  50. {
  51. EA=0; //关总中断
  52. }

  53. }
  54. }
  55. /************2ms 按键防抖动延时函数**********/
  56. void kdelay()
  57. {
  58. for(i=0;i<200;i++)
  59. {
  60. delay10us(); //调用 200 次 10us 约为 2ms
  61. }
  62. }
  63. /*将半周期 0.01 秒平均分成 20 等分,每等分为 0.5 毫秒,即 500us*/
  64. /************0.5ms 倍数的子函数************/
  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();//调用 50 次 10us 约为 502us
  73. }
  74. }
  75. }
  76. /*************脉冲函数*****************/
  77. void maichong()
  78. {
  79. CF=0;
  80. for(k=0;k<10;k++)
  81. {
  82. delay10us();//调用 10 次 10us 约为 102us
  83. }
  84. CF=1;
  85. }
  86. /*************10us 延时函数**************/
  87. void delay10us()
  88. {
  89. _nop_(); _nop_();_nop_();
  90. _nop_(); _nop_();_nop_();
  91. }
  92. /************灯的亮灭控制函数***********/
  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 函数**********/
  107. void Int0(void) interrupt 0
  108. {
  109. delay500us(z);//控制角的大小由 z 决定
  110. maichong();//发脉冲
  111. }
复制代码

所有资料51hei提供下载:
仿真1.zip (30.37 KB, 下载次数: 93)
回复

使用道具 举报

ID:96682 发表于 2019-2-22 23:44 | 显示全部楼层
光看这仿真图就没对
回复

使用道具 举报

ID:479615 发表于 2019-2-23 12:25 | 显示全部楼层
图错了
回复

使用道具 举报

ID:470155 发表于 2019-2-28 12:05 | 显示全部楼层
wc86110 发表于 2019-2-22 23:44
光看这仿真图就没对

哪里错了可以指点一下吗
回复

使用道具 举报

ID:213173 发表于 2019-2-28 15:45 | 显示全部楼层
本帖最后由 wulin 于 2019-2-28 22:09 编辑

仿真调光灯效果不一定好,用示波器看波形靠谱些,你的负载电路和过零检测电路画错了。改这样,低电平驱动。 无标题.jpg



回复

使用道具 举报

ID:676699 发表于 2020-4-19 21:41 | 显示全部楼层
wulin 发表于 2019-2-28 15:45
仿真调光灯效果不一定好,用示波器看波形靠谱些,你的负载电路和过零检测电路画错了。改这样,低电平驱动。 ...

可以直接发这个仿真工程出来吗?
回复

使用道具 举报

ID:89515 发表于 2020-4-20 07:21 来自手机 | 显示全部楼层
这种很难做出实际效果,只能看波形对不对
回复

使用道具 举报

ID:692132 发表于 2020-4-20 10:55 来自手机 | 显示全部楼层
很多空调室内风机就是这个原理调节风速的,先照5楼修改电路,原来的电路肯定错了。
回复

使用道具 举报

ID:722476 发表于 2020-4-26 18:36 | 显示全部楼层
楼主方便联系吗?我也在琢磨这个
回复

使用道具 举报

ID:722476 发表于 2020-4-30 22:06 | 显示全部楼层
wulin 发表于 2019-2-28 15:45
仿真调光灯效果不一定好,用示波器看波形靠谱些,你的负载电路和过零检测电路画错了。改这样,低电平驱动。 ...

我尝试了,发现没有效果,请问下代码需要改吗??
回复

使用道具 举报

ID:420836 发表于 2020-5-1 09:30 | 显示全部楼层
感谢你分享的信息。 5楼更正原理图非常有帮助。
回复

使用道具 举报

ID:742354 发表于 2020-5-1 20:58 | 显示全部楼层
图的问题罢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表