/**** 在你的代碼基礎上更改 ****/
#include <reg51.h>
#include <intrins.h>
void delay(unsigned int z)
{
unsigned int a,b;
for (a=0;a<z;a++)
for (b=0;b<120;b++);
}
sbit key1=P1^0;
sbit key2=P1^1;
unsigned int i,n,k,c;
void main()
{
while ()
{
k=0xfe;
c=0xf7;
/*賦初值放前面,你的代碼邏輯中并沒有將其包含在if后面;
如果你想表達按鍵1后給k賦值請加上{};因為有兩句代碼
*/
if (key1==0)
i=1;
if (key2==0)
n=1;
/*i和n應該是想用標志位;一個標志位有01兩種狀態
兩種情況用一個標志位就夠了,兩位可以表示四種狀態*/
/*****你仔細的品******/
/*比如你的代碼中就可以用while(n)和while(!n)*/
if (key==0&&i==1)
delay(10);
if (key==0&&i==1)
/*
你可以用
if(i==1)
{
P0=k;
k= _crol_(k,1)
delay(500);
n=0;
}
*/
{
P0=k;
k= _crol_(k,1)
delay(500);
n=0;
/*標志位用來保存按鍵狀態,這樣就不用一直按著
而n=0;用來清除按鍵二的狀態后面的i=0;同理
*/
//while (!n);
//while (1)后面直接接分號,表示單片機什么也不做,原地等待
//此處你的代碼中多余,你的狀況是流水燈閃一遍后燈全部滅了
//你的代碼本來就處于外面的while(1)的大循環中
/*你仔細品*/
if (key==0&&n==1)
delay(10);
if (key==0&&n==1)
{
P0=c;
c= _cror_(c,1)
delay(500);
i=0;
}
}
}
/*******精簡版標志位法**********/
#include <reg51.h>
#include <intrins.h>
void delay(unsigned int z)
{
unsigned int a,b;
for (a=0;a<z;a++)
for (b=0;b<120;b++);
}
unsigned int i,k,c;
void main()
{
while ()
{
k=0xfe;
c=0xf7;
if (key1==0)
delay(10);
if (key1==0)
i=1;
//i 儲存按鍵的狀態 1 0 表示按鍵1和按鍵2
if (key2==0)
delay(10);
if (key2==0)
i=0;
//判斷i的值等同于判斷按鍵
if(i==0)
{
P0=k;
k= _crol_(k,1)
delay(500);
}
else
{
P0=c;
c= _cror_(c,1)
delay(500);
}
}
}
|