void Delay10ms(unsigned int c)
{
unsigned char a,b;
for(c;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
我在HC6800-ES-V2.0板子上通过试验,结果是:
按下k1键,LED灯左移,不松手,一直左移。
按下k2键,没有任何反应。
按下k1键,LED灯左移,不松手就一直左移;再按下k2键(此时k1、k2键是同时按下的),LED灯右移,都不松手,灯一直右移;松开k2,LED灯恢复左移,不松手一直左移;松开k1,LED灯不再移动。作者: hujj 时间: 2020-4-9 10:30
while循环内前两个if语句应该加上大括号,if语句后面没有大括号时,只是紧接的一条语句有效,不是你写在一行内就行的。作者: game灬boy 时间: 2020-4-9 12:01
/**** 在你的代码基础上更改 ****/
#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)
/*******精简版标志位法**********/
#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;