一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
楼主: 261307853

请帮忙看一下程序问题(已解决)

[复制链接]
发表于 2013-10-31 20:46 | 显示全部楼层
贴上源程序,最后一个函数屏蔽了,编译是正常的。

#include "STC15F104E.H"
#define CPU_Fosc 12//12M晶振
#define M   1//定时器1T时钟
#define Tc 250 //250us采样
#define Th (65536-CPU_Fosc*Tc/M)/256
#define Tl (65536-CPU_Fosc*Tc/M)%256
#define uchar unsigned char
#define uint  unsigned int
#define ulong  unsigned long

#define ma1 0xbf01 //用户码/按键码

sbit K0=P3^0;
sbit K1=P3^1;
sbit K2=P3^2;
sbit K3=P3^3;
sbit K4=P3^4;
sbit IR=P3^5; //定义红外接收输入端口
bit  IR_ok,state;
ulong longcode;
uint OKCode;
uint Tick,step;
uchar  Count;
bit   IRsync;
bit   IRb,IRa,IR_ok;
void Delay(uint t);
uchar reverse8( uchar c );
void InitTimer();
void main()
{
    P3=0xff;
    InitTimer();
    while(1)
    {
        if(IR_ok)
        {
            if(OKCode==0xbf01) //用户码/按键码
            {
                state=!state;
                K0=K1=0;
                Delay(30000);
                K0=K1=1;
                if(state)
                {
                    K3=K4=K2=0;
                }
                else
                {
                    K3=K4=K2=1;
                }
            }
            IR_ok=0;
        }
    }
}
void InitTimer()
{
    AUXR=0xc0;
    TMOD = 0x00;
    TH0=Th;
    TL0=Tl;
    EA=ET0=TR0=1;
}
void timer0() interrupt 1
{
    if(IR_ok)
    {
        return;
    }
    IRb = IRa;     //上次电位状态
    IRa = IR;     //当前电位状态
    ++step;
    if(IRb && !IRa)         //是否下降沿(上次高,当前低)
    {
        Tick = step;
        step=0;
        if(Tick>(14000/Tc))
        {
            IRsync=0;
        }
        else if(IRsync)
        {
            if(Tick>(3000/Tc))
            {
                IRsync=0;
            }
            else
            {
                longcode<<=1;
                if(Tick>(1500/Tc))
                {
                    longcode|=1;
                }
                if (--Count==0)
                {
                    uchar x,y;
                    x= longcode;
                    y= longcode>>8;
                    if(x=~y)
                    {
                        OKCode =longcode>>8;
                        OKCode=reverse8(OKCode/256)*256|reverse8(OKCode);
                        IRsync=0;
                        IR_ok=1;
                    }
                }
            }
        }
        else if(Tick>(13500/Tc-2)&&Tick<(13500/Tc+2))
        {
            IRsync=1;
            Count=32;
        }
    }
}
uchar reverse8( uchar c )
{
    c = ( c & 0x55 ) << 1 | ( c & 0xAA )>> 1;
    c = ( c & 0x33 ) << 2 | ( c & 0xCC )>> 2;
    c = ( c & 0x0F ) << 4 | ( c & 0xF0 )>> 4;
    return c;
}
void Delay(uint t)
{
    uchar a,b;
    for(; t>0; t--)
        for(b=222; b>0; b--)
            for(a=12; a>0; a--)
            {
                ;
            }
}


/*uchar reverse8( uchar c )
{
    c = ( c & 0x55 ) << 1 | ( c & 0xAA )>> 1;
    c = ( c & 0x33 ) << 2 | ( c & 0xCC )>> 2;
    c = ( c & 0x0F ) << 4 | ( c & 0xF0 )>> 4;
    return c;
}*/
回复

使用道具 举报

发表于 2013-10-31 21:05 | 显示全部楼层
本帖最后由 hysy 于 2013-10-31 21:09 编辑

正蛋疼,瞅瞅。
TEXT1.C(141): error C237: '_reverse8': function already has a body
reverse8()函数重定义了嘛!只能讲这么清楚了...
回复

使用道具 举报

发表于 2013-10-31 21:19 | 显示全部楼层
单键定值遥控开关,呵呵,还没有自学习功能,纯DEMO版。
回复

使用道具 举报

 楼主| 发表于 2013-10-31 22:05 来自手机 | 显示全部楼层
igiucom 发表于 2013-10-31 20:41
最后一个函数与上面的函数重复了吧?删去最后一个函数就正常了。

正解。。。。。
回复

使用道具 举报

 楼主| 发表于 2013-10-31 22:06 来自手机 | 显示全部楼层
igiucom 发表于 2013-10-31 20:46
贴上源程序,最后一个函数屏蔽了,编译是正常的。

#include "STC15F104E.H"

多谢,木有文化真的害死人。。
回复

使用道具 举报

 楼主| 发表于 2013-10-31 22:07 来自手机 | 显示全部楼层
hysy 发表于 2013-10-31 21:05
正蛋疼,瞅瞅。
TEXT1.C(141): error C237: '_reverse8': function already has a body
reverse8( ...

学习了。。。。。。。
回复

使用道具 举报

 楼主| 发表于 2013-10-31 22:09 来自手机 | 显示全部楼层
hysy 发表于 2013-10-31 21:19
单键定值遥控开关,呵呵,还没有自学习功能,纯DEMO版。

是的。
帮我改个带学习版的,可否???

点评

要自学习功能,需要另加的代码:EEPRoM_WR();Time_CPM();key();LED();硬件需加一键一灯。  发表于 2013-10-31 22:32
回复

使用道具 举报

发表于 2013-10-31 22:13 | 显示全部楼层
261307853 发表于 2013-10-31 22:06
多谢,木有文化真的害死人。。

呵呵 不会去g.cn翻译啊。是最后一行定义函数重复。
回复

使用道具 举报

 楼主| 发表于 2013-11-1 09:12 来自手机 | 显示全部楼层
lexmi 发表于 2013-10-31 22:13
呵呵 不会去g.cn翻译啊。是最后一行定义函数重复。

忘了这茬了,以往用电脑,会习惯性的翻译一下,现在没有网,手机上不方便了。
回复

使用道具 举报

 楼主| 发表于 2013-11-2 11:36 | 显示全部楼层
hysy 发表于 2013-10-31 21:19
单键定值遥控开关,呵呵,还没有自学习功能,纯DEMO版。

能抽空帮我改一下吗?硬件改动很方便的……。
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-21 03:49 , Processed in 0.041833 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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