找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机红外发射问题

[复制链接]
跳转到指定楼层
楼主
ID:290576 发表于 2018-8-1 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助大神 小弟感激不尽
把数组改成Int型 程序就出错  数据发射不完改了以后的数组 int timedata[32]={580,535,535,535,535,535,535,535,535,580,580,580,580,580,580,180,35,35,80,80,35,35,35,35,80,80,35,35,80,80,80,80, };


单片机源程序
#include<reg52.h>
sbit button=P2^0;
sbit ir=P1^0;
unsigned int irtime;
char b,y;
char timedata[32]={80,35,35,35,35,35,35,35,35,80,80,80,80,80,80,80,35,35,80,80,35,35,35,35,80,80,35,35,80,80,80,80, };
void timer0()interrupt 1   //定时器中断
{
        irtime++;
        if(b==1)
        {
         ir=~ir; //取反  如果是1就变成0
        }
}
void main()
{
int x;
        ET0=1; //允许定时器0的中断
        EA=1;  //打开总中断
        TMOD=0X02;//定时器0工作方式2 自动重装定时器
        TH0=0Xe6; //装初值25.8us
        TL0=0Xe6; //装初值25.8us
        TR0=0;          //开启定时器T0
        ir=0;
        x=0;
   if(y==0)
   {
                TR0=1;
                b=1;
                irtime=0;
                while(irtime<320);//320
                b=0;
                ir=0;
                while(irtime<500);// 484
                for(x=0;x<33;x++)
                {
                        irtime=0;
                        b=1;
                        while(irtime<21);//18
                        b=0;
                        ir=0;
                        while(irtime<timedata[x]);
                        if(x>33)
                        break;        //跳出循环
                }
                TR0=0;
                y=1;
        }                 
}

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

使用道具 举报

沙发
ID:310519 发表于 2018-8-1 23:29 | 只看该作者
没有看到有使用数组里面的数据。
回复

使用道具 举报

板凳
ID:381277 发表于 2018-8-2 07:55 来自手机 | 只看该作者
irtime没有定义
回复

使用道具 举报

地板
ID:381956 发表于 2018-8-2 09:02 | 只看该作者
数组前面加个const
回复

使用道具 举报

5#
ID:382001 发表于 2018-8-2 09:47 | 只看该作者
数组前面加个const就不会出现这个问题了
回复

使用道具 举报

6#
ID:290576 发表于 2018-8-2 12:45 | 只看该作者
LJ_Austin 发表于 2018-8-2 09:02
数组前面加个const

改成这样又不行了

#include<reg52.h>
sbit button=P2^0;
sbit ir=P1^0;
unsigned int irtime;
char b,y;
const int timedata[49]={580,535,535,535,535,535,535,535,535,580,580,580,580,580,580,180,535,535,580,580,535,535,535,535,580,580,535,535,580,580,580,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550 };



void timer0()interrupt 1   //定时器中断
{
        irtime++;
        if(b==1)
        {
         ir=~ir; //取反  如果是1就变成0
        }
}
void main()
{
int x;
        ET0=1; //允许定时器0的中断
        EA=1;  //打开总中断
        TMOD=0X02;//定时器0工作方式2 自动重装定时器
        TH0=0Xe6; //装初值25.8us
        TL0=0Xe6; //装初值25.8us
        TR0=0;          //开启定时器T0
        ir=0;
        x=0;
   if(y==0)
   {
                TR0=1;
                b=1;
                irtime=0;
                while(irtime<320);//320
                b=0;
                ir=0;
                while(irtime<500);// 484
                for(x=0;x<49;x++)
                {
                        irtime=0;
                        b=1;
                        while(irtime<21);//18
                        b=0;
                        ir=0;
                        while(irtime<timedata[x]);
                        if(x>49)
                        break;        //跳出循环
                }
                TR0=0;
                y=1;
        }                 
}
回复

使用道具 举报

7#
ID:290576 发表于 2018-8-2 12:46 | 只看该作者
本帖最后由 wuyuwangluo 于 2018-8-2 21:51 编辑
dianziluntan_sw 发表于 2018-8-2 09:47
数组前面加个const就不会出现这个问题了

改了 可以 把数值加大又不行了  还有其他办法吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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