标题: 期待你们的答复 [打印本页]

作者: liumin    时间: 2013-5-22 19:12
标题: 期待你们的答复
#include<reg52.h>
sbit D1=P0^0;
void main()
{
     for(i=2;i>0;i--)
    {
       d1=0;
      delay(500);
      d1=1;
      delay(500);
     }
}
下面是一个延时函数,
然后为什么,这个发光二极管没有闪两下就不亮了呢??
就是因为单片机是写什么执行什么,然后如果不给它写挺值得程序是不会停的吗?
还有怎么实现上两次以后再也不亮了呢,除了用中断??
希望能尽快收到大家的答复,谢谢!

作者: admin    时间: 2013-5-23 00:58
如果按这样写 的话 他就可以一直执行不停止了
#include<reg52.h>
sbit D1=P0^0;
void main()
{
     while(1)
    {
       d1=0;
      delay(500);
      d1=1;
      delay(500);
     }
}
作者: liumin    时间: 2013-5-24 00:01
你没明白我的意思,我是想闪两下就不闪了,但那个for循环好像不起作用啊。。
作者: happysunshine    时间: 2013-6-20 02:24
可以在for循环体整体之后加一个  while(1);
作者: zjjhtony    时间: 2013-6-20 16:40
#include<reg52.h>
sbit D1=P0^0;
void main()
{
     for(i=2;i>0;i--)
    {
       d1=0;
      delay(500);
      d1=1;
      delay(500);
     }
}

程序中的错误:
1、sbit D1=P0^0;和d1=0;要求大小写一致。即全部都用D1或全都用d1。
2、delay(500);程序中缺少子程序。
3、程序是需要一直循环执行的,或是在等待外部变化(引脚电平变化,外部中断等),或是内部定时等等。
如下完整程序:
#include<reg52.h>
unsigned  char   i;
sbit d1=P1^0;
void delay(unsigned int ms)//延时1毫秒(不够精确的)
{
unsigned int i,j;
    for(i=0;i<ms;i++)
     for(j=0;j<100;j++);
}
void main()
{
     for(i=2;i>0;i--)
    {
       d1=0;
      delay(500);
      d1=1;
      delay(500);
     }
  while(1);   //D1变化两次后一直空闲,死循环。
}

但是仿真中和实际电路中要看,delay(500);的延时时间到底是多少,太少的话仿真程序或人在实验板上不能看到。


作者: 听,美妙的旋律    时间: 2013-7-9 20:42
我想问下:你编译正确么??
作者: 一如平常。    时间: 2013-7-15 20:34
难道 你在编译的时候  编译软件不报错 而且还能生成HEX文件  并下载到单片机里!!!!这简直是 不可思议!!!
关于你是否定义了变量 i ;首先如果你的延时子程序 延时时间太短 人的眼睛是  根本无法分辨的  所以就像没有亮一样!实际上 是亮了  只是时间太短!!!
作者: liumin    时间: 2013-8-6 17:55
听,美妙的旋律 发表于 2013-7-9 20:42
我想问下:你编译正确么??

不好意思,我只写了主要部分,延时子函数没写,d1也是不小心写错了,在程序里我写的是D1
作者: liumin    时间: 2013-8-6 18:03
admin 发表于 2013-5-23 00:58
如果按这样写 的话 他就可以一直执行不停止了
#include
sbit D1=P0^0;

谢谢!
作者: liumin    时间: 2013-8-6 18:05
zjjhtony 发表于 2013-6-20 16:40
#include
sbit D1=P0^0;
void main()

是正解啊,太感谢了(现在回过头来再看就知道了,当时怎么也没想起来),太感谢了!!!
作者: liuzhaoxin1020    时间: 2016-12-31 11:00
感谢分享经验




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1