找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助看有啥问题,为啥LED灯不亮呢

[复制链接]
跳转到指定楼层
楼主
ID:87087 发表于 2015-7-28 16:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include <intrins.h>
#define        uint unsigned int
#define uchar unsigned char
/*********************************延时函数***********************************/
void delay(uint i)                                                 //延时子程序。
        {
        while(i--);                                            //延时。
        }
/*********************************主函数***********************************/
void mian()
{
   uint i=27778;                                                //延时时间0.5s
   uchar a;
   unsigned temp = 0xFE;                                        //定义1个常数0xfe
   P1 = temp;                                                        //将P1第1个灯点亮
   while(1)                                                                //循环
   {                                                                       
                for (a=0;a<8;a++)                                //控制灯从右往左循环
                {
                        temp = _crol_(temp,1);                //从右往左移1位
                        P1 = temp;                                //赋值到P1点亮二极管
                        delay(i);                                        //延时函数调用
                }         
   }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:87087 发表于 2015-7-28 16:22 | 只看该作者
这个倒是亮了,但是为啥延时函数不对呢,delay(i)中i传递过来后不是不影响 i 的实际值么,delay()调用完成后i不是直接释放了 值不变么?为啥我这里直接第一个灯延时后面的就不延时了呢
回复

使用道具 举报

板凳
ID:84652 发表于 2015-7-28 17:56 | 只看该作者
本帖最后由 王朗的诱惑 于 2015-7-28 18:19 编辑

拿去仿真了一下,发现确实很奇怪,delay结束后i会变成0x2500,十进制是9472,然后每次传入就都是0x2500了,表示看不懂汇编……不过在main函数里定义i的时候加个code或者xdata关键字就好了,不把i放到内存里。真的很奇怪……?????????………………………………
回复

使用道具 举报

地板
ID:67175 发表于 2015-7-28 20:45 | 只看该作者
#include <reg52.h>
#include <intrins.h>
#define        uint unsigned int
#define uchar unsigned char
/*********************************延时函数***********************************/
void delay(uint i)                                                 //延时子程序。
        {
        while(i--);                                            //延时。
        }
/*********************************主函数***********************************/
void mian()
{
   uint i=27778;                                                //延时时间0.5s
   uchar a,temp;
   temp = 0xFE;                                        //定义1个常数0xfe
    P1 = temp;  
   while(1)                                                                //循环
   {                                                                        
                for (a=0;a<8;a++)                                //控制灯从右往左循环
                {
                       temp = _crol_(temp,1);  
                                           delay(i);              
                        P1 = temp;  
                                                                  
                        delay(i);                                      
                }         
   }
}



这样试一下看看吧
回复

使用道具 举报

5#
ID:87087 发表于 2015-7-29 09:20 | 只看该作者
王朗的诱惑 发表于 2015-7-28 17:56
拿去仿真了一下,发现确实很奇怪,delay结束后i会变成0x2500,十进制是9472,然后每次传入就都是0x2500了, ...

嗯。加了code确实就好了,放到程序存储器中就不能动了,好像原来看汇编的时候看到过,谢谢啦。好像和C语言学习的时候是有点不一样。
回复

使用道具 举报

6#
ID:87087 发表于 2015-7-29 09:28 | 只看该作者
李志博32 发表于 2015-7-28 20:45
#include
#include
#define        uint unsigned int

试了一下果然好了 能告诉下为啥么。看您只改了temp的定义以及后面增加了个延时而已啊
回复

使用道具 举报

7#
ID:87087 发表于 2015-7-29 09:28 | 只看该作者
王朗的诱惑 发表于 2015-7-28 17:56
拿去仿真了一下,发现确实很奇怪,delay结束后i会变成0x2500,十进制是9472,然后每次传入就都是0x2500了, ...

按您的i定义时加了code果然好了,谢谢
回复

使用道具 举报

8#
ID:67175 发表于 2015-7-31 07:48 | 只看该作者
rainy1008 发表于 2015-7-29 09:28
试了一下果然好了 能告诉下为啥么。看您只改了temp的定义以及后面增加了个延时而已啊

主要是延时的问题    你原来的语句 单片机反应不过来哈
回复

使用道具 举报

9#
ID:86938 发表于 2015-8-6 16:00 | 只看该作者
加个code或者xdata关键字就好了,不把i放到内存里
回复

使用道具 举报

10#
ID:86700 发表于 2015-8-7 09:53 | 只看该作者
加一个code或者xdata关键字
回复

使用道具 举报

11#
ID:73872 发表于 2015-8-7 10:02 | 只看该作者
unsigned temp = 0xFE;这句OXFE不是用小写oxfe的吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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