当前位置:编程学习 > C/C++ >>

51单片机的按键控制小灯亮灭的问题(程序类型:c语言)

具体要求是:按两下按键,灯亮;按两下按键,灯灭; 求一个最简练的C语言程序完成此功能,谢谢大家了,急用..
追问:可以不用中断吗?
这个程序按键怎么消抖得?
我之写了个不用中断的,但不行,等等,我把程序理好,再发上来,你看看是哪里出错了?恩,马上就好,谦虚了,恩,单键控制
答案:int0中断 程序我先试试 

#include <reg52.h>     
sbit P10 = P1^0;
sbit K1= P3^2;	   
unsigned char a;
void main(void)	
{
    
	IT0=1;   
	EX0=1;
	EA=1;        
	while(1)  
	{		
	}

}

int0() interrupt 0 
{   
   	
   a++;
   	if(a%2==0)
	{
	 P10=~P10; 
	}
} 

希望采纳 看不懂 继续追问 在professional仿真成功
其他:你的开和关是一个按键吗? 系统设置如下 p1.0 按键1 p1.1 按键2 p1.2按键3 
p2.0 p2.1 p 2.2 分别接一个继电器和LED
IO口 初始化均为高电平
 

程序
main()
{
 while(1)
{
 if(p1.0==0)
   
if(p1.1==0)
   
if(p1.2==0)
   
}
 #include<reg52.h>
#define uint unsigned int
sbit LED = P1^0;   
sbit KEY1 = P1^2;
void delay(uint);
void main(void)
{   
    LED = 1;    //初始化LED熄灭
    KEY1 = 1;   //赋值KEY1高电平
    while(1)
    {
        if(!KEY1)  //检测到按键按下
            {
              LED = ~LED;         /*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 
进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循
环,LED取反得到LED = 0,灯亮。*/
              delay(500);           /*此处延迟,保证连续两次按键动作处在程序的延时过程中,不进行其他程序从而不会影响小灯。*/
            }
    }

}
void delay(uint z)  //延时函数
{   
    uint x, y;
    for(x=85; x>0; x--)
        for(y=z; y>0; y--);
}

可下载到单片机验证。

上一个:c语言2级要用到哪些程序
下一个:AL-RCJ仿真足球C语言程式 要求写一个三人的团队c语言

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,