旋转LED灯程序(51单片机)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

飘飞在空中的文字(详情咨询QQ:278540660)

一、实物图

(夜晚可以观测到飘在空中的文字,美!!!)

二、部分代码

/***************************************************************main. c***************************************************/

#include

void main()

{

EX0init();

TIM0init();

Init_DS1302();

while(1)

{

time_set(IRcord[2]);

IRcord[2]=0;

if(time_love==0)

{

if(time_onoff==0)

{

ds1302_read_time();

Dig_time();

}

else

{

Dig_time();

}

}

else

{

Display_love();

}

while(!flag);

flag=0;

}

}

/***************************************************************redco n.h**************************************************/

#define uchar unsigned char

#define uint unsigned int

sbit IR=P3^2;

uchar irtime; //中断次数

uchar IRcord[4]; //记录接收到的四个字节数据

uchar irdata[33]; //接收到的32个二进制bit

uint flag=0;

uchar nums=0;

uint timelate=0;

void TIM0init(void) //定时器0初始化

{

TMOD=0x02; //定时器0工作方式2,TH0是重装值,TL0是初值

TH0=0x00; //重载值

TL0=0x00; //初始化值(0.255ms一次中断)--晶振频率的十二分之一

ET0=1; //开中断

TR0=1;

}

void EX0init(void)

{

IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)

EX0 = 1; //使能外部中断0

IT1=1; //指定外部中断1下降沿触发,INT0 (P3.3)

EX1=1; //使能外部中断1

EA = 1; //开总中断

}

void Ircordpro(void) //红外码值处理函数

{

uchar i, j, k;

uchar cord,value;

k=1;

for(i=0;i<4;i++) //处理4个字节

{

for(j=1;j<=8;j++) //处理1个字节8位

{

cord=irdata[k];

if(cord>7) //1.125ms为0 2.25ms为1 0.255*7作为稳定判断值

value|=0x80;

if(j<8)

{

value>>=1;

}

k++;

}

IRcord[i]=value;

value=0;

}

}

void EX1_ISR (void) interrupt 2 //外部中断0服务函数

{

static uchar i; //接收红外信号处理

static bit startflag; //是否开始处理标志位

if(startflag)

{

if(irtime<60&&irtime>=35) //连续发送两个32位数据间隔不可预知性) 尤为重要

{

i=0;

}

irdata[i]=irtime; //存储每个电平的持续时间

irtime=0;

i++;

if(i==33)

{

i=0;

startflag=0;

Ircordpro();

}

}

else

{

startflag=1;

irtime=0;

}

}

void tim0_isr (void) interrupt 1 using 1

{

irtime++;

}

void EX0_ISR (void) interrupt 0

{

flag=1;

nums++;

if(nums>=20)

{

nums=0;

timelate++;

if(timelate>=4)

{

timelate=0;

}

}

}

/***************************************************************DS130 2.h**************************************************/

#include

#include

#define uint unsigned int

#define uchar unsigned char

uchar time_buf[7]={0x13,0x01,0x01,0x00,0x00,0x00,0x02};

sbit SCLK=P0^0;

sbit SDA=P0^1;

sbit RST=P0^4;

void delayus(uint t)

{

uint i;

for(i=0;i

_nop_();

}

void delayms(uint t)

{

uint x,y;

相关文档
最新文档