红外程序流程图.docx

上传人:b****7 文档编号:26379224 上传时间:2023-06-18 格式:DOCX 页数:18 大小:148.48KB
下载 相关 举报
红外程序流程图.docx_第1页
第1页 / 共18页
红外程序流程图.docx_第2页
第2页 / 共18页
红外程序流程图.docx_第3页
第3页 / 共18页
红外程序流程图.docx_第4页
第4页 / 共18页
红外程序流程图.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

红外程序流程图.docx

《红外程序流程图.docx》由会员分享,可在线阅读,更多相关《红外程序流程图.docx(18页珍藏版)》请在冰豆网上搜索。

红外程序流程图.docx

红外程序流程图

voidIRdelay(unsignedcharx)//延时子程序

{

unsignedchara,b;

while(x--)

{

for(b=6;b>0;b--)

for(a=127;a>0;a--);

}

voiddelay(uinti)

{

charb;

while(i--)

{

b=bb;

while(b--);

}

}

voiddelay2(uintt)

{

inti;

while(t--)

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

}

 

voidsend_data(unsignedchard)//发送一层当中的一行显示数据,8位

{

unsignedchari;

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

{

DS=d&0x80;//发送最低位

SH_CP=1;

SH_CP=0;//移位寄存器移位

d=d<<1;//数据移位f

}

}

voidmain()

ST_CP2=0;//控制显示层

if(layer<7)

layer++;//为扫面上一层做准备(光立方一个静止图形是从最底层开始扫描)

else

layer=0;

delay

(2);

}

}

while(amenu==1)//显示心形

{

staticucharlayer=0;

for(j=0;j<8;j++)//LED正极驱动循环扫描8层

{

for(i=0;i<8;i++)//循环8次,每一次将光立方的一层动画数据装入buffer[]数组

{

buffer[i]=~display2[layer][i];//调用层暂存数组将用于光立方显示的二维数组里的一层显示数据装入其中

}

xiansi1();//单片机发送数据给74HC595

cheng=0x01<

{

uchard,dd,i,j,cheng;

timer0init();

initial595();

initial5952();

ABL=0;

menu=1;

out=0;

bb=0;

RR=1;//红色控制

GG=1;//绿色控制

BB=0;//蓝色控制

d=60000;

dd=60000;

while(menu==1)//显示全亮

{

staticucharlayer=0;

for(j=0;j<8;j++)//LED正极驱动循环扫描8层

{

for(i=0;i<8;i++)//循环8次,每一次将光立方的一层动画数据装入buffer[]数组

{

buffer[i]=display1[layer][i];//调用层暂存数组将用于光立方显示的二维数组里的一层显示数据装入其中

}

xiansi1();//单片机发送数据给74HC595

cheng=0x01<

DS2=~cheng&0x01;//发送层扫描数据

SH_CP2=1;

SH_CP2=0;//移位寄存器移位

ST_CP=1;

ST_CP=0;//控制显示列

ST_CP2=1;

DS2=~cheng&0x01;//发送层扫描数据

SH_CP2=1;

SH_CP2=0;//移位寄存器移位

ST_CP=1;

ST_CP=0;//控制显示列

ST_CP2=1;

ST_CP2=0;//控制显示层

if(layer<7)

layer++;//为扫面上一层做准备(光立方一个静止图形是从最底层开始扫描)

else

layer=0;

if(out==0)

{

break;

}

delay(65535);

delay(65535);

delay(65535);

delay(65535);

}

}

 

}

N=0;

}//endfork

}//endforj

if(IRCOM[2]!

=~IRCOM[3])

{EX0=1;

return;

}

if(IRCOM[2]==0x0c)//1键

{//复位-音频

menu=1;

out=0;

amenu=0;

}

if(IRCOM[2]==0x18)//2键

{//上位机

menu=0;

out=0;

amenu=1;

}

if(IRCOM[2]==0x5e)//3键

{//脱机动画

menu=0;

out=1;

amenu=0;

}

if(IRCOM[2]==0x4a)//9键

{

}

voidIR_IN(void)interrupt0

{

unsignedcharj,k,N=0;

EX0=0;

IRdelay(15);

if(IRIN==1)

{EX0=1;

return;

}

//确认IR信号出现

while(!

IRIN)//等IR变为高电平,跳过9ms的前导低电平信号。

{IRdelay

(1);}

for(j=0;j<4;j++)//收集四组数据

{

for(k=0;k<8;k++)//每组数据有8位

{

while(IRIN)//等IR变为低电平,跳过4.5ms的前导高电平信号。

{IRdelay

(1);}

while(!

IRIN)//等IR变为高电平

{IRdelay

(1);}

while(IRIN)//计算IR高电平时长

{

IRdelay

(1);

N++;

if(N>=30)

{EX0=1;

return;}//0.14ms计数过长自动离开。

}//高电平计数完毕

IRCOM[j]=IRCOM[j]>>1;//数据最高位补“0”

if(N>=8){IRCOM[j]=IRCOM[j]|0x80;}//数据最高位补“1”

k2=1;

}

if(IRCOM[2]==0x15)//+键

{//音量加

k3=0;

delay2(50000);

delay2(50000);

delay2(50000);

delay2(50000);

k3=1;

}

if(IRCOM[2]==0x46)//CH键

{//待机

IAP_CONTR=0x20;

}

if(IRCOM[2]==0x42)//7号键亮度

{

ABL=~ABL;

}

EX0=1;

}

if(IRCOM[2]==0x09)//EQ键

{

}

if(IRCOM[2]==0x44)//<<键

{//上一曲

k3=0;

delay2(20000);

k3=1;

}

if(IRCOM[2]==0x40)//>>键

{//下一曲

k2=0;

delay2(20000);

k2=1;

}

if(IRCOM[2]==0x43)//||键

{//播放暂停

k1=0;

delay2(20000);

k1=1;

}

if(IRCOM[2]==0x07)//-键

{//音量减

k2=0;

delay2(50000);

delay2(50000);

delay2(50000);

delay2(50000);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1