s3f9454可c语言编程,S3F9454做的一个简单遥控开关的IAR C语言源代码.doc

S3F9454做的一个简单遥控开关的IAR C语言源代码.txt大悲无泪,大悟无言,大笑无声。我们手里的金钱是保持自由的一种工具。女人在约会前,一定先去美容院;男人约会前,一定先去银行。

S3F9454做的一个简单遥控开关的IAR C语言源代码

文章来源: 网络搜集 更新时间: 2008-12-05

#include #define uchar unsigned char

#define uint unsigned int

#define NOP asm("NOP")

#define DI asm("DI")

#define EI asm("EI")

#define SET_LED (P0 |= 0x01)

#define CLR_LED (P0 &= ~0x01)

#define COM_LED (P0 ^= 0x01)

#define SET_SCR (P0 |= 0x04)

#define CLR_SCR (P0 &= ~0x04)

#define COM_SCR (P0 ^= 0x04)

#define GET_SCR (P0 & 0x04)

#define GET_IR (P0 & 0x02)

#define SET_BUZZER (P2 |= 0x01)

#define COM_BUZZER (P2 ^= 0x01)

#define IR_USER_CODE 0x00

#define IR_POWER 0x7C

#define IR_Vol_Add 0x16

#define IR_Vol_Dec 0x02

#define IR_RIGHT 0x0F

#define IR_LEFT 0x0E

#define IR_UP 0x5B

#define IR_DOWN 0x53

__root const uchar smartOption[4] @ 0x003C ={0x00,0x00,0xE4,0x00};

uchar remBuffer[4];

uchar irFlag;

uint timeCount;

void InitSfr(void)

{

BTCON = 0x02;

CLKCON = 0x18;

P0CONH = 0xAA;

P0CONL = 0xA6;

P0PND = 0x00;

P1CON = 0x0A;

P2CONH = 0x4A;

P2CONL = 0xAA;

P0 = 0x00;

P2 = 0x00;

SET_SCR;

SET_LED;

SET_BUZZER;

irFlag = 0;

timeCount = 0;

}

void DelayMs(uchar ms)

{

uchar i,j;

for(i = 0; i < ms; i++)

{

for(j = 0; j < 250; j++)

NOP;

}

}

void SendDat(uchar byte)

{

uchar i;

for(i = 0; i < 8; i++)

{

CLR_LED;

if(byte & 0x80)

DelayMs(1);

else

DelayMs(3);

SET_LED;

byte <<= 1;

DelayMs(1);

}

}

void BuzzerOut(uint time)

{

uint j;

uchar i;

for(j = 0; j < time; j++)

{

BTCON = 0x02;

for(i = 0; i < 16; i++)

{

NOP;

}

COM_BUZZER;

}

}

void main()

{

DI;

InitSfr();

DelayMs(100);

T0DATA = 250;//定时器初始值

T0CON = 0xC8;//打开定时器 1/8之一分频

P0PND = 0x08;

BuzzerOut(3000);

CLR_LED;

EI;

while(1)

{

BTCON = 0x02;

P0CONL = 0xA6;

SET_BUZZER;

if(irFlag)

{

if(remBuffer[0] == IR_USER_CODE)

{

if(remBuffer[2] == IR_POWER)

{

COM_SCR;

if(GET_SCR == 0)

{

BuzzerOut(1000);

SET_LED;

}

else

{

BuzzerOut(2000);

CLR_LED;

}

}

}

//SendDat(remBuffer[2]);

irFlag = 0;

P0PND = 0x08;

}

if(GET_SCR)

{

timeCount++;

if(timeCount >= 55000)

{

timeCount = 0;

SET_LED;

DelayMs(50);

CLR_LED;

}

}

}

}

#pragma vector = 0x00

__interrupt void Interrupts(void)

{

uchar count;

uchar i,j;

if(P0PND & 0x04)

{

P0PND = 0x00;

for(count = 0;count < 160; count++)

{

T0CON = 0xC8;

do

NOP;

while(T0CNT < 150);

if(GET_IR)

{

P0PND = 0x08;

return;

}

}

while(GET_IR == 0);

for(count = 0;count < 80;count++)

{

T0CON = 0xC8;

do

NOP;

while(T0CNT < 150);

if(GET_IR == 0)

{

P0PND = 0x08;

return;

}

}

while(GET_IR);

for(j=0;j<4;j++)

{

for(i=0;i<8;i++)

{

while(GET_IR == 0);

for(count = 0; count < 18; count++)

{

T0CON = 0xC8;

do

NOP;

while(T0CNT < 150);

}

remBuffer[j] >>= 1;

if(GET_IR)

{

remBuffer[j] |= 0x80;

for(count = 0; count < 32; count++)

{

T0CON = 0xC8;

do

NOP;

while(T0CNT < 150);

}

}

}

}

irFlag = 1;

}

}

相关备注: 该程序已经程序原作者100%测试通过OK

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值