普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 4181|回复: 3

怎么用按键控制K1按键呼吸灯的开启与关闭

[复制链接]

1

主题

2

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2020-4-24 09:40:34 | 显示全部楼层 |阅读模式
1金钱
#include "reg52.h"                         
typedef unsigned int u16;         
typedef unsigned char u8;


sbit PWM=P2^1;
sbit k1=P3^1;
bit DIR;


u16 count,value,timer1;

void delay(u16 i)
{
        while(i--);
}


void Timer1Init()
{
        TMOD|=0X10;

        TH1 = 0xFF;
        TL1 = 0xff;   
               
        ET1=1;
        EA=1;
        TR1=1;
void main()
{       
        Timer1Init();  
        while(1)
        {
    if(k1==0)
                {
                        delay(5);
                        if(k1==0)
                        {
                                PWM=1;
                        }
                        while(!k1);
                }
                if(count>100)                                                       
                {  
                        count=0;
                        if(DIR==1)                                          
                        {
                          value++;
                        }                       
                        if(DIR==0)
                        {
                          value--;
                        }
                }

                if(value==1000)
                {
                  DIR=0;
                }
                if(value==0)
                {
                  DIR=1;
                }       
                               
                if(timer1>1000)  
                {
                        timer1=0;
                }
                if(timer1 <value)       
                {
                        PWM=1;
                }
                else
                {
                        PWM=0;
                }               
        }               
}



void Time1(void) interrupt 3   
        TH1 = 0xFF;
        TL1 = 0xff;   //1us
        timer1++;
    count++;
       
}
我目前程序只要按键K1一直按着呼吸灯就会灭,松开按键呼吸灯就开启了。我要的效果是按键K1按一下呼吸灯灭。再按一下呼吸灯开


我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有3人回答

回复

使用道具 举报

0

主题

4

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2020-4-24 17:05:33 | 显示全部楼层
编写一个按键服务函数,里面翻转状态值。PWM函数里面扫描这个状态值,为0的话继续,不为零就跳过。
回复

使用道具 举报

1

主题

2

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2020-4-27 10:44:18 | 显示全部楼层
5thSeason 发表于 2020-4-24 17:05
编写一个按键服务函数,里面翻转状态值。PWM函数里面扫描这个状态值,为0的话继续,不为零就跳过。

已经解决了。按键按下时我直接关闭定时器。循环时定时器反转
回复

使用道具 举报

0

主题

33

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2020-5-21 17:40:13 | 显示全部楼层
用外部中断,兄弟
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-26 00:51 , Processed in 0.094049 second(s), 32 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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