找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5052|回复: 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灯闪烁的频率
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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{    这句不能通过
回复

使用道具 举报

5#
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灯闪烁的频率
    }
}

}
回复

使用道具 举报

6#
ID:129965 发表于 2016-7-11 09:25 | 只看该作者
好帖,路过看看
回复

使用道具 举报

7#
ID:129979 发表于 2016-7-11 10:31 | 只看该作者
路过,跟着看看
回复

使用道具 举报

8#
ID:106553 发表于 2016-7-11 10:52 | 只看该作者
jubaolun 发表于 2016-7-11 09:02
#include
sbit LED=P2^0;
sbit key=P2^1;

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

使用道具 举报

9#
ID:57149 发表于 2016-7-11 14:42 | 只看该作者
这个程序 LED 没有闪烁,只是点亮。
回复

使用道具 举报

10#
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       
回复

使用道具 举报

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

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

使用道具 举报

12#
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;} }
回复

使用道具 举报

13#
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;
} }
回复

使用道具 举报

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

使用道具 举报

15#
ID:122633 发表于 2016-7-14 22:17 | 只看该作者
加个按键扫描程序 需要什么功能在程序里编就行了
回复

使用道具 举报

16#
ID:45330 发表于 2016-7-15 10:10 | 只看该作者

路过,跟着看看
回复

使用道具 举报

17#
ID:129825 发表于 2016-7-26 16:23 | 只看该作者
给程序加个中断
回复

使用道具 举报

18#
ID:254251 发表于 2018-5-27 23:52 | 只看该作者
感谢开源程序,非常精彩,留着以后用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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