一个简单的共阳极数码管动态显示程序。
Q:当i=16时,按常理说数码管一直显示F,为什么会继续从0到F继续循环?
程序如下:
#include<reg52.h>
#define DUAN P0
#define uchar unsigned char
#define uint unsigned int
uchar code duan_code[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
void delayMs(uint);
void main()
{
uchar i=0;
for(i=0;i<16;i++)
{
DUAN=~duan_code;//共阴取反(接下来应写if(i==16) i=0; 但忽略此if语句也可以达到效果,so why?)
delayMs(500);
}
}
void delayMs(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=113;j>0;j--);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
当i=16时,已不满足for语句,所以在执行完后会退出for语句,也就是说DUAN=0x00
为什么会从头开始循环呢???
我没有用while语句
我是想通过for语句和if语句的嵌套来达到循环的目的。
但目前是无需if语句就可以循环了。。。
我认为for语句最后 i 的结果是16(已不满足条件要求),只是不执行括号内语句直接退出循环。
{
}这个函数前点亮一个LED灯试试,看看代码进入到while(1)函数后他是否会熄灭,答案是不会的,一直会亮着,因为程序代码没有让他关闭啊
一周热门 更多>