标题:
蓝牙APP,红外遥控光立方制作单片机源码
[打印本页]
作者:
zzxxccvvbb
时间:
2018-12-21 09:54
标题:
蓝牙APP,红外遥控光立方制作单片机源码
光立方制作教程源码!!!
0.png
(50.98 KB, 下载次数: 22)
下载附件
2018-12-22 01:31 上传
FFT频谱测试源码
MT10-单色app程序源码
MT10-单色上位机恒流
wifi通讯程序源码
上位机通讯测试源码
双色光立方贪吃蛇程序
呼吸灯程序源码
按键程序测试源码
点亮光立方程序测试源码
红外遥控程序源码
脱机动画程序源码
蓝牙APP通讯源码
语音APP萌萌游戏
全部资料51hei下载地址:
通用程序源码.zip
(17.13 MB, 下载次数: 66)
2018-12-21 09:53 上传
点击文件名下载附件
下载积分: 黑币 -5
单片机源程序如下:
#include <STC12C5A60S2.H>//包含头文件 STC12C5A60S2.H
//STC单片机的头文件可以使用STC-ISP下载软件添加到Keil编译软件中使用(参考STC官方下程序下载软件使用手册载)
#define uchar unsigned char
#define uint unsigned int
uchar data buffer[8]; //数组
uchar display[8][8];
sbit RR=P3^6;//红
sbit GG=P2^2;//绿
sbit BB=P2^4;//蓝
sbit k1=P0^4;//播放、暂停
sbit k2=P0^5;//音量减
sbit k3=P0^6;//音量加
sbit ABL=P4^3;//亮度
uchar data rxcnt=0;
char data bb,cheng,yanse; //sa串口中断,bb延时变量,
unsigned char cube_frame[73];//一帧cube_frame数据73字节,当然这里的数组替换为你程序中的相应数组
unsigned char byte_cnt=0;//接受到的字节数
unsigned char cmd_type=0;//接受到命令类型,可能是动画下载,进入音频模式等..
bit receive_sta=0; //接受状态,表示数据是否接受完成
void disp_cube(unsigned char DZ_data[64]);
void timer0init(void)
{
TMOD=0X12;
EX1=0;
ET1=1;//定时器1开中断
EA=1;
IPH|=0X01;
PX0=1;
IT0=1;
P0M0=0xf8; //P0口开漏输出
P0M1=0xf0;
P3M0=0x00; //P3准双向输出
P3M1=0X00;
P2M0=0x00; //P2准双向输出
P2M1=0X00;
}
/*************************************************************************************************************************/
void delay(int i)// 延时 bb速度控制
{
char b;
while (i--)
{
b=bb;
while(b--);
}
}
void delay2(uint t)
{
int i;
while(t--)
for(i=0;i<5;i++);
}
/*************************************************************************************************************************/
/******************************************74HC595数据发送函数************************************************************/
/*************************************************************************************************************************/
sbit SH_CP = P3^4; //SCK
sbit ST_CP = P3^3;//RCK
sbit DS = P3^5;//SER
sbit SH_CP2 = P2^6; //SCK2
sbit ST_CP2 = P2^5;//RCK2
sbit DS2 = P2^3;//SER2
void initial595() //列扫描74HC595初始化
{
SH_CP = 0;
ST_CP = 0;
DS = 0;
}
void initial5952() //行扫描74HC595初始化
{
SH_CP2 = 0;
ST_CP2 = 0;
DS2 = 0;
}
/*--------------- 发送数据 ---------------*/
void send_data(unsigned char d)
{
unsigned char i;
for(i=0;i<8;i++)
{
DS = d&0x80; //发送最高位
SH_CP = 1;
SH_CP = 0; //移位寄存器移位
d = d<<1; //数据移位f
}
}
void xiansi1() //列扫描74HC595数据输出
{
send_data(buffer[0]); //u8
send_data(buffer[1]); //u7
send_data(buffer[2]); //u6
send_data(buffer[3]); //u5
send_data(buffer[4]); //u4
send_data(buffer[5]); //u3
send_data(buffer[6]); //u2
send_data(buffer[7]); //u1
}
void InitUart()
{
EADC=0; //AD中断关
//sa=1;
// BRT独立波特率发生器的溢出率= SYSclk / ( 256 - BRT )
//11.0592M晶振 57600波特率
PCON &= 0x7f; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
BRT = 0xF3; //设定独立波特率发生器重装值 0xFA
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
ES = 1; //充许串口1中断
}
//***********************************************************************************************
void disp_cube(unsigned char DZ_data[64])
{ unsigned char i;
for(i=0;i<64;i++)
{
display[0][i]=DZ_data[i];//这里的代码自己实现
}
}
void shangwei()
{
while(1)
{
if(receive_sta)//接受完成
{
receive_sta=0;//清除接受成功标志,这步很重要
}
disp_cube(cube_frame+9);//如果接受命令时就时时刷新原来的点阵数据
}
}
void main()
{ InitUart();
initial595(); //初始化调用
initial5952(); //初始化调用
timer0init(); //初始化调用
TR1=1;//启动定时器1
BB=0;
bb=3;
ABL=0;
shangwei();
}
/*********************************************************************************************************************************************/
void print1() interrupt 3 //定时器1中断函数
{
uchar i;
static uchar layer=0;
for (i=0;i<8;i++)
{
buffer[i]=~display[layer][i];
}
xiansi1();
cheng=0x01<<layer;
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;
TH1=0xf0;
TL1=0xf0;
delay(2);
// TR1=1;//启动定时器1
}
/***************************************************************************************************************************************/
/*******************************************************************************************************************************************/
void UartIntterupt() interrupt 4
{
unsigned char res=0;
if(RI==1)//进入到接受中断
{
RI=0;
if(receive_sta==1)return;//如果接受完成啦就直接退出,等待main函数将数据给显示完
res=SBUF;
if(byte_cnt==0)cmd_type=res;//第一个字节为命令类型
switch(cmd_type)
{
case 0xf5: //动画下载
cube_frame[byte_cnt]=res;
byte_cnt++;
if(byte_cnt==73)
{ byte_cnt=0;
receive_sta=1;//表示接受完成
}
break;
case 0xf1: //动画音量增加
k3=0;
delay2(50000);
delay2(50000);
delay2(50000);
delay2(50000);
k3=1;
receive_sta=1;
break;
case 0xf0: //动画音量减小
k2=0;
delay2(50000);
delay2(50000);
delay2(50000);
delay2(50000);
k2=1;
receive_sta=1;
break;
case 0xef: //上一曲
k2=0;
delay2(20000);
k2=1;
receive_sta=1;
break;
case 0xee: //下一曲
k3=0;
delay2(20000);
k3=1;
receive_sta=1;
break;
case 0xed: //eq音乐类型,摇滚,爵士,流行
k1=0;
delay2(20000);
k1=1;
receive_sta=1;
break;
case 0xec: //暂停与播放
k1=0;
delay2(20000);
k1=1;
receive_sta=1;
break;
case 0xea: //进入待机
IAP_CONTR=0x20;
case 0xD2: //亮度
ABL=~ABL;
receive_sta=1;
break;
case 0xD3: //模式切换
k3=0;
delay2(20000);
k3=1;
delay2(10000);
k3=0;
delay2(20000);
k3=1;
receive_sta=1;
break;
default:break;//蓝牙的连接成功或者断开连接消息
}
}
}
复制代码
作者:
qq970068407
时间:
2019-1-1 10:23
感谢分享,如果有电路图就更完美
作者:
kennen
时间:
2019-4-21 23:36
感谢分享,拿来借鉴借鉴
作者:
热带雨林
时间:
2024-9-2 20:05
感谢分享,资料不错
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1