keil4,利用子函数从if(K1==0),简化程序,减少程序的冗长。
#include "reg52.h"
sbit K1 = P3^1;
sbit K2 = P3^0;
unsigned char i, j, y;
void delay(unsigned int i)
{
while(i--);
}
unsigned code a[] = {0x00, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
unsigned code b[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void displayNum(unsigned char i, unsigned char j)
{
P2 = 0x14;
P0 = a[i];
delay(1000);
P2 = 0x10;
P0 = b[j];
delay(1000);
}
void displayBlank()
{
P2 = 0x14;
P0 = 0x6f;
delay(1000);
P2 = 0x10;
P0 = 0x6f;
delay(1000);
}
void main()
{
while(1)
{
P2 = 0x10;
P0 = 0x3f;
K1 = 1;
if(K1 == 0)
{
delay(1000);
if(K1 == 0)
{
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
for(y = 0; y < 10; y++)
{
displayNum(i, j);
}
}
}
}
}
displayBlank();
K2 = 1;
if(K2 == 0)
{
delay(1000);
if(K2 == 0)
{
for(i = 0; i < 10; i++)
{
for(j = 9; j < 10; j--)
{
for(y = 0; y < 10; y++)
{
displayNum(i, j);
}
}
}
}
}
displayBlank();
}
}
#include "reg52.h"
sbit K1 = P3^1;
sbit K2 = P3^0;
void delay(unsigned int i)
{
while(i--);
}
unsigned code a[] = {0x00, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
unsigned code b[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void displayNum(unsigned char i, unsigned char j)
{
P2 = 0x14;
P0 = a[i];
delay(1000);
P2 = 0x10;
P0 = b[j];
delay(1000);
}
void displayBlank()
{
P2 = 0x14;
P0 = 0x6f;
delay(1000);
P2 = 0x10;
P0 = 0x6f;
delay(1000);
}
void buttonPressed(unsigned char count, unsigned char reverse)
{
unsigned char i, j, y;
unsigned char end = (reverse) ? 255 : 10;
unsigned char step = (reverse) ? -1 : 1;
for(i = 0; i < count; i++)
{
for(j = 0; j != end; j += step)
{
displayNum(i, j);
}
}
}
void main()
{
while(1)
{
P2 = 0x10;
P0 = 0x3f;
K1 = 1;
if(K1 == 0)
{
delay(1000);
if(K1 == 0)
{
buttonPressed(10, 0);
}
}
displayBlank();
P2 = 0x10;
P0 = 0x3f;
K2 = 1;
if(K2 == 0)
{
delay(1000);
if(K2 == 0)
{
buttonPressed(10, 1);
}
}
displayBlank();
}
}
在这个优化的代码示例中,我进一步简化了循环的逻辑。通过使用一个起始值和步进值,可以根据需要决定循环是正向还是反向的,并避免了内部的嵌套循环。
我还将反向循环的结束条件设置为255,以确保在循环中使用j != end的条件,这样可以在循环时进行自增或自减,并且不需要使用额外的变量来控制循环次数。
这个优化可以提高代码的简洁性和可读性,并减少了不必要的循环嵌套。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
当我们在编写程序时,可能会遇到某段代码需要被多处调用的情况。这时候,我们可以将这段代码封装成一个子函数,在需要调用的地方直接调用子函数即可。
下面是一个示例程序,该程序的作用是检测按键K1是否按下:
#include<reg51.h>
sbit K1 = P1^0; //按键K1连接在P1.0端口
void check_K1(void) //检测按键K1是否按下
{
if(K1 == 0) //按键K1被按下
{
//执行按键被按下后的操作
}
}
void main()
{
while(1)
{
check_K1(); //调用check_K1()函数
}
}
在上面的示例程序中,我们使用了一个名为check_K1()的子函数来检测按键K1是否按下。这个子函数只是一个简单的if语句,当按键K1被按下时,会执行相应的操作。在主函数main()中,我们使用while(1)循环调用check_K1()函数,每次循环都会检测按键K1是否按下。
使用子函数的好处是,我们可以将代码分成不同的模块,使程序结构更加清晰,易于组织和调试。此外,在代码重构时,我们可以直接修改子函数,而不需要对整个程序进行大规模的修改,减少了出错的可能性。
在keil4中,编写上述代码,应该是这样的:
上述代码定义了一个名为check_K1()的子函数,用于检测按键K1是否按下。主函数中使用while循环调用check_K1()函数,以持续检测按键状态。
如果我的回答解决了您的问题,请采纳!