#include <reg51.h>
#include <intrins.h>
#define NOP() _nop_() /* 定义空指令 */
void delay(unsigned int i); //函数声明
// 此表为LED字模
unsigned char code LED7Code[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
/* { ~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80}*/
main()
{
unsigned int LedNumVal=1 ,C ; //定义变量
while(1)
{
if (++C>= 300)
{ LedNumVal++ ; //每隔300个扫描周期加1
C =0; //每隔300个扫描周期清0
}
// 将字模送到P0口
P0 = LED7Code[LedNumVal%10]; //LED7
delay(150); //调用延时函数
}
}
/*****************************************************************
* *
* 延时函数 *
* *
*****************************************************************/
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
以上程序为89C51 8位数码管显示程序,延时看不懂。delay(150),这个150啥意思,与下面的相乘还是搞啥?下面的 for 语句,第一个,i没初始化,定义无符号的i,想不通,i--为啥值?下面的for,后面有分号,初始化j=200,条件判断j已经大于0,应该不循环,百思不得其解。。。。百度无果。自己转程序,打delay 的值,2个都为4199866,改delay(150)里面的值,明显数码管刷新变快,但打印值还是4199866。
第一个,i没初始化,定义无符号的i,想不通 其实是已经初始化了,就是函数传入的参数 150
下面的for,后面有分号,初始化j=200,条件判断j已经大于0,应该不循环,百思不得其解。。。。 的解答是:
分号就是运行一句空语句
因为后面还有j--所以当j减到0的时候再下一次循环就不满足条件了,那时才停止循环
最好delay函数的作用就是单词的含义,延迟的作用让单片机执行领个嵌套的for循环。因为每一个语句的执行都需要时间,这样就达到延时的效果
|