标题:
单片机舞台灯程序 含有源码 我一直收藏的
[打印本页]
作者:
人在江湖
时间:
2017-4-20 20:01
标题:
单片机舞台灯程序 含有源码 我一直收藏的
我收藏的舞台灯程序 含有源码
完整源码下载(包含头文件内容):
舞台灯程序.docx
(18.5 KB, 下载次数: 28)
2017-4-20 19:59 上传
点击文件名下载附件
舞台灯程序
下载积分: 黑币 -5
单片机源码:
#include<reg52.h>
#include<intrins.h>
#include"led_disp.h"
/********引脚定义*******/
sbit led1=P1^2; //蓝灯
sbit led2=P1^3; //绿灯
sbit led3=P1^4; //红灯
/*********89板测试引脚***************
sbit key4=P3^3; //存储
sbit key3=P3^2; //减
sbit key2=P3^1; //T0 加
sbit key1=P3^0; //T1 模式选择
*/
// 彩灯引脚
sbit key4=P1^6; //存储
sbit key3=P1^7; //减
sbit key2=P3^4; //T0 加
sbit key1=P3^5; //T1 模式选择
//-----------------------------------------//
sbit voice=P1^0; //声控引脚
/***********延时函数*******************/
void delay(unsigned int time);
void delayus(uint t);
void delayms(uint k);
void delay_nms(uint n);
void delay_1ms(void);
/****模式设置函数***************************/
void led_1(uint t);
void led_2(uint t);
void led_3(uint t);
void led_mod0(void);
void led_mod1(void); // 模式1
void led_mod2(void); //模式2
void led_mod3(void); //模式3
void led_mod4(void); //模式4,声控模式
/********按键功能函数*********************/
void key1_fun(void);
void key2_fun(void);
void key3_fun(void);
void key4_fun(void);
void key_fun(void);
/*********中断、显示、其他函数***********/
void InitTimer0(void); //定时100us,用于数码管显示;中断用于执行数码管显示
void InitTimer1(void); //定时10ms,用于按键;中断执行按键扫描
void disp(void);
void dis(void);
void dis1(void);
/******************************/
void led_work(void); //led 花样闪烁
void led_rem(void); //记忆模式功能,开机时执行
void voice_ctr(void); //声控功能
uint MOD_T; //模式闪烁快慢变量
uchar MOD_NUM,MOD_T_ADD; //模式号,模式闪烁时间快慢变量
/**********模式闪烁快慢变量及对应的向量**************************************/
uint MOD_T0,MOD_T1,MOD_T2,MOD_T3,MOD_T4,MOD_T5;
uchar MOD_T_ADD0,MOD_T_ADD1,MOD_T_ADD2,MOD_T_ADD3,MOD_T_ADD4,MOD_T_ADD5;
uint MOD_TR[6]; // 元素7为存储变量
uchar MOD_T_ADDR[6]; //
/********存储记忆变量*****************/
uchar MOD_NUM_REM;
uchar MOD_T_ADD_REM;
uint num; //声控变量
/****************************************************************************/
uint delay_time; //MOD_T=3000-55*(MOD_T_ADD+1); 200--60000
uchar t,TN; //定时器0变量
bit key_flag;
//code uchar led_mod[]={0x39,0x39,0x39,0x73,0x39,0x6d,0x5e,0x79,0x7c,0x79,0x5e,0x3f}; //89板模式数显段
//code uchar led_tab[]={0x0A,0xFA,0x8C,0x98,0x78,0x19,0x09,0xBA,0x08,0x18, 0x49,0x0F,0xC8,0x0D,0x2C}; //0-9,b,c,d,e,p
code uchar led_mod[]={0x0f,0x0f,0x0f,0x2c,0x0f,0x19,0xc8,0x0d,0x49,0x0d,0xc8,0x0a}; //彩灯模式数显段
//主函数
void main(void)
{
InitTimer0();
InitTimer1();
led1=0;
led2=0;
led3=0;
P2=0x00; //数码管初始化控制
MOD_T=6000; //led闪烁时间变量
MOD_TR[0]=6000;
MOD_TR[1]=6000;
MOD_TR[2]=6000;
MOD_TR[3]=6000;
MOD_TR[4]=6000;
MOD_TR[5]=6000;
MOD_T_ADDR[0]=0;
MOD_T_ADDR[1]=0;
MOD_T_ADDR[2]=0;
MOD_T_ADDR[3]=0;
MOD_T_ADDR[4]=0;
MOD_T_ADDR[5]=0;
//MOD_NUM=MOD_NUM_REM;
//MOD_T_ADD=0;
//led_rem();
//key_flag=0;
while(1) //主程序循环
{
//led_mod3();
// key1_fun();
//key2_fun();
//key3_fun();
//key4_fun();
//key_fun();
led_work();
}
}
//延时子函数
//参数范围 0-65536
void delayus(uint t)
{
while(t--);
}
//延时子函时,
//参数 d_time 控制延时的时间
//作用,灯亮和熄灭必须持续一定时间,人眼才能看到
void delayms(uint k)
{
uint i,j;
for(i=0;i<k;i++)
for(j=0;j<120;j++);
}
void delay_1ms(void)
{
unsigned char a,b;
for(b=4;b>0;b--)
for(a=248;a>0;a--);
}
void delay_nms(uint n)
{
uint i;
for(i=0;i<n;i++)
{delay_1ms();}
}
/************************************/
void led_1(uint t)
{
led1=1;
delayms(t);
led1=0;
delayms(t);
led2=1;
delayms(t);
led2=0;
delayms(t);
led3=1;
delayms(t);
led3=0;
delayms(t);
}
void led_2(uint t)
{
led1=1;
led2=1;
delayms(t);
led1=0;
led2=0;
delayms(t);
led2=1;
led3=1;
delayms(t);
led2=0;
led3=0;
delayms(t);
led3=1;
led1=1;
delayms(t);
led3=0;
led1=0;
delayms(t);
}
void led_3(uint t)
{
led1=1;
led2=1;
led3=1;
delayms(t);
led1=0;
led2=0;
led3=0;
delayms(t);
}
void led_mod0(void)
{
led_1(MOD_TR[0]);
}
void led_mod1(void)
{
led_2(MOD_TR[1]);
}
void led_mod2(void)
{
led_3(MOD_TR[2]);
}
void led_mod3(void)
{
led_1(MOD_TR[3]);
led_2(MOD_TR[3]);
led_3(MOD_TR[3]);
}
void led_mod4(void)
{
switch(num)
{
case 0:
{ led1=1;
led2=1;
led3=1;
break;
}
case 1:
{
led1=0;
led2=1;
led3=1;
break;
}
case 2:
{
led1=1;
led2=0;
led3=1;
break;
}
case 3:
{
led1=1;
led2=1;
led3=0;
break;
}
case 4:
{
led1=1;
led2=0;
led3=0;
break;
}
case 5:
{
led1=0;
led2=0;
led3=1;
break;
}
case 6:
{
led1=0;
led2=1;
led3=0;
break;
}
}
}
void led_rem(void)
{
}
/*************************************/
/**************中断设置及执行*****************/
void InitTimer0(void) //100us
{
TMOD |= 0x02;
TH0 = 0x00;
TL0 = 0x38;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Timer0Interrupt(void) interrupt 1
{
//add your code here!
//disp();
t++;
if(t==30)
{
t=0;
TN++;
if(TN==5) TN=1;
dis();
}
if(t<15)
{
voice_ctr();
}
//dis();
}
/************************************************/
void InitTimer1(void)
{
TMOD |= 0x10;
TH1 = 0x0B1;
TL1 = 0x0E0;
EA = 1;
ET1 = 1;
TR1 = 1;
}
void Timer1Interrupt(void) interrupt 3
{
TH1 = 0x0B1;
TL1 = 0x0E0;
/*********add your code here!*****************/
//dis();
key_fun();
}
/*****************按键功能函数************************************/
void key1_fun(void) //按键1功能--模式选择
{
if(!key1)
{
delayus(1000);
if(!key1)
{
while(!key1);
MOD_NUM++;
if(MOD_NUM==6) MOD_NUM=0;
}
num=0;
}
}
void key2_fun(void) //按键2功能--加
{
if(!key2)
{
delayus(1000);
if(!key2)
{
while(!key2);
//if(MOD_NUM==0)
{
if(MOD_T_ADDR[MOD_NUM]==99) MOD_T_ADDR[MOD_NUM]=0;
else MOD_T_ADDR[MOD_NUM]+=1;
}
}
}
MOD_TR[MOD_NUM]=2*(6000-55*(MOD_T_ADDR[MOD_NUM]+1));
}
void key3_fun(void) //按键3功能--减
{
if(!key3)
{
delayus(1000);
if(!key3)
{
while(!key3);
if(MOD_T_ADDR[MOD_NUM]==0) MOD_T_ADDR[MOD_NUM]=99;
else MOD_T_ADDR[MOD_NUM]-=1;
}
}
MOD_TR[MOD_NUM]=2*(6000-55*(MOD_T_ADDR[MOD_NUM]+1));
}
void key4_fun(void) //存储键:模式,闪烁快慢存储
{
if(!key4)
{
delayus(1000);
if(!key4)
{
while(!key4);
MOD_NUM_REM=MOD_NUM;
MOD_T_ADD_REM=MOD_T_ADDR[MOD_NUM];
}
}
}
void key_fun(void)
{
// if(!key1||!key2||!key3||!key4) key_flag=1;
//if(key_flag)
key1_fun();
key2_fun();
key3_fun();
key4_fun();
}
//-------------------------------------------------//
void voice_ctr(void)
{
if(!voice)
{
//delayus(10);
while(!voice);
num++;
if(num==7) num=0;
}
}
/**************led花样闪烁*****************/
void led_work(void)
{
if(MOD_NUM==0) { led_mod0(); }
else if(MOD_NUM==1) { led_mod1(); }
else if(MOD_NUM==2) { led_mod2(); }
else if(MOD_NUM==3) { led_mod3(); }
else if(MOD_NUM==4) { led_mod4(); }
else
{
led1=1;
led2=1;
led3=1;
}
}
/*****************************显示函数:模式和闪烁快慢显示***************************/
void dis(void)
{
/*P0=led_tab[MOD_NUM/10]; seg1 delayus(50);
P0=led_tab[MOD_NUM%10]; seg2 delayus(50);
P0=led_tab[MOD_T_ADD/10]; seg3 delayus(50);
P0=led_tab[MOD_T_ADD%10]; seg4 delayus(50);
*/
if(TN==1)
{
led_disp(1,led_mod[MOD_NUM*2]);
//delayus(5);
}
else if(TN==2)
{
led_disp(2,led_mod[MOD_NUM*2+1]);
//delay_nms(5);
// delayus(5);
}
else if(TN==3)
{
led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]);
//delay_nms(5);
// delayus(5);
}
else
{
led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]);
//delay_nms(5);
// delayus(5);
}
/* if(TN==0)
{ led_disp(0,led_mod[MOD_NUM*2]); }
else if(TN==1)
{ led_disp(1,led_mod[MOD_NUM*2+1]); }
else if(TN==2)
{led_disp(2,led_tab[MOD_T_ADD/10]);}
else
{led_disp(3,led_tab[MOD_T_ADD%10]);}
*/
/*if(MOD_NUM==0)
{
if(TN==0)
{ led_disp(0,led_mod[0]); }
else if(TN==1)
{ led_disp(1,led_mod[1]); }
else if(TN==2)
{led_disp(2,led_tab[MOD_T_ADD0/10]);}
else
{led_disp(3,led_tab[MOD_T_ADD0%10]);}
}
else if(MOD_NUM==1)
{
if(TN==0)
{ led_disp(0,led_mod[2]); }
else if(TN==1)
{ led_disp(1,led_mod[3]); }
else if(TN==2)
{led_disp(2,led_tab[MOD_T_ADD1/10]);}
else
{led_disp(3,led_tab[MOD_T_ADD1%10]);}
}
else if(MOD_NUM==2)
{
if(TN==0)
{ led_disp(0,led_mod[4]); }
else if(TN==1)
{ led_disp(1,led_mod[5]); }
else if(TN==2)
{led_disp(2,led_tab[MOD_T_ADD2/10]);}
else
{led_disp(3,led_tab[MOD_T_ADD2%10]);}
}
else if(MOD_NUM==3)
{
if(TN==0)
{ led_disp(0,led_mod[6]); }
else if(TN==1)
{ led_disp(1,led_mod[7]); }
else if(TN==2)
{led_disp(2,led_tab[MOD_T_ADD3/10]);}
else
{led_disp(3,led_tab[MOD_T_ADD3%10]);}
}
else if(MOD_NUM==4)
{
if(TN==0)
{ led_disp(0,led_mod[8]); }
else if(TN==1)
{ led_disp(1,led_mod[9]); }
else if(TN==2)
{led_disp(2,led_tab[MOD_T_ADD4/10]);}
else
{led_disp(3,led_tab[MOD_T_ADD4%10]);}
}
else
{
if(TN==0)
{ led_disp(0,led_mod[10]); }
else if(TN==1)
{ led_disp(1,led_mod[11]); }
else if(TN==2)
{led_disp(2,led_tab[MOD_T_ADD5/10]);}
else
{led_disp(3,led_tab[MOD_T_ADD5%10]);}
}
*/
}
void dis1(void)
{
/*
led_disp(1,led_tab[11]);
led_disp(2,led_tab[11]);
led_disp(3,led_tab[0]);
led_disp(4,led_tab[0]); delay_led(500);
*/
if(TN==1)
{
led_disp(1,led_mod[MOD_NUM*2]); delay_led(35);
led_disp(2,led_mod[MOD_NUM*2+1]); delay_led(35);
led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]); delay_led(35);
led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]); delay_led(35);
}
else if(TN==2)
{
led_disp(2,led_mod[MOD_NUM*2+1]); delay_led(35);
led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]); delay_led(35);
led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]); delay_led(35);
led_disp(1,led_mod[MOD_NUM*2]); delay_led(35);
}
else if(TN==3)
{
led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]); delay_led(35);
led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]); delay_led(35);
led_disp(1,led_mod[MOD_NUM*2]); delay_led(35);
led_disp(2,led_mod[MOD_NUM*2+1]); delay_led(35);
}
else if(TN==4)
{
led_disp(4,led_tab[MOD_T_ADDR[MOD_NUM]%10]); delay_led(35);
led_disp(1,led_mod[MOD_NUM*2]); delay_led(35);
led_disp(2,led_mod[MOD_NUM*2+1]); delay_led(35);
led_disp(3,led_tab[MOD_T_ADDR[MOD_NUM]/10]); delay_led(35);
}
}
void disp(void)
{
P0=led_tab[11]; P2=0x20; // P0=0x0f; //led_tab[11];
delayus(14);
//P2=0xff;
//delayms(10);
P0=led_tab[11]; P2=0x10; //P0=0x0f; //led_tab[11];
delayus(14);
//P2=0x00;
//P2=0xff;
//delayms(10);
P0=led_tab[0]; P2=0x08; // P0=0x0a; //led_tab[0];
delayus(14);
//P2=0x00;
//P2=0xff;
//delayms(10);
P0=led_tab[0]; P2=0x40; //P0=0x0a; //led_tab[0];
delayus(14);
//P2=0x00;
//P2=0xff;
//delayms(10);
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1