找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3839|回复: 11
打印 上一主题 下一主题
收起左侧

期待你们的答复

[复制链接]
跳转到指定楼层
楼主
ID:50469 发表于 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);
     }
}
下面是一个延时函数,
然后为什么,这个发光二极管没有闪两下就不亮了呢??
就是因为单片机是写什么执行什么,然后如果不给它写挺值得程序是不会停的吗?
还有怎么实现上两次以后再也不亮了呢,除了用中断??
希望能尽快收到大家的答复,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2013-5-23 00:58 | 只看该作者
如果按这样写 的话 他就可以一直执行不停止了
#include<reg52.h>
sbit D1=P0^0;
void main()
{
     while(1)
    {
       d1=0;
      delay(500);
      d1=1;
      delay(500);
     }
}
回复

使用道具 举报

板凳
ID:50469 发表于 2013-5-24 00:01 | 只看该作者
你没明白我的意思,我是想闪两下就不闪了,但那个for循环好像不起作用啊。。
回复

使用道具 举报

地板
ID:51036 发表于 2013-6-20 02:24 来自手机 | 只看该作者
可以在for循环体整体之后加一个  while(1);
回复

使用道具 举报

5#
ID:18297 发表于 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);的延时时间到底是多少,太少的话仿真程序或人在实验板上不能看到。

回复

使用道具 举报

6#
ID:51564 发表于 2013-7-9 20:42 | 只看该作者
我想问下:你编译正确么??
回复

使用道具 举报

7#
ID:51883 发表于 2013-7-15 20:34 | 只看该作者
难道 你在编译的时候  编译软件不报错 而且还能生成HEX文件  并下载到单片机里!!!!这简直是 不可思议!!!
关于你是否定义了变量 i ;首先如果你的延时子程序 延时时间太短 人的眼睛是  根本无法分辨的  所以就像没有亮一样!实际上 是亮了  只是时间太短!!!
回复

使用道具 举报

8#
ID:50469 发表于 2013-8-6 17:55 | 只看该作者
听,美妙的旋律 发表于 2013-7-9 20:42
我想问下:你编译正确么??

不好意思,我只写了主要部分,延时子函数没写,d1也是不小心写错了,在程序里我写的是D1
回复

使用道具 举报

9#
ID:50469 发表于 2013-8-6 18:03 | 只看该作者
admin 发表于 2013-5-23 00:58
如果按这样写 的话 他就可以一直执行不停止了
#include
sbit D1=P0^0;

谢谢!
回复

使用道具 举报

10#
ID:50469 发表于 2013-8-6 18:05 | 只看该作者
zjjhtony 发表于 2013-6-20 16:40
#include
sbit D1=P0^0;
void main()

是正解啊,太感谢了(现在回过头来再看就知道了,当时怎么也没想起来),太感谢了!!!
回复

使用道具 举报

11#
ID:153199 发表于 2016-12-31 11:00 | 只看该作者
感谢分享经验
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表