51单片机按键灯实验

本文介绍了一个51单片机的按键灯实验,目标是首次按键时灯快速闪烁3次,再次按键时灯缓慢闪烁3次。通过使用flag变量来区分按键状态,初始化flag为1,利用flag=-flag实现状态切换。然而,使用flag=~flag导致实验结果出现问题:灯在第一次按键后直接慢闪3次,后续按键无响应或错误。作者寻求问题的解决方法。
摘要由CSDN通过智能技术生成

**

51单片机按键灯实验

**
要完成的效果是第一次按键灯快闪3次,第二次按键灯慢闪3次
定义了flag变量来标志第一二次按键,这里先给flag赋值1,用flag=-flag来表示一二次按键的变化
结果可行。然而用flag=~flag却实现不了,按一次直接慢闪3次,按第二下没有反应,再按一下又慢闪,求解

#include<reg51.h> 
#define uchar unsigned char 
#define uint unsigned int 
sbit in=P3^0; 
sbit out=P1^0; 
void delayms(uint j)
{	
	uint i;
	for(;j>0;j--)
		{
			i=250;
			while(--i){}
			i=249;
			while(--i){}
		}
}

void main(void) {
  	   uint k=0;
       uint flag=1;
       in=1; 
       out=1;
	   while(1) {
       if(in==0){ //按键按下
	        uint k=0;
          flag=-flag;
          if(flag==-1){
             for(;k<3;k++){
                   out=0;
                   delayms(100);
                   out=1;
				    delayms(100);}
                   }else{
                     for(k;k<3;k++){
                   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值