找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 964|回复: 3
打印 上一主题 下一主题
收起左侧

单片机5个按键控制5个继电器开关 程序调试不出来

[复制链接]
跳转到指定楼层
楼主
50黑币
一个独立按键可以控制继电器开关,但是我想5个独立按键控制5个继电器程序调不出来,请求大佬指点

下面是一个按键控制一个继电器单片机程序
#include <reg52.h>

#define uchar unsigned char

sbit A = P3 ^ 0;

sbit RelayEN = P2 ^ 0;                                   //定义继电器开启信号

void Timer0Init();                                           //声明定时器0初始化函数
void RelayProcess();                                   //声明断电器处理函数

uchar count = 0;                                           //计秒数

void main()                                                           //主函数
{
        RelayEN = 1;                                           //开机时关闭继电器,否则一上电继电器有动作;

        Timer0Init();
        RelayProcess();
        
}

void Timer0Init()                                           //定时器初始化函数
{
        TMOD |= 0x01;                                           //“|”使用多个定时器时不受影响
        TH0 = 0xFC;                                                   //定时1MS
        TL0 = 0x67;
        TR0 = 1;                                                   //开启定时器0
        EA = 1;                                                           //开启总中断
        ET0 = 1;                                                   //开启定时器0中断
}

void RelayProcess()                                          //继电器处理函数
{
        A = 0x01;                                                  //读外部状态时,先使端口输出高电平;
        while (1)
        {
                if(!A)                                          //判定有无按键按下
                {
                        if(count >= 20)                          //判定秒数是否达到20MS,即去抖
                        {
                                count = 0;
                                if(!A)
                                {
                                        RelayEN = ~RelayEN;//当按键按下时,改变继电器的状态
                                        while(!A);           //等待按键释放;
                                }
                        }
                }
        }
        
}

void Timer0() interrupt 1                                //定时器0中断函数
{
        TH0 = 0xFC;                                                        //重新赋值给定时器0
        TL0 = 0x67;
        count++;                                                        //计秒数
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2022-4-7 00:12 | 只看该作者
  1. sbit Key_A = P3 ^ 0;
  2. sbit Key_B = P3 ^ 1;
  3. sbit Key_C = P3 ^ 2;
  4. ...

  5. sbit RelayEN = P2 ^ 0;                                   //定义继电器开启信号
  6. sbit RelayEN2 = P2 ^ 1;                                   //定义继电器开启信号
  7. sbit RelayEN3 = P2 ^ 2;                                   //定义继电器开启信号
  8. ...

  9. if(!Key_A || !Key_B || !Key_C)                                          //判定有无按键按下
  10. {
  11.         if(count >= 20)                          //判定秒数是否达到20MS,即去抖
  12.         {
  13.                 if(!Key_A)
  14.                 {
  15.                         RelayEN = ~RelayEN;//当按键按下时,改变继电器的状态
  16.                 }
  17.                 if(!Key_B)
  18.                 {
  19.                         RelayEN2 = ~RelayEN2;//当按键按下时,改变继电器的状态
  20.                 }
  21.                 if(!Key_C)
  22.                 {
  23.                         RelayEN3 = ~RelayEN3;//当按键按下时,改变继电器的状态
  24.                 }
  25.                 while(!Key_A || !Key_B || !Key_C);           //等待按键释放;
  26.         }
  27. }else{
  28.         count = 0;
  29. }
复制代码


回复

使用道具 举报

板凳
ID:999318 发表于 2022-4-7 01:45 | 只看该作者

谢谢啊,可以了,但是就第一个三极管基极加电阻就可以控制,后面几个要去掉基极的限流电阻,这是什么原因啊。可以看一下第二个跟第三个对比,进来都是低电平,第二个电机转[img][/img],但第三个不转,就是要去掉电阻吗[img]
回复

使用道具 举报

地板
ID:999318 发表于 2022-4-7 01:47 | 只看该作者

还有第一个电机转一段时间,也就自己停了。所以我把电阻都取了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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