缘由单片机左和右位移函数-嵌入式-CSDN问答
#include "REG52.h"
#include<intrins.h>if(Js==10)//设置定时器50毫秒{if(k){P0=_crol_(P0,1);if(P0==128){k=~k;Js=0;}}if(!k&&Js){P0=_cror_(P0,1);if(P0==1)k=~k;}
// if(!wk1&&!wk2)P0=(k?255:0);
// if(wk1){P0=~(k?3:0);if(++ss>12)ss=wk1=0;}
// if(wk2){P0=~(k?192:0);if(++ss>8)ss=wk2=0;}Js=0;}
求思路 单片机单按键控制8个Led灯亮灭程序,逐1-8灯或者从8-1 - 24小时必答区
sbit k1=P1^0;
void main()
{uchar xd=0;P0=1;while(1){if(k1==0&&++xd==0){P0=_crol_(P0,1);while(k1==0);}//else xd=0;}
}
我博客有众多例子代码,在理解按键代码的基础上随意复制一些代码都可轻松实现,关键是要理解代码。
按键代码逻辑当检测到按键按下后再判断是否过了消抖时间,只要有一个不符合就不会执行按键里面代码,一旦2个条件都成立(按键按下并且达到消抖时间)执行按键里面代码,并且等待按键释放,本例按键按下灯移动1位,且按键释放后才能执行下一次移位。
本按键代码之所以能跳过抖动,妙就妙在2个判断条件安排的顺序上,只有在按键稳定期间且达到一定时间,所以延时不需要很长时间,按键非稳定期间条件就不会成立,这样显得按键灵敏度很好,所以称为经典,不喜欢写多行代码。
sfr P1=0x90;将P1定义为特殊变量(或称寄存器)它是8位字节型变量,从低到高的0-7位与单片机1号端口的8条输入/输出引脚一一对应,可置数也可读数。P0口是0x80.因为一个I/O口是8位。所以应该是0X80~0X87P1 是0x90~97P2是0xa0~a7P3.......reg51.h 里面都有定义,