找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5600|回复: 20
收起左侧

怎么给闪烁灯程序中加个按键开关?

  [复制链接]
ID:106553 发表于 2016-7-9 15:45 | 显示全部楼层 |阅读模式
怎么给闪烁灯程序中加个按键开关?就是按下按键灯按一定的频率和空占闪烁,松开灯灭。

比如在以下程序中怎么样加一个按键当开关。(转9geren 的)

#include <reg52.h>
sbit LED=P2^0;
//延时函数,含有输入参数unsigned int x,无返回值unsigned int是宏定义无符号整型变量,其值的范围是0~65535
void delay(unsigned int x)
{
     while(x--);
}
//主函数
void main(void)
{
    while(1)//无限循环
    {
           LED=0;//P2.0输出低电平,点亮LED灯
           delay(2000);//调用延时函数,更改X值,相当于更改LED灯闪烁的频率
           LED=1;//P2.0输出高电平,熄灭LED灯
           delay(2000);//调用延时函数,更改X值,相当于更改LED灯闪烁的频率
    }
}
回复

使用道具 举报

ID:128771 发表于 2016-7-10 18:16 | 显示全部楼层
这个比较简单 加个if语句就可以了
#include <reg52.h>
sbit LED=P2^0;
sbit key=P2^1;
//延时函数,含有输入参数unsigned int x,无返回值unsigned int是宏定义无符号整型变量,其值的范围是0~65535
void delay(unsigned int x)
{
     while(x--);
}
//主函数
void main(void)
{
    while(1)//无限循环
    {
if key==0{
           LED=0;//P2.0输出低电平,点亮LED灯
           delay(2000);//调用延时函数,更改X值,相当于更改LED灯闪烁的频率
           LED=1;//P2.0输出高电平,熄灭LED灯
           delay(2000);//调用延时函数,更改X值,相当于更改LED灯闪烁的频率
    }
}

}
回复

使用道具 举报

ID:129929 发表于 2016-7-10 18:24 | 显示全部楼层
路过,跟着看看
回复

使用道具 举报

ID:106553 发表于 2016-7-10 21:27 | 显示全部楼层
if key==0{    这句不能通过
回复

使用道具 举报

ID:105206 发表于 2016-7-11 09:02 | 显示全部楼层
#include <reg52.h>
sbit LED=P2^0;
sbit key=P2^1;
//延时函数,含有输入参数unsigned int x,无返回值unsigned int是宏定义无符号整型变量,其值的范围是0~65535
void delay(unsigned int x)
{
     while(x--);
}
//主函数
void main(void)
{
    while(1)//无限循环
    {
if (key==0){
          delay(20);
           while(!key);
           LED=0;//P2.0输出低电平,点亮LED灯
           delay(2000);//调用延时函数,更改X值,相当于更改LED灯闪烁的频率
           LED=1;//P2.0输出高电平,熄灭LED灯
           delay(2000);//调用延时函数,更改X值,相当于更改LED灯闪烁的频率
    }
}

}
回复

使用道具 举报

ID:129965 发表于 2016-7-11 09:25 | 显示全部楼层
好帖,路过看看
回复

使用道具 举报

ID:129979 发表于 2016-7-11 10:31 | 显示全部楼层
路过,跟着看看
回复

使用道具 举报

ID:106553 发表于 2016-7-11 10:52 | 显示全部楼层
jubaolun 发表于 2016-7-11 09:02
#include
sbit LED=P2^0;
sbit key=P2^1;

这个程序也不对,按下按键灯没亮,就松开后闪一下就不亮了。
回复

使用道具 举报

ID:57149 发表于 2016-7-11 14:42 | 显示全部楼层
这个程序 LED 没有闪烁,只是点亮。
回复

使用道具 举报

ID:57149 发表于 2016-7-11 15:16 | 显示全部楼层
楼主给你一个程序供参考,按键按下时灯闪烁,抬起停止。
#include <REG51.H>                    // 1               
#define uchar unsigned char        // 2
#define uint unsigned int        // 3
sbit LED=P1^0;
sbit KEY_S1=P3^2;                        // 4       
//==========================   5
void delay(uint k)                        // 6       
{                                            // 7       
uint i,j;                                    // 8
for(i=0;i<k;i++){                        // 9
for(j=0;j<121;j++)                        // 10
{;}}                                        // 11       
}                                            // 12       
//==========================   13       
void main(void)                            // 14
{                                            // 15       
        delay(100);                            // 16
        while(1)                            // 17
        {                                    // 18       
        if(!KEY_S1)             // 19
    LED=!LED;               // 20
     delay(100);                // 21       
        LED=0xff;                        // 22
        delay(100);                            // 23
        }                                    // 24       
}                                            // 25       
回复

使用道具 举报

ID:106553 发表于 2016-7-11 22:18 | 显示全部楼层
hantp 发表于 2016-7-11 15:16
楼主给你一个程序供参考,按键按下时灯闪烁,抬起停止。
#include                     // 1               
#define uchar unsigned  ...

谢谢!这个程序可行了。
回复

使用道具 举报

ID:84299 发表于 2016-7-14 21:51 | 显示全部楼层
这样改#include <reg52.h>  bit  flag=1;  sbit LED=P2^0;void delay(unsigned int x) {      while(x--); } //主函数 void main(void) {    while(1)//无限循环     {    if(!KEY)  {delay(10);while(!KEY);flag=~flag;}    if(!flag) { LED=0;//P2.0输出低电平,点亮LED灯            delay(2000);//调用延时函数,更改X值,相当于更改LED灯闪烁的频率            LED=1;//P2.0输出高电平,熄灭LED灯            delay(2000);//调用延时函数,更改X值,相当于更改LED灯闪烁的频率   }  else  LED=1;} }
回复

使用道具 举报

ID:84299 发表于 2016-7-14 21:52 | 显示全部楼层
这样改#include <reg52.h>
bit  flag=1;  
sbit LED=P2^0;
void delay(unsigned int x)
{      while(x--); } //主函数
void main(void)
{   
while(1)//无限循环   
{   
if(!KEY)  
{
delay(10);
while(!KEY);
flag=~flag;
}   
if(!flag)
{ LED=0;//P2.0输出低电平,点亮LED灯      
     delay(2000);//调用延时函数,更改X值,相当于更改LED灯闪烁的频率  
          LED=1;//P2.0输出高电平,熄灭LED灯      
      delay(2000);//调用延时函数,更改X值,相当于更改LED灯闪烁的频率  
}  
else  LED=1;
} }
回复

使用道具 举报

ID:84299 发表于 2016-7-14 21:56 | 显示全部楼层
他们改的都要手一直按着按键不放,不叫开关控制,你再外加个按键吧,定义一个脚如sbit  KEY=P2^1;
上面我忘了定义,你自己加上去。
回复

使用道具 举报

ID:122633 发表于 2016-7-14 22:17 | 显示全部楼层
加个按键扫描程序 需要什么功能在程序里编就行了
回复

使用道具 举报

ID:45330 发表于 2016-7-15 10:10 | 显示全部楼层

路过,跟着看看
回复

使用道具 举报

ID:129825 发表于 2016-7-26 16:23 | 显示全部楼层
给程序加个中断
回复

使用道具 举报

ID:254251 发表于 2018-5-27 23:52 | 显示全部楼层
感谢开源程序,非常精彩,留着以后用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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