光立方红外遥控程序源码.docx
- 文档编号:9861847
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:16
- 大小:17.26KB
光立方红外遥控程序源码.docx
《光立方红外遥控程序源码.docx》由会员分享,可在线阅读,更多相关《光立方红外遥控程序源码.docx(16页珍藏版)》请在冰豆网上搜索。
光立方红外遥控程序源码
/**********************************************黎明途电子************************************************************/
/**********************************************红外遥控器测试程序*******************************************/
/*拨轮按键左显示心形拨轮按键中全亮显示拨轮按键右单层向上动态*/
#include
#defineucharunsignedchar
#defineuintunsignedint
chardatamenu,out,amenu,bb,num,cheng;//menu按键左,out按键右,amenu按键中,bb延时变量,num频谱显示,cheng行扫描变量,
uchardatabuffer[8];//光立方显示一层的数据暂存数组
/*定义管脚定义单片机用于发送数据给74HC595引脚和数据移位控制*/
sbitSH_CP=P3^4;//SCK
sbitST_CP=P3^3;//RCK
sbitDS=P3^5;//SER
sbitCH340=P0^3;//SE
sbitSH_CP2=P2^6;//SCK2
sbitST_CP2=P2^5;//RCK2
sbitDS2=P2^3;//SER2
sbitRR=P3^6;//红
sbitGG=P2^2;//绿
sbitBB=P2^4;//蓝
sbitABL=P4^3;//亮度
sbitk1=P0^4;//播放、暂停
sbitk2=P0^5;//音量减
sbitk3=P0^6;//音量加
bitreceive_sta=0;//接受状态,表示数据是否接受完成
sbitIRIN=P3^2;//红外接收器数据线
voidIRdelay(charx);//x*0.14MS
unsignedcharIRCOM[7];
/*******************************************************************/
/**************************************************************************************************************************************/
ucharcodedisplay1[8][8]={//图形1全亮模式
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第1层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第2层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第3层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第4层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第5层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第6层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第7层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第8层
};
ucharcodedisplay2[8][8]={//图形2心形模式
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第1层
0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第2层
0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第3层
0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第4层
0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第5层
0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第6层
0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第7层
0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第8层
};
ucharcodedisplay3[8][8]={//图形3每次亮一层动态模式
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第1层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第2层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第3层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第4层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第5层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第6层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第7层
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//第8层
};
/*---------------初始化--------------*/
voidtimer0init(void)
{
TMOD=0X12;
EX0=1;
ET0=1;
EX1=0;
ET1=1;//定时器1开中断
EA=1;
TH1=0xc0;
TL1=0;
IPH|=0X01;
PX0=1;
IT0=1;
P1M0=0X7F;
P1M1=0X80;
P0M0=0xf8;//P0口开漏输出
P0M1=0xf0;
P3M0=0x00;//P3口准双向输出
P3M1=0X00;
P2M0=0x00;//P2口准双向输出
P2M1=0X00;
}
voidinitial595()//列驱动初始化
{
SH_CP=0;
ST_CP=0;
DS=0;
}
voidinitial5952()//行驱动初始化
{
SH_CP2=0;
ST_CP2=0;
DS2=0;
}
/************************************延时函数**************************************************************/
voidIRdelay(unsignedcharx)//延时子程序
{
unsignedchara,b;
while(x--)
{
for(b=6;b>0;b--)
for(a=127;a>0;a--);
}
}//cheng行扫描变量,yanse颜色控制,liangdu亮度控制
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
}
}
voidxiansi1()//一次发送1层,8行的显示数据,64位
{
send_data(buffer[0]);//u9
send_data(buffer[1]);//u8
send_data(buffer[2]);//u7
send_data(buffer[3]);//u6
send_data(buffer[4]);//u5
send_data(buffer[5]);//u4
send_data(buffer[6]);//u3
send_data(buffer[7]);//u2
}
/*************************************************主函数*******************************************************************/
voidmain()
{
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; 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< 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; delay (2); } } while(out==1)//一层一层的动态显示 { staticucharlayer=0; for(j=0;j<8;j++)//LED正极驱动循环扫描8层 { for(i=0;i<8;i++)//循环8次,每一次将光立方的一层动画数据装入buffer[]数组 { buffer[i]=display3[layer][i];//调用层暂存数组将用于光立方显示的二维数组里的一层显示数据装入其中 } xiansi1();//单片机发送数据给74HC595 cheng=0x01< 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); } } } 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” 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键 { } 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); 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; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 立方 红外 遥控 程序 源码