找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1497|回复: 8
收起左侧

C51单片机有4个按钮控制4个LED,程序上电LED高电平,如何修改成上电低电平?谢谢

[复制链接]
ID:384552 发表于 2022-1-4 15:31 | 显示全部楼层 |阅读模式
C51,有4个按钮控制4个LED,程序上电LED高电平,初学不懂C语音,请问如何修改成上电低电平,谢谢

单片机源程序如下:
/C51,有4个按钮,按钮1按下,LED1亮;
//按钮2按下,LED1灭,LED2亮;以此类推,
#include<reg52.h>
sbit led1=P1^1; //led灯,
sbit led2=P1^2; //led灯,
sbit led3=P1^3; //led灯,
sbit led4=P1^4; //led灯,
sbit key1=P2^1; //按键,
sbit key2=P2^2; //按键,
sbit key3=P2^3; //按键,
sbit key4=P2^4; //按键,
void delay(unsigned int t) //延时函数
{
while(--t);
}
void main()
{
while(1)
{
if(key1 == 0) //如果高电平按下按键就==1
{
delay(200); //按键防抖
if(key1 == 0)
{
led1=1; //如果低电平亮就=0
led2=0;
led3=0;
led4=0;
}
}
if(key2 == 0)
{
delay(200); //按键防抖
if(key2 == 0)
{
led1=0; //如果低电平亮就=0
led2=1;
led3=0;
led4=0;
}
}
if(key3 == 0)
{
delay(200); //按键防抖
if(key3 == 0)
{
led1=0; //如果低电平亮就=0
led2=0;
led3=1;
led4=0;
}
}
if(key4 == 0)
{
delay(200); //按键防抖
if(key4 == 0)
{
led1=0; //如果低电平亮就=0
led2=0;
led3=0;
led4=1;
}
}
}
}
回复

使用道具 举报

ID:8455 发表于 2022-1-4 16:24 | 显示全部楼层
在主函数内将LED脚初始化为0即可,在while循环前 加上led1=o;
回复

使用道具 举报

ID:908826 发表于 2022-1-4 16:36 | 显示全部楼层
上电高电平,这个我咋觉得你就算在程序给他拉低,在通电一瞬间到程序运行到拉低那句程序这个极短的时间间隔内还是高电平。
回复

使用道具 举报

ID:57657 发表于 2022-1-4 16:51 | 显示全部楼层
13205495918 发表于 2022-1-4 16:36
上电高电平,这个我咋觉得你就算在程序给他拉低,在通电一瞬间到程序运行到拉低那句程序这个极短的时 ...

STC8已经把这个问题解决了,IO口上电瞬间高阻状态。
回复

使用道具 举报

ID:979299 发表于 2022-1-4 16:56 | 显示全部楼层
加一句就行了,另外格式整理了一下,便于查看
#include<reg52.h>
sbit led1=P1^1; //led灯,
sbit led2=P1^2; //led灯,
sbit led3=P1^3; //led灯,
sbit led4=P1^4; //led灯,
sbit key1=P2^1; //按键,
sbit key2=P2^2; //按键,
sbit key3=P2^3; //按键,
sbit key4=P2^4; //按键,
void delay(unsigned int t) //延时函数
{
        while(--t);
}
void main()
{
        P1=0x00;  
while(1)
        {
                if(key1 == 0) //如果高电平按下按键就==1
                {
                        delay(200); //按键防抖
                        if(key1 == 0)
                        {
                                led1=1; //如果低电平亮就=0
                                led2=0;
                                led3=0;
                                led4=0;
                        }
                }
                if(key2 == 0)
                {
                        delay(200); //按键防抖
                        if(key2 == 0)
                        {
                                led1=0; //如果低电平亮就=0
                                led2=1;
                                led3=0;
                                led4=0;
                        }
                }
                if(key3 == 0)
                {
                        delay(200); //按键防抖
                        if(key3 == 0)
                        {
                                led1=0; //如果低电平亮就=0
                                led2=0;
                                led3=1;
                                led4=0;
                        }
                }
                if(key4 == 0)
                {
                        delay(200); //按键防抖
                        if(key4 == 0)
                        {
                                led1=0; //如果低电平亮就=0
                                led2=0;
                                led3=0;
                                led4=1;
                        }
                }
        }
}
回复

使用道具 举报

ID:509408 发表于 2022-1-4 17:00 | 显示全部楼层
如楼上所说,51单片机上电瞬间有极短的高电平,如果你想拉低可以接三极管、反相器把电平 翻转为低平。除非一些场合需要大多是没必要这么做。 为了防止误操作,可以上电时软件延时一下规避上电不受控的高电平时间。
回复

使用道具 举报

ID:384552 发表于 2022-1-4 17:55 | 显示全部楼层
兴安xa 发表于 2022-1-4 16:56
加一句就行了,另外格式整理了一下,便于查看
#include
sbit led1=P1^1; //led灯,

通过,谢谢
回复

使用道具 举报

ID:384552 发表于 2022-1-4 17:59 | 显示全部楼层
sbit led1=P1^1; //led灯,
发现修改sbit led2=P1^2; //led灯,
sbit led3=P1^3; //led灯,
sbit led4=P1^4; //led灯,
sbit key1=P2^1; //按键,
sbit key2=P2^2; //按键,
sbit key3=P2^3; //按键,
sbit key4=P2^4; 引脚后仿真无效,如 led2=P1^2改成led2=p3.0;
回复

使用道具 举报

ID:384552 发表于 2022-5-18 23:29 | 显示全部楼层
兴安xa 发表于 2022-1-4 16:56
加一句就行了,另外格式整理了一下,便于查看
#include
sbit led1=P1^1; //led灯,

谢谢您的答复
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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