数码之家

 找回密码
 立即注册
搜索
查看: 1180|回复: 16

[C51] 求一个51单片机程序,根据外部输入信号高低,固定模组开关显示的状态

[复制链接]
发表于 2023-4-14 15:41:50 | 显示全部楼层 |阅读模式
500家元
写得好,定有酬劳
判断外部输入的状态
上图为某网络模组的接线图
LED为指示灯,CNT为输出,KEY为按键
开关打开时CNT=1LED=0;开关关闭时CNT=0LED=1.
KEY每接地一次,开关状态取反一次。

要求:
增加一个STC单片机,根据外部输入信号(电平高低),固定模组开关显示的状态!
即:
当输入是低电平时,确保开关始终处于关闭状态;

当输入是高电平时,保证开关始终处于打开状态;

根据指示灯LED的状态,判断是否需要给把按键KEY拉低一次,始终让输入状态与开关状态保持一致。

附件: 您需要 登录 才可以下载或查看,没有账号?立即注册
发表于 2023-4-14 16:17:19 来自手机浏览器 | 显示全部楼层
用ChatGPT呀
回复

使用道具 举报

发表于 2023-4-14 16:32:33 | 显示全部楼层

好主意               
回复

使用道具 举报

发表于 2023-4-15 19:28:46 | 显示全部楼层
ChatGPT不二之选
回复

使用道具 举报

发表于 2023-4-18 09:56:34 | 显示全部楼层
本帖最后由 cyj988 于 2023-4-18 10:03 编辑


if(key==0)
{
kaiguan=!kaiguan;

if(kaiguan==0)
{ed=1;
cnt=0;}
else
{led=0;
cnt=1;}
}
}
回复

使用道具 举报

发表于 2023-4-18 11:31:09 | 显示全部楼层
这个简单吧,

简单的判断语句就搞定了啊
回复

使用道具 举报

发表于 2023-4-18 15:16:57 | 显示全部楼层
求一个51单片机程序,根据外部输入信号高低
回复

使用道具 举报

发表于 2023-4-19 08:29:52 | 显示全部楼层
chatgpt几分钟搞定,自己写还得去查规格书
回复

使用道具 举报

发表于 2023-4-20 21:28:39 | 显示全部楼层
是不是KEY1对应LED1和CNT1,KEY2对应LED2和CNT2,KEY3对应LED3和CNT3?三组开关各自独立,互不干扰?
回复

使用道具 举报

 楼主| 发表于 2023-4-22 11:29:36 | 显示全部楼层
温力口 发表于 2023-4-20 21:28
是不是KEY1对应LED1和CNT1,KEY2对应LED2和CNT2,KEY3对应LED3和CNT3?三组开关各自独立,互不干扰? ...

是的呀,各自独立,互不妨碍
回复

使用道具 举报

发表于 2023-4-22 15:02:27 | 显示全部楼层
HAHAHHHHH
回复

使用道具 举报

发表于 2023-4-22 22:01:03 | 显示全部楼层
/*****************************************
1、原理图中的管脚与手册不符。
2、这51单片机复位时各I/O口都是高电平,要进入
     程序后才能按程序要求变为低电平,如果KEY为低
     电平,上电复位后CNT会有瞬间(微秒级级别)的
     高电电平,再变为低电平。不知是否影响实际应用。
******************************************/


#include<reg52.h>
sbit KEY1=P2^4;
sbit LED1=P2^5;
sbit CNT1=P3^2;   //因没有P4端口,现改为P3端口,你可以根据需要自己改为别的。

sbit KEY2=P0^1;
sbit LED2=P1^1;
sbit CNT2=P3^1;   //因没有P4端口,现改为P3端口,你可以根据需要自己改为别的。

sbit KEY3=P0^2;
sbit LED3=P1^0;
sbit CNT3=P3^0;   //因没有P4端口,现改为P3端口,你可以根据需要自己改为别的。


void main(void)
{
        while(1)
        {
                CNT1=KEY1;     //CNT的状态就是KEY的状态,以下类同。
                LED1=~KEY1;    //LED的状态就是KEY的反相,以下类同。
                CNT2=KEY2;
                LED2=~KEY2;
                CNT3=KEY3;
                LED3=~KEY3;
        }
}
回复

使用道具 举报

发表于 2023-4-23 16:31:54 | 显示全部楼层
根据指示灯LED的状态,判断是否需要给把按键KEY拉低一次,始终让输入状态与开关状态保持一致。
这句话啊
始终让输入状态与开关状态保持一致,那程序控制直接信号跟随就行了呗,不需要判断指示灯状态拉低key啊 ,还是强制要求
回复

使用道具 举报

发表于 2023-4-23 17:23:54 | 显示全部楼层
估计你写出来他也看不懂
回复

使用道具 举报

发表于 2023-5-6 17:47:49 | 显示全部楼层
#include <reg51.h>

sbit LED = P1^0; // 指示灯
sbit CNT = P1^1; // 输出
sbit KEY = P1^2; // 按键

void main() {
    unsigned char input; // 外部输入信号

    while (1) {
        input = P2; // 读取外部输入信号

        if (input == 0) { // 低电平
            CNT = 0; // 开关关闭
            LED = 1; // 指示灯亮
        } else { // 高电平
            CNT = 1; // 开关打开
            LED = 0; // 指示灯灭
        }

        if (LED == CNT) { // 如果开关状态与输入状态不一致
            KEY = 0; // 拉低按键
            while (LED == CNT); // 等待开关状态与输入状态一致
            KEY = 1; // 松开按键
        }
    }
}

使用了P2口来读取外部输入信号,根据输入信号的高低来控制开关的状态,并且根据指示灯的状态来判断是否需要拉低按键,以保持输入状态与开关状态一致。
回复

使用道具 举报

发表于 2023-5-8 08:48:59 | 显示全部楼层
ChatGPTChatGPT
回复

使用道具 举报

发表于 2024-3-17 18:06:24 | 显示全部楼层
过来学习了,感谢各位大佬们的分享!!!
回复

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-11 05:15 , Processed in 0.343200 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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