我今年毕业在珠海灯饰电子公司上班,在产品研发部上班,可是我的能力有限,唯一的一个工程师辞职了,还有一个,我不想问他,老板让我看辞职的那个工程师的代码,并且开发这个渐变的灯饰产品,我有好多地方看不懂,我不想第一次就此卡壳了,让老板另眼相看,所以求救大家给我看看
如果能逐句解释一下,我谢谢你了,并不是都看不懂,看懂的了也是很模糊,我们公司就五六个大程序,也就是五六个灯种,我要把这六个大程序看懂,让后能在基础上修改就行了
/***********************************************************
*项目名称 渐变控制器
*程序编写 ***
*创建日期 2007-4-18
*修改日期 2007-4-18
*程序说明 七彩跳变及渐变
*CPU STV12C2052
************************************************************/
#include<reg51.h> /*预处理命令*/
#include<stdio.h> /*预处理命令用到标准输入输出函数时,就要调用这个头文件*/
#define uchar unsigned char //*无符号字符型 1Byte
#define uint unsigned int //*无符号整数型 2Byte
#define ulong unsigned long //*无符号整数型 4Byte
//**********************************************
sbit R1=P3^7;
sbit G1=P3^5;
sbit B1=P3^4;
sbit biaozhi=P1^7;
sfr AUXR=0x8e;
sfr P1M0=0x91;
sfr P1M1=0x92;
sfr P3M0=0xb1;
sfr P3M1=0xb2;
// sfr WDT=0xe1; //看门狗
//**********************************************
// interrupt 0=外部中断0 1=定时器0中断 2=外部中断1 3=定时器1中断 4=串行口中断
void YIANSHI(uint);//延时函数声明
void YS(uint);
void TMRJIA();
void TMGJIA();
void TMBJIA();
void huayang1();
void huayang2();
void HL();
void LH();
//**********************************************
uint TM0,TMR,TMG,TMB,acc,i;
uchar a,ADD,WDTTMP;
uchar XS[10];
uint DE,bz2;
uchar JISHU;
uchar JISHU1;
bit bz1;
bit bz3;
//**********************************************
void main()
{
AUXR=0x40; //设置定时器为1T
TMOD=0x15; //定时器方式设定
SCON=0X50; //串行口控制
TL0=0xcd;
TH0=0xff;
TL1=0x00;
TH1=0x00;
TR0=0; //定时器0使能
TR1=1; //定时器1使能
IT0=1; //INT0触发方式 IT0=0 低电平触发 IT1=0 下降沿触发
IT1=0; //INT1触发方式 IT1=0 低电平触发 IT1=1 下降沿触发
EA=1; //全局中断
ES=0; //串行口中断
ET1=1; //定时器1中断
ET0=0; //定时器0中断
EX1=0; //外部1中断
EX0=1; //外部0中断
P3M1=0XF0;
// WDTTMP=0X3F;
// WDT=WDTTMP;
TMR=0;
TMG=0;
TMB=250;
XS[1]=250;
ADD=P1;
ADD&=0X7F;
while(1)
{
if(biaozhi==1)
{
if(JISHU1==1)
{
if(bz3==1)
{
bz2++;
if(bz2==3) bz2=0;
if(bz2==0)
{
XS[1]=250;XS[3]=0;
}
if(bz2==1)
{
XS[1]=0;XS[3]=250;
}
if(bz2==2)
{
XS[1]=250;XS[3]=250;
}
bz3=0;
}
}
else {bz3=1;}
}
else
{
if(JISHU1==1)
{
if(bz1==0)
{
HL();
bz1=1;
}
else
{
LH();
bz1=0;
}
}
}
}
}
//*****************************************
void YS(uint b) //延时 延时时间约等于10个机器周期*b
{
uint a;
for(a=0;a<b;a++);
}
void YIANSHI(uint b) //延时 延时时间约等于10个机器周期*b
{
uint a;
for(a=0;a<b;a++)
YS(12000);
}
//*****************************************
void TMRJIA() //分段延时
{
if(TMR<=5)
{
YS(10000);
}
if((TMR<20)&(TMR>5))
{
YS(6000);
}
if((TMR<=60)&(TMR>=20))
{
YS(3000);
}
if(TMR>60)
{
YS(1000);
}
}
void TMGJIA() //分段延时
{
if(TMG<=5)
{
YS(10000);
}
if((TMG<20)&(TMG>5))
{
YS(6000);
}
if((TMG<=60)&(TMG>=20))
{
YS(3000);
}
if(TMG>60)
{
YS(1000);
}
}
//*****************************************定时器中断
void DSQ()interrupt 3
{
TR1=0;
TL1=0X00;
TH1=0XFE;
TR1=1;
if(XS[1]==0) R1=0;
else
{
if(TM0==0) R1=1;
else
{
if(TM0<XS[1]) R1=1;
else R1=0;
}
}
if(XS[2]==0) G1=0;
else
{
if(TM0==0) G1=1;
else
{
if(TM0<XS[2]) G1=1;
else G1=0;
}
}
if(XS[3]==0) B1=0;
else
{
if(TM0==0) B1=1;
else
{
if(TM0<XS[3]) B1=1;
else B1=0;
}
}
TM0++;
if(TM0>254) TM0=0;
}
//*****************************************计数器中断
void JSQ()interrupt 0
{
JISHU++;
if(JISHU==50)
{
JISHU=0;
JISHU1++;
if(JISHU1==ADD) JISHU1=0;
}
}
//****************花样1******************
//************花样2**************************
void huayang2()
{
DE=ADD;
ET1=1;
XS[1]=0;
XS[2]=0;
XS[3]=0;
//红
//******红-》蓝
TMR=250;
TMG=0;
for(acc=0;acc<260;acc++)
{
if(TMR!=0)
{
TMR--;
if(TMR>250) TMR=250;
XS[1]=TMR;
TMRJIA();
}
else YS(300);
//绿
TMG++;
if(TMG>250) TMG=250;
XS[3]=TMG;
TMGJIA();
}
YIANSHI(DE);
//******蓝 -红
TMR=250;
TMG=0;
for(acc=0;acc<260;acc++)
{
if(TMR!=0)
{
TMR--;
if(TMR>250) TMR=250;
XS[3]=TMR;
TMRJIA();
}
else YS(300);
TMG++;
if(TMG>250) TMG=250;
XS[1]=TMG;
TMGJIA();
}
YIANSHI(DE);
}
void HL()
{
XS[1]=0;
XS[2]=0;
XS[3]=0;
DE=ADD;
ET1=1;
TMR=250;
TMG=0;
for(acc=0;acc<260;acc++)
{
if(TMR!=0)
{
TMR--;
if(TMR>250) TMR=250;
XS[1]=TMR;
TMRJIA();
}
else YS(300);
//绿
TMG++;
if(TMG>250) TMG=250;
XS[3]=TMG;
TMGJIA();
}
}
void LH()
{
DE=ADD;
ET1=1;
TMR=250;
TMG=0;
for(acc=0;acc<260;acc++)
{
if(TMR!=0)
{
TMR--;
if(TMR>250) TMR=250;
XS[3]=TMR;
TMRJIA();
}
else YS(300);
TMG++;
if(TMG>250) TMG=250;
XS[1]=TMG;
TMGJIA();
}
} |