独立按键控制一个led灯的亮灭
直接可以控制指定位的变化
#include <>
void main(){//实现独立按键控制一个led灯的亮灭
while(1){
//按下时亮松开时灭
if(P3_1==0){
P2_0=0;
}else{
P2_0=1;
}
}
}
独立按键控制灯的循环亮灭(单向循环)
这里实现灯的亮灭是使用在我之前的文章中《单片机:流水灯》提到的实现灯亮灭的方法。
文章链接:/mlXy2
识别到k1键被按下,或者k2键被按下,因为机器再按的时候程序一直执行,程序的执行是相当快的,这样就多次识别到k1(k2)键被按下,这样就多个灯的状态被改变,我们本意想按下一次只识别一次,采用延时可以实现,当按下键后,延时500ms在这500ms内就只识别了1次,只改变一个灯的状态,(缺点:因为延时是固定的,所以在延时时间内无论你按下多少次按键都不会识别)
#include <>
#include <>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main(){
int x=1,count=0xff;
P2=count - x;//初始话灯
Delay500ms();
while(1){
if(P3_1==0){//识别按键是否按下,按下则改变灯的状态
x*=2;
if(P2==0x7f){
x=1;
}
P2=count-x;
Delay500ms();//延时
}
}
}
独立按键控制led灯的循环亮灭(双向循环)
是在单向循环控制的基础上增加了一个反向循环
#include <>
#include <>
void Delay500ms()//延时 //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main(){
int x=1,count=0xff;
P2=count - x;//一开始亮一个灯
Delay500ms();//通过延时来实现按键循环
while(1){
if(P3_1==0){//检测到k1按键被按下,下一个灯亮,此灯灭(正向)
x*=2;
if(P2==0x7f){//到达最后一个灯后,需要重置成第一个灯
x=1;
}
P2=count-x;
Delay500ms();
}
if(P3_0==0){//反向
x/=2;
if(x==0){//到达第一个灯后,需要重置为最后一个灯
x=2*2*2*2*2*2*2;
}
P2=count-x;
Delay500ms();
}
}
}
独立按键控制led灯实现二进制
使P2接口的值按照顺序递减即可实现,同样是使用延时来防止按键的多次识别。
#include <>
#include <>
void Delay100ms() //@12.000MHz
{
unsigned char i, j;
i = 195;
j = 138;
do
{
while (--j);
} while (--i);
}
void main(){
P2=0XFF;//全灭
while(1){
if(P3_1==0){//识别一次
P2--;
Delay100ms();//一定时间只识别一次
if(P2==0){
P2=0xff;
}
}
}
}