找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1222|回复: 1
收起左侧

请求高人帮助 磁保持继电器的驱动程序如何编写?

[复制链接]
ID:261455 发表于 2020-4-9 14:13 | 显示全部楼层 |阅读模式
JRX.jpg

见图。本人初学单片机,想写一个这个程序,由于才疏学浅,无法实现,请高人帮助指导一下,不胜感激,谢谢!
回复

使用道具 举报

ID:213173 发表于 2020-4-9 20:07 | 显示全部楼层
按你的原理图给你写个的程序,未经实物验证,仅供参考。
  1. /*******************************
  2. 本程序只适合STC15系列1T单片机
  3. 使用内部时钟11.0592MHz
  4. 磁保持继电器与输出端口需要对应
  5. *******************************/
  6. #include <reg51.h>
  7. #include <intrins.h>
  8. //特殊功能寄存器声明
  9. sfr P3M0=0xB2;   //端口3模式寄存器0
  10. sfr P3M1=0xB1;   //端口3模式寄存器1
  11. //端口声明
  12. sbit key =P3^0;
  13. sbit OUT1=P3^2;
  14. sbit OUT2=P3^3;
  15. //变量声明
  16. unsigned int count=0;//消抖计数变量
  17. bit lock=0;//按键自锁位变量
  18. bit flag=0;//按键状态位变量
  19. //延时函数
  20. void Delay100ms()                //@11.0592MHz
  21. {
  22.         unsigned char i, j, k;
  23.         _nop_();
  24.         _nop_();
  25.         i = 5;
  26.         j = 52;
  27.         k = 195;
  28.         do
  29.         {
  30.                 do
  31.                 {
  32.                         while (--k);
  33.                 } while (--j);
  34.         } while (--i);
  35. }
  36. //主函数
  37. void main()
  38. {
  39.         OUT1=0;//初始化输出端口
  40.         OUT2=0;//初始化输出端口
  41.         P3M1 = 0x00;//设置P3.2/P3.3推挽模式
  42.         P3M0 = 0x0c;//设置P3.2/P3.3推挽模式
  43.         while(1)
  44.         {
  45.                 if(!key)//按键按下
  46.                 {
  47.                         if(++count>=500 && lock==0)//消抖与自锁
  48.                         {
  49.                                 lock=1;//自锁,防止长按重复响应
  50.                                 flag=~flag;//按键状态标志取反
  51.                                 if(flag)
  52.                                 {
  53.                                         OUT1=1;//继电器吸合
  54.                                         Delay100ms();
  55.                                         OUT1=0;
  56.                                 }
  57.                                 else
  58.                                 {
  59.                                         OUT2=1;//继电器释放
  60.                                         Delay100ms();
  61.                                         OUT2=0;
  62.                                 }
  63.                         }
  64.                 }
  65.                 else//按键松手
  66.                 {
  67.                         lock=0;//自锁标志清0
  68.                         count=0;//消抖计数清0
  69.                 }
  70.         }
  71. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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