void delay(uint);
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0xFE;
for(i=0;i<8;i++)
{
P0=temp;
delay(100);
temp<<=1;
}
这边的delay(100)的时间是多少?怎么算出来的?前面的void delay(unit)是啥意思?
这是一排灯闪过去的程序,已用Proteus仿真过没问题了。
以下是比较完整的程序,帮看下,如何算delay,顺便提供下delay的用法,我还不会用delay。
#include
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P0=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0xFE;
}
}
如果是用汇编的延时程序,比较直接些,C里面有些都是经过调试到合理的为准,好像跟编译软件有关,如果你用keil编译的话,建议用郭天祥的那个常用的延时程序:
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
z取值为1即为1ms,以此类推。你用C的话,记住怎么用就行。
z取值为1ms,为什么?void delay(uint z)这样就等于1?怎么算的?
x=z,x>0;x--,这样的话,x的值为1,减一次就没了?
y=110;y>0;y--,这个y每减一次的时间也是1ms?为什么?
我是初学者,很多都不懂。。。
你是做C的话,没必要对机器周期这么执着,如果实在想弄懂的话,建议把上面的程序跑一下,看看debug里面这个程序占用的时间。
还是上面说的,跟编程软件有关,不是用汇编的话,不好计算。而且上面的delay函数也是个大约,如果用c编程,想精确的话,必须用定时器,定时器就是按机器周期来算的。
主要是我想要得到一个精确的时间,用来做数字时钟。
据说可以用定时器来得到精确的时间,怎么写呢?
这个定时器是属于中断的一种吗?
你上面的是流水灯,数字时钟的话,肯定要用到定时器,就是通过中断来控制时间。你看一下定时器部分,应该很容易搞定。
嗯,这只是其中的一段....